web-dev-qa-db-ja.com

可逆ハッシュ関数?

可逆ハッシュ関数はありますか?

SHAおよびMD5のようなハッシュ関数は可逆ではありません。可逆ハッシュ関数が存在するかどうか知りたいのですが?

17
Geek

暗号化ハッシュ関数definitionには、プリイメージに対する耐性が含まれています:givenh(x)xを回復することは不可能であるべきです。 「可逆」であるハッシュ関数は、そのプロパティの正反対です。したがって、水に対してアレルギーのある魚を持つことができるのと同じくらい「可逆ハッシュ関数」を持つことはできません。


おそらく、ほとんどの人にとって、すべてのプロパティを備えた暗号化ハッシュ関数であるハッシュ関数が必要になる場合がありますが、これには、リバースを可能にする何らかのトラップドアも含まれますif特定の秘密。この種のものは存在する可能性がありますが、非対称暗号のような数学を必要とします。私は現在そのような構造に気づいていませんが、RSAモジュラスに基づいて何かを陪審するか、RSAモジュラスを法として取られた座標を持つ楕円曲線かもしれません(私は正確な設計を考えていませんが、私は直感がその方法で実行できることを示しています)。

26
Tom Leek

通常、非暗号化ハッシュでさえ元に戻すことはできません(これは、衝突/プリイメージ耐性など、暗号化ハッシュの他の特別な特性に関係なく)。通常、それができないのは、単に十分な情報がないためです。

ハッシュ関数は(一般的に)入力のNビットを出力のMビットに変換します。ここで、Mは小さな定数であり、ほとんどの場合N > Mはtrueです。もちろんN必要はありませんMよりも大きいので、完全に生成できます。 a SHA 1バイトからのハッシュですが、通常ハッシュされたメッセージはハッシュ値よりも長い(多くの場合muchより長い)です。

つまり、ハッシュを元に戻して元のメッセージを復元するためには、それ以上でもそれ以下でもないdivination magicを使用して、不足している情報を入力する必要があります。 2つありますN-M ソリューション、そしてそれらのすべてが他のすべてと同じくらい正しいです。

したがって、たとえば、SHAで36バイトの文字列をハッシュして、これを逆にしようとすると、2つあります。128 ソリューションは、すべて同じように正しいです。
入力に特定の既知のプロパティがあることがわかっている場合(From:などの既知のシーケンスで始まる、または特に低いエントロピーなど)、ほとんどのルールを除外できる場合があります。ソリューションと最終的にはもっともらしい平文、おそらく正しいものを見つける-しかしこれは些細なことではなく、あなたが以前にそれを知っていなかったり、別の検証方法がない限り、正しいものであることを証明することはできません。

12
Damon

CRCのような一部のハッシュアルゴリズム(前述したとおり)は可逆的です。これを行うためのアプローチについては この論文 を参照してください。 (CRCは高速に計算でき、セキュリティ要件がない場合にデータを破損から保護するのに理想的です)。

暗号的に安全なハッシュの設計は、そのようなショートカットがないこと、およびハッシュ一致を見つけるためにキースペースの完全な検索が必要であることを保証することを目的としています。

4
Rich

おそらく、PKIのようなものを探していると思います。文字列は、一端を公開鍵で暗号化し、もう一端を秘密鍵で暗号化解除できます。明らかにハッシュではありませんが、文字列を暗号化/復号化して秘密を渡す方法です。

1
Scott Duffy

Knuthの乗法ハッシュを見てください。これは、ハッシュテーブルの境界内の整数間に可逆的でランダムなエスケープマッピングを生成します。

たとえば、 Optimus は、シーケンシャルIDを難読化するためにPHPでKnuthのアルゴリズムを実装します。ただし、はセキュリティの目的でこのアルゴリズムを使用しないでください

詳細は、彼の著書 Art of Computer Programming、Vol。 の513ページを参照してください。

1
jchook

ELI5:ハッシュとは何ですか?

食器棚に物を置くのに苦労していると想像して、バーコードに応じてすべての物を入れる引き出しを定義するシステムを作成します。引き出しが7つあるので、携帯電話のバーコードをスキャンすると、1〜7のどこに置いたかがわかります。

ドロワーを開かずに、すべてを保管した後、30アイテムの食料品リストを取得し、ドロワー3の内容を把握するとします。あなたがすること?リストのすべての項目を実行し、プログラムを配置して、引き出し3にあることが通知されたすべての項目を書き留めます。簡単です。

今、あなたのリストが何かの間にあると想像してください、例えば、1030 10まで9000 アイテム、そしてあなたの食器棚には2160 アイテム。引き出しを開かずに、各引き出しの内容をどのようにして知ることができますか?あなたはブルートフォース攻撃を行います:ドロワー3に適合するコードが得られるまで、すべてのコードを何度も何度もテストします。これは、ハッシュを元に戻すことができない場合でも、人々が言うようにハッシュを元に戻すです。同じ結果が得られるまで、再度実行することしかできません。

ハッシュ関数は、定義により、元に戻すことはできません。可能であれば、それはハッシュではありません。エンコードまたは暗号化です。

0
ThoriumBR