.NETで印刷可能なHMAC共有キーを生成します
-
30-09-2019 - |
質問
共有キーを使用して、HMACSHA512をハッシュデータに使用しています。キーが共有されているので、輸送を容易にするためにすべての印刷可能なキャラクターになりたいと思います。これらのキーを生成するための最良のアプローチは何なのか疑問に思っています。
現在、rngcryptoserviceproviderのgetBytes()メソッドを使用してキーを生成しますが、返されるバイト配列には印刷できない文字が含まれています。それで、ベース64が結果をエンコードするのが安全であるのか、それともランダム性をあまりにも侵食し、物事をはるかに安全にしているのかと思っていますか?それが良いアプローチではない場合、提案できますか?
キーを印刷可能なキャラクターに制限することで、キースペースの全体的な幅(つまり、8ビットのうち1つを削る)を制限していることを理解していますが、それで大丈夫です。
解決
キーを自動生成しないことを処理できない場合 http://www.grc.com/passwords 非常にランダムな重要な素材の良いソースです。
Base64は、バイト配列の基礎となるエントロピーを減らしません。キーを生成して生の形式で使用できますが、Base64はそれをエンコードして、必要な場所に輸送します。その後、新しい場所で使用する前に、base64を生フォームにデコードします。この操作にはエントロピーの損失はありません。 base64エンコードは、エントロピーを8ではなくバイトあたり6ビットに減らしますが、コーディングの結果は長いため、全体的にエントロピーは同じです。
あなたがそれを行うことができるもう1つの方法は、192ビット相当のエントロピーで24のランダムバイトを取得することです。これをエンコードするBase64は、元のランダム性と192ビットのエントロピーを備えた32文字の文字列(256ビット)を提供します。これを共有キーとして直接使用できます。
他のヒント
base64はバイトシーケンスを変換して、特定の印刷可能な文字のみを使用します。
この変換は、情報を決して変更しません。また、可逆的です。Base64出力をデコードすることで、元のバイトシーケンスを取得できます。
したがって、base64を使用しても、「ランダム性を侵食」したり、キースペースを制限したりしません。