質問

共有キーを使用して、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を使用しても、「ランダム性を侵食」したり、キースペースを制限したりしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top