web-dev-qa-db-ja.com

メールアドレスのSHA1は常に一意ですか?

私たちは、メールアドレスを保存せずに個人に関するデータを保存したいのですが、メールアドレスを提供することで、後でその人とデータを関連付けたいと考えています。

(小文字の)メールアドレスのSHA1を保存するとそれが実現しますが、2つの異なるメールアドレスが同じSHA1になる可能性はありますか?もしそうなら、確率は何ですか?

セル

7
user19695
  • これが偶然に起こる可能性はごくわずかです。だいたいn2/ 2159nのメールアドレスがある場合。たとえば、メールが10億ある場合、可能性は2です。-99 または10-30

    したがって、それが偶然に起こらないと仮定することは、かなり安全な賭けです。

  • 誰かが同じハッシュを持つ2つの電子メールアドレスを作成することはできますが、その人のメールとは異なる別の人のハッシュと一致するメールを作成することはできません。

    あるいは、暗号学者が言うように、SHA-1に対する衝突攻撃は実行可能ですが、事前イメージは実行できません。

    しかし、衝突攻撃はアプリケーションにとっては重要ではないようです。攻撃者がハッシュが一致する2つの電子メールを所有することをどのように利用するのかわかりません。

  • メールを推測してハッシュに対して確認することは可能です。ここでの主な問題は、SHA-1が高速であることです。

    私は MD5 gravatarハッシュstackoverflow publishs に対してこのような攻撃を実行し、約28%回復しました。もっと努力すれば、おそらくもう少し回復できるでしょう。


アプリケーションごとのソルトでPBKDF-2-HMAC-SHA-2などの高価なハッシュ構造を使用することをお勧めします。

7
CodesInChaos

nアドレスを取る場合、衝突(2つの異なるアドレスが同じ値にハッシュする)の確率はnに近い2* 2-159nの実際的な値の場合)。実際には、衝突のリスクを完全に無視することができます(狂犬病のクマによってむしゃむしゃ食べられるリスクはそれよりはるかに高いです)。

ただし、次の点に注意してください。

  • SHA-1には暗号化の弱点がいくつかあり、悪意のある個人が同じ値にハッシュする2つの異なる電子メールアドレスを故意に作成することが多少容易になります。説明されている方法は2の理論上のコストよりも速いため、これはまだ理論上の弱点です。80、それでもかなりの数の2を伴います61ハッシュ関数の評価。また、計算された衝突を電子メールアドレスの形式に組み込むことは難しい場合があります。とにかく、SHA-1の代わりにSHA-256を使用する場合は少し慎重になる可能性があります(監査すると、見栄えが良くなります)。

  • メールアドレスでは大文字と小文字が区別されません。特に、ドメイン名(「@」の後)は法令により大文字と小文字が区別されないため、example.comExample.COMおよびexAmPLE.cOMはすべて同等です。 '='記号の前の前に表示されるものは、サイトによって異なります。ハッシュの前に正規化を行うことをお勧めします。既存のすべての電子メールアドレスで機能する適切なソリューションがない場合もあります。

編集:これはあなたの正確な質問に答えますが、問題をもう少し見ようとする@CodeInChaosの回答を確認することをお勧めします:電子メールアドレスを指定して、格納されたハッシュと一致することを確認できる場合、ハッシュ値に対して潜在的な電子メールアドレスを「試す」ことが可能になり、機能する傾向があります。これは dictionary attack のバリアントであり、セキュリティモデルに大きな問題がある場合とない場合があります。

4
Thomas Pornin

この用語は(SHA1)collisionであり、インターネットには多数のリソースがあります。

電子メールアドレスの数と 誕生日の問題 は衝突の可能性を高めますが、この実用的な使用では、衝突が発生する可能性はほとんどありません。

ドットの付いた電子メールアドレスなど、さまざまな問題が予想されます。 Gmailはメールアドレスのドットを無視するため、[email protected][email protected]と同じですが、ハッシュは異なります。

1
Cristian Dobre