AES/Rijndaelまたは任意の対称暗号化を使用します。
それ自体をキーとして使用し、ランダムなIVを使用して、非表示の値を暗号化します。
暗号文+IVを保存します。他のすべてを破棄します。
ハッシュを確認するには:提供されたプレーンテキストを使用して復号化してみてください。提供された==復号化された場合、それはOKです。
暗号文の長さの問題を無視します。
これは安全ですか?
AES/Rijndaelまたは任意の対称暗号化を使用します。
それ自体をキーとして使用し、ランダムなIVを使用して、非表示の値を暗号化します。
暗号文+IVを保存します。他のすべてを破棄します。
ハッシュを確認するには:提供されたプレーンテキストを使用して復号化してみてください。提供された==復号化された場合、それはOKです。
暗号文の長さの問題を無視します。
これは安全ですか?
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を非常に迅速に生成できます。
説明したように、ハッシュされるデータの長さに関する情報が明らかになるという問題があります。それ自体が何らかの弱点になります。
第二に...ハッシュをチェックできるかどうかは明らかではありません。ランダムに生成されたIVをハッシュとともに保存する必要があります。
自転車で家に帰るときにこれについて考えていたところ、もう1つの考えられる問題が思い浮かびました。パスワードを保存するための一般的なハッシュスキームでは、ハッシュを一連の反復(PBKDF2など)で実行するのが最適です。これにより、ブルートフォース攻撃を実行するのにはるかに費用がかかります。そのアイデアをスキームに導入する1つの可能性は、暗号化されたデータを繰り返しループすることです(たとえば、暗号化されたブロックをそれ自体にフィードバックする)。