4
  1. AES/Rijndaelまたは任意の対称暗号化を使用します。

  2. それ自体をキーとして使用し、ランダムなIVを使用して、非表示の値を暗号化します。

  3. 暗号文+IVを保存します。他のすべてを破棄します。

  4. ハッシュを確認するには:提供されたプレーンテキストを使用して復号化してみてください。提供された==復号化された場合、それはOKです。

  5. 暗号文の長さの問題を無視します。

これは安全ですか?

4

2 に答える 2

3

AESのようなブロック暗号を使用してハッシュまたはMACを生成する既存の方法があります。それはCBC-MACと呼ばれています。操作はとても簡単です。CBCモードでAESを使用してハッシュするデータを暗号化し、暗号文の最後のブロックを出力して、暗号文の前のブロックをすべて破棄します。CBCのIVは通常ゼロのままであり、AESキーを使用してMACを生成できます。

CBC-MACにはいくつかの制限があります。同じキーとIVを使用してデータを暗号化してMACしないでください。そうしないと、MACは暗号文の最後のブロックと単純に等しくなります。また、ハッシュ/ MACのサイズは、ブロック暗号のサイズに制限されています。CBC-MACでAESを使用すると、128ビットのMACが生成され、通常、MACは少なくともこのサイズであると予想されます。

注目に値するのは、CBC-MACはMACを生成するための非常に非効率的な方法であるということです。より良い方法は、HMACでSHA2-256またはSHA2-512を使用することです。私の最近のテストでは、HMACでSHA256を使用すると、CBC-MACのAESとほぼ同じ速度の結果が得られ、この場合のHMACの幅は2倍になります。ただし、新しいCPUはAESのハードウェアアクセラレーションを使用して生成されるため、CBC-MACモードのAESを使用して128ビットMACを非常に迅速に生成できます。

于 2010-12-16T01:47:11.237 に答える
2

説明したように、ハッシュされるデータの長さに関する情報が明らかになるという問題があります。それ自体が何らかの弱点になります。

第二に...ハッシュをチェックできるかどうかは明らかではありません。ランダムに生成されたIVをハッシュとともに保存する必要があります。

自転車で家に帰るときにこれについて考えていたところ、もう1つの考えられる問題が思い浮かびました。パスワードを保存するための一般的なハッシュスキームでは、ハッシュを一連の反復(PBKDF2など)で実行するのが最適です。これにより、ブルートフォース攻撃を実行するのにはるかに費用がかかります。そのアイデアをスキームに導入する1つの可能性は、暗号化されたデータを繰り返しループすることです(たとえば、暗号化されたブロックをそれ自体にフィードバックする)。

于 2010-12-16T00:56:04.840 に答える