Security of cryptographic hash functions

提供: tezos-wiki
移動先: 案内検索

暗号では、暗号ハッシュ関数は2つの主要なカテゴリに分けることができます。第1のカテゴリーでは、その設計が数学的問題に基づいているため、それらの安全性は厳密な数学的証明複雑性理論および形式的縮小に従っている。これらの機能は、安全に安全な暗号ハッシュ関数と呼ばれます。しかし、これはそのような機能が壊れないことを意味するものではありません。それらを構築することは非常に困難であり、わずかな例しか導入されていない。実用には限界があります。

第2のカテゴリーでは、数学的問題に基づいていないが、メッセージのビットが混合されてハッシュを生成する臨機応変な関数である。彼らは壊れにくいと信じられていますが、そのような正式な証明はありません。ほとんどすべての広く普及しているハッシュ関数がこのカテゴリに入ります。これらの機能のいくつかは既に破損しており、もはや使用されていません。

ハッシュ関数のセキュリティの種類[編集]

一般に、暗号ハッシュ関数の "基本的な"セキュリティは、プレイメージ抵抗、第2のプレイメージ抵抗、および衝突抵抗という3つの異なる角度から見ることができます。

  • 'プリ画像耐性' :ハッシュが与えられたときh <math> h </ math> &lt; math&gt; m&lt; / math&gt;というメッセージを見つけるのは難しいはずです。 <math> h = hash(m)</ math>となるようにする。この概念は一方向性関数の概念に関連しています。このプロパティを持たない関数は、画像攻撃前に対して脆弱です。

入力画像m 1、m 2、m 3、...、m 1、m 2、m 3、...、m 1、m 2、m 3、...、 math> hash(m_1)= hash(m_2)</ math>となるように(ただし、<math> m_1と等しくない)この特性は、時として弱い衝突抵抗と呼ばれる。このプロパティを持たない関数は、第2のプレイメージ攻撃に対して脆弱です。

  • '衝突抵抗' :2つの異なるメッセージ&lt; math&gt; m_1&lt; / math&gt;を見つけることは難しいはずです。 &lt; math&gt; m_2&lt; / math&gt; <math> hash(m_1)= hash(m_2)</ math>のようになる。このようなペアは、(暗号化された)ハッシュ衝突と呼ばれます。この特性は、しばしば強い衝突抵抗と呼ばれる。これは、画像前抵抗に必要な値の少なくとも2倍のハッシュ値が必要です。そうしないと、衝突はバースデー攻撃によって検出される可能性があります。

「ハード」の意味[編集]

基本的な質問は、 " 'の意味です。この質問に答えるには2つの方法があります。まず、直感的で実用的なアプローチです。「ハードなことは、システムのセキュリティが重要とみなされる限り、システムを破壊しないようにしなければならない敵の手の届かないものです。

第2のアプローチは理論的であり、計算複雑性理論に基づいています。問題Aが困難な場合、多項式時間において、整数分解問題や[離散(離散)]問題など、広く解決できないと考えられている問題から正式な[対数]]問題。

しかしながら、多項式時間アルゴリズムが存在しない場合、システムが安全であることが自動的に保証されるわけではない。問題の難しさはそのサイズにもよる。例えば、RSA公開鍵暗号は、[[整数分解]の難しさに依存します。ただし、1024ビット以上の鍵でのみ安全と見なされます。

暗号ハッシュ関数[編集]

ほとんどのハッシュ関数は、メッセージのビットがうまく混合されてハッシュを生成する、アドホックベースで構築されています。反復モードでは、さまざまな[ビット単位の演算](回転など)、モジュラ加算圧縮関数を使用して、複雑さと擬似ランダム性を確保します。出力。このようにして、セキュリティを証明することは非常に難しく、証明は通常行われません。ほんの数年前、最も人気のあるハッシュ関数の1つ[SHA-1]は、その長さが示唆されたものよりも安全性が低いことが示された。衝突は2つの51だけで見つかる可能性がある。 2つの80μlのブルートフォース数ではなく、2つのテストを使用した。

言い換えれば、今日使用されているハッシュ関数のほとんどは、衝突耐性を証明することはできません。これらのハッシュは、純粋に数学的関数に基づいていません。このアプローチは、一般に、より効果的なハッシング関数をもたらすが、そのような関数の弱点が最終的​​に衝突を見つけるために使用されるリスクを伴う。有名なケースはMD5です。

このような場合の「衝突を見つけにくい」という意味は、「システムのセキュリティが重要とみなされている限り、システムを破壊しないようにしなければならない敵の手の届かないもの」を意味します。したがって、用語の意味はアプリケーションに多少依存します。なぜなら、悪意のあるエージェントがその作業に取り入れる努力は通常、彼の予想される利益に比例するからです。

安全なハッシュ関数[編集]

このアプローチでは、ハッシュ関数のセキュリティをいくつかの難しい数学的問題に基づいており、ハッシュ関数の衝突を見つけることは根本的な問題を破るほど難しいことを証明しています。これは古典的アプローチのようにビットの複雑な混合に頼るよりもはるかに強力なセキュリティを提供します。

暗号解読関数は多項式時間で解けないと思われる問題Pから衝突を見つけることが多項式時間短縮可能であると '衝突攻撃に対して証明可能な安全性'を持っています。この関数は、安全性が証明されているか、証明できると呼ばれています。

アルゴリズムAを用いて多項式時間で衝突を発見することが可能であれば、多項式時間では解くことができない問題Pを解くアルゴリズムAを用いた多項式時間アルゴリズムR(reduction algorithm)を見つけ出すことができる。それは矛盾です。これは、衝突を見つけることはPを解くことよりも容易ではないことを意味する。

セキュリティの証明付きハッシュ関数は、数学関数に基づいています。

難しい問題[編集]

多項式時間で解くことができないと思われる問題の例

実証可能なアプローチの欠点[編集]

  • 証明可能なセキュリティ削減を持つ現在の衝突耐性ハッシュアルゴリズムは、実際に使用するにはあまりにも非効率的です。古典的なハッシュ関数と比較して、それらは比較的遅くなりがちであり、伝統的に暗号ハッシュで期待されるすべての基準を必ずしも満たしているわけではありません。 非常にスムーズなハッシュは一例です。

証明可能なセキュリティでハッシュ関数を構築することは、ハッシュアルゴリズムのビットの複雑な混合が敵の衝突を防ぐほど強力であることを希望する古典的なアプローチを用いるよりはるかに難しいです。

  • 証明はしばしば漸近的に難しい[最悪の場合の複雑さ|最悪の場合]または平均の複雑さの問題の減少です。ワーストケースは、根底にある問題の典型的なケースではなく、病理学的ケースを解決することの難しさを測定します。ハード平均的な複雑さを伴う問題への低減さえも、問題空間のサブセットの問題を容易に解決するアルゴリズムが存在することができるため、限られたセキュリティしか提供しない。たとえば、[[Fast Syndrome Based Hash]の初期のバージョンは安全でないことが判明しました。この問題は、最新バージョンで解決されました。

SWIFFTは、これらのセキュリティ上の問題を回避するハッシュ関数の例です。予想される時間T内に確率PでSWIFFTを破ることができるアルゴリズムについては、時間T '内のある困難な数学的問題の「最悪の場合」のシナリオを、Tに依存して解くアルゴリズムを見つけることができるとP.

実用的で安全なハッシュ関数の例[編集]

ハッシュ( m )= x &lt; sup&gt; m &lt; / sup&gt; mod n n は合成数を計算するのが難しく、 x はあらかじめ指定された基本値です。衝突 &lt; 「x」と一致する "m2" </ sup> 「x」の次数の倍数「m1-m2」を明らかにする。そのような情報は、 x の特定の特性を仮定して、多項式時間で n を因数分解するために使用できます。

しかし、このアルゴリズムは、メッセージビットごとに平均「1.5」の乗算を必要とするため、非常に非効率的である。

実用的な証明可能な安全なハッシュ関数[編集]

  • VSH - 非常にスムーズなハッシュ関数 - モジュラ合成数を法とする非自明のモジュラ平方根を求める硬度を仮定した、確かに安全な衝突耐性ハッシュ関数。 (これは、ファクタリング <数学> n <数学>と同じくらい難しいと証明されている)。
  • MuHASH
  • ECOH - 楕円曲線のみハッシュ関数 - 楕円曲線の概念、部分集合和問題、多項式の総和に基づいています。衝突抵抗の安全性の証明は、弱い仮定に基づいており、最終的には第2の事前画像攻撃が見つかった。

[FSB - 高速シンドロームベースのハッシュ関数]] - FSBを壊すことは、少なくとも正規のシンドローム復号と呼ばれる特定のNP完全問題を解決することと同じくらい難しいことが証明できます。

  • SWIFFT - SWIFFTは、高速フーリエ変換に基づいており、周期的に短いベクトルを見つける最悪の場合の難しさに関する比較的軽い仮定の下で、衝突耐性があります。[理想格子暗号|理想格子]。

Pfitzmannハッシュ関数] - 有限群F_ {2p + 1}内の衝突を発見する圧縮関数は、離散対数問題を解くほど困難です。 &lt; / math&gt;

  • ナップザックベースのハッシュ関数 - ナップザック問題に基づくハッシュ関数のファミリ。
  • Zémor-Tillichハッシュ関数 - 行列群 SL2の算術に依存するハッシュ関数群。衝突を見つけることは、少なくともこのグループの特定の要素の分解を見つけることと同じくらい難しいです。これは少なくとも、PSPACE-completeは難しいと思われます。このハッシュに対して、最終的には、時間複雑度が2 ^ {n / 2}に近い攻撃が発見された。これは、誕生日に拘束され、理想的なプレ画像の複雑さを遥かに凌駕する。これは、数学的には、2 ^ {3n / 2} 2 ^ {3n} ^ math&gt;&gt; Zémor-Tillichハッシュ関数の場合攻撃は、サイズの縮小されたセットでの誕生日検索を含むので、数式2nは、彼らは確かにスキームを無効にすることの証明可能なセキュリティのアイデアを破壊するのではなく、最初のパラメータが小さすぎることを示唆しています。
  • シグマプロトコルのハッシュ関数 - 確かに安全なハッシュを構築するための一般的な方法が存在し、特に(適切な)[シグマプロトコルのシグマプロトコル|シグマプロトコルの証明]からです。このようにして[[非常にスムーズなハッシュ| VSH](VSH *と呼ばれる)のより高速なバージョンを得ることができます。

ソース[編集]

http://wikipedia.org/