|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ 暗号 : [あんごう] 【名詞】 1. code 2. password 3. cipher ・ 号 : [ごう] 1. (n,n-suf) (1) number 2. issue 3. (2) sobriquet 4. pen-name ・ 関 : [せき, ぜき] (suf) honorific added to names of makuuchi and juryo division sumo wrestlers ・ 関数 : [かんすう] (n) function (e.g., math, programming, programing) ・ 数 : [すう, かず] 1. (n,n-suf) number 2. figure
暗号学的ハッシュ関数(あんごうがくてきハッシュかんすう、)は、暗号など情報セキュリティの用途に適するような暗号数理的性質を持つハッシュ関数である。符号化されたデータは「メッセージ (message)」と呼ばれることが多いので、メッセージのハッシュ値をメッセージダイジェスト (message digest) と呼ぶことがあり、単にダイジェスト (digest) と呼ぶこともある。 暗号学的ハッシュ関数は、一般的なハッシュ関数に望まれる性質や、決定的であることの他、次のような暗号学的な特性を持たなければならない。 * 同一のハッシュ値であるのに、そっくりだが実は異なるというようなメッセージの作成が不可能であること。 * ハッシュ値から、そのようなハッシュ値となるメッセージを得ることが(事実上)不可能であること(原像計算困難性)。 * 同じハッシュ値となる、異なる2つのメッセージのペアを求めることが(事実上)不可能であること(強衝突耐性)。 一般に通常のハッシュ関数と比べ、長い(最低でも100ビット程度)ハッシュ値が必要であり必要な計算も多いが、メッセージのチェックなどの目的に使われることから高速に計算できたほうが望ましい。一方でログインパスワードなどのハッシュの目的などでは、ハッシュ値を求める計算が重いことが必要な場合もあり、ハッシュ値のハッシュ値を何度も求める「ストレッチング」等の技法か、SHA-2などの通常の暗号学的ハッシュ関数ではなく、そういった目的に適するよう設計された暗号学的ハッシュ関数を用いる。 ここで「(事実上)」とあるのは、探索すべき空間が有限である以上は数学的には有限の時間で探索できるため、実際には、その計算に必要な時間が現実的に十分に長いかどうか、という意味であるからである。暗号学的ハッシュ関数は情報セキュリティ分野で様々に利用されている。たとえば、デジタル署名、メッセージ認証符号 (MAC)、その他の認証技術などである。目的により特性はそれぞれ異なる。 通常のハッシュ関数として、ハッシュテーブルのインデックス、フィンガープリント、重複データの検出、ファイルの一意な識別、データの誤りを検出するチェックサムなどにも利用できるが、通常のハッシュ関数と比べて計算が重い点については必ずしも適していないこともある。 == 特性 == もっぱら、任意長のオクテット列を入力とし、固定長のハッシュ値を出力とする。 暗号学的ハッシュ関数には、少なくとも次のような特性が必須である。 * 原像攻撃の難しさ ; 原像計算困難性 : ハッシュ値 ''h'' が与えられたとき、そこから ''h'' = hash(''m'') となるような任意のメッセージ ''m'' を探すことが困難でなければならない。これは一方向性関数の原像計算困難性に関連している。この特性がない関数は(第1)原像攻撃に対して脆弱である。 ; 第2原像計算困難性 : 入力 ''m''1 が与えられたとき、hash(''m''1) = hash(''m''2) となる(すなわち、衝突する)ようなもう1つの入力 ''m''2(''m''1とは異なる入力)を見つけることが困難でなければならない。これを「弱衝突耐性」ともいう。この特性がない関数は第2原像攻撃に対して脆弱である。 * 誕生日攻撃の難しさ ; 強衝突耐性 : hash(''m''1) = hash(''m''2) となるような2つの異なるメッセージ ''m''1 と ''m''2 を探すことが困難でなければならない。一般に誕生日のパラドックスのために、原像計算困難性に対して必要なハッシュ値の長さの、2倍の長さのハッシュ値が必要である。 これらの特性は、悪意ある攻撃者でもダイジェストを変化させずに入力データを改竄できないことを示すものである。したがって、2つの文字列のダイジェストが同じ場合、それらが同一のメッセージである可能性は非常に高い。 これらの基準に適合した関数でも、好ましくない特性を持つものがありうる。現在よく使われている暗号学的ハッシュ関数は ''length-extension'' 攻撃に対して脆弱である。すなわち、ハッシュ値 ''h(m)'' とメッセージ長 ''len(m)'' が分かっていて ''m'' そのものは不明の場合、適当な ''m'' を選んで ''h (m || m')'' を計算できる。ここで、''||'' はメッセージの連結を意味する。この特性を利用して、ハッシュ関数に基づく単純な認証方式を破ることが可能である。HMACはこの問題への対策として考案された。 理想的には、さらに強い条件を課すこともできる。例えば、悪意ある者が非常に良く似たダイジェストを生成する2つのメッセージを見つけることができないのが望ましい。また、ダイジェストのみから元のデータについて何らかの有用な情報を推測できないのが望ましい。したがって暗号学的ハッシュ関数は可能な限りランダム関数のように振舞うが、決定性と計算効率は維持しなければならない。 単純なチェックサムはもとより、巡回冗長検査などの誤り検出符号も、以上で説明したような攻撃への耐性は無く、暗号的な目的には不適である。。例えば、CRCがWEPでのメッセージ完全性保証に使われていたため、チェックサムの線形性を利用して簡単に攻撃が可能となった。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「暗号学的ハッシュ関数」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Cryptographic hash function 」があります。 スポンサード リンク
|