0

共有キーを使用してデータをハッシュするために HMACSHA512 を使用しています。キーは共有されているので、転送を容易にするためにすべて印刷可能な文字にしたいと思います。これらのキーを生成するための最良のアプローチは何だろうと思っています。

現在、RNGCryptoServiceProvider の GetBytes() メソッドを使用してキーを生成していますが、返されるバイト配列には印刷できない文字が含まれています。だから、結果をbase64でエンコードするのが安全なのか、それともランダム性を侵食しすぎて安全性が低下するのか疑問に思っていますか? それが良いアプローチではない場合、提案できますか?

キーを印刷可能な文字に制限することで、キー空間の全体的な幅を制限している (つまり、8 ビットのうちの 1 つを削除する) ことは理解していますが、それで問題ありません。

4

2 に答える 2

3

キーの自動生成を処理できない場合は、 http://www.grc.com/passwordsが非常にランダムなキー素材の良いソースです。

Base64 は、バイト配列の基になるエントロピーを削減しません。キーを生成して生の形式で使用することもできますが、Base64 でエンコードして必要な場所に転送します。次に、新しい場所で使用する前に、Base64 でデコードして元の形式に戻します。この操作ではエントロピーの損失はありません。Base64 エンコーディングは、エントロピーを 1 バイトあたり 8 ビットではなく 6 ビットに減らしますが、コーディングの結果は長くなるため、全体的なエントロピーは同じになります。

もう 1 つの方法は、192 ビット相当のエントロピーに対して 24 のランダム バイトを取得することです。これを Base64 でエンコードすると、元のランダム性と 192 ビットのエントロピーを保持する 32 文字の文字列 (256 ビット) が得られます。これを共有キーとして直接使用できます。

于 2010-12-01T23:31:38.573 に答える
3

BASE64 は、特定の印刷可能な文字のみを使用するようにバイト シーケンスを変換します。

この変換によって情報が変更されることはなく、情報の保存方法のみが変更されます。また、元に戻すこともできます。BASE64 出力をデコードすることで、元のバイト シーケンスを取得できます。

したがって、BASE64 を使用しても、「ランダム性が損なわれる」ことはなく、キー スペースが制限されることもありません。

于 2010-12-01T23:34:18.280 に答える