シンメトリックキーを使用してメッセージに署名する場合は、AES(または3キーTDEA、またはCameilla)に基づくCMACを使用します。 CMACは、ブロック暗号の上に構築されたメッセージ認証コード(MAC)です。暗号化にAES/3TDEA/Cameillaも使用している場合(つまり、便利です)、一般にCMACを使用します。
HMACを使用することもできます。 HMACは、ハッシュの上に構築されたメッセージ認証コード(MAC)です。あなたはHMACを使うでしょう、ハッシュは既にプログラムに存在しています(つまり、便利でした)。
プログラムにブロック暗号とハッシュの両方がある場合は、一般にHMACを使用します。
最後に(完全なものとして)、MD5は使用しないでください。その壊れた(フリーソフトウェア世界の多くが何を考えているにもかかわらず)。 SHA-1は、NIST、NESSIE、ECRYPTなどの機関による新しい申請のために承認されなくなりました。 SHA-2ファミリーのハッシュを使用するか、Whirlpoolを使用してください。
Java固有のものについては、Java Cryptography Extensionsを参照してください。
出典
2011-11-28 18:09:31
jww
可変長メッセージの場合、CBC-MACは切断されます。 CMACは、CBC-MACの権利行使です。 – jww
申し訳ありませんが、私はまだ明確ではありません。 HMACに使用される鍵サイズを決定する要因は何ですか? CMACよりもHMACを使うことができます。しかし、私が持っている鍵は128です。それは使えますか?たとえば、SecretKey key = new SecretKeySpec(key、 "AES") – user839917
MACと暗号化に異なる(独立した)鍵を使用することをお勧めします。 HMACに必要な任意の長さ(ハッシュ関数のブロック長まで)を使用することができます(実装でサポートされているかどうかはわかりませんが)。ハッシュ関数のブロック長に0で埋め込まれます。より大きいキーはより多くのセキュリティを提供しますが、ハッシュ関数の出力サイズ(= MACサイズ)よりも良くなりません。 –