カテゴリー
blockchain

ブロックチェーン(10)

ハッシュ関数をつかって、もともとの文(数字でも記号でもなんでもよい)を一定の長さの暗号文に変える。このハッシュ関数にはいくつかの特徴がある。

改竄(かいざん)検出。もともとの文が少しでも意図的に、もしくは無意図的に、変えられてしまうと、ハッシュ関数をつかって計算されるハッシュ値は、もともとの平文をハッシュ関数を使って計算したものとはまったく違ったものになる。たとえば、kazuo.nakamuraという元の文を、最後に小さなピリオドをつけて、kazuo.nakamura. とすると、ハッシュ関数を使って計算したハッシュ値は、もとのkazuo.nakamuraで計算したハッシュ値とはまったくことなるものになる。これによって、受信者は、kazuo.nakamuraが、それ以外のものに改竄されたと分かる。

kazuo.nakamura のハッシュ値を生成する(現在最もよく使用されているSHA-256という方式で)と、073B5A15BC50B5E2CC575E5D2EEE5926BDFF1FD8784E2499FAEE53F423E6912A

kazuo.nakamura. のハッシュ値を生成すると、476D08D58ABCB1F6C25320218D3451BFA084827C0D0E7843BAC92E8521EA5CD9

一般的に、改竄は相手が解らない程度に微妙であることが多いので、例えば、kazuo.nakamuraとkazuo.nakamura.では最後の小さなピリオドが付け加えられただけなのだが、それを簡単には比較しても区別できない、つまり改竄されたかどうかわからないことがある。それがハッシュ値を使えば、元の文のとても小さな違いも、ハッシュ値では大きく異なる数字・記号に置き換わるので分かりやすい。

次に、一方向性。狭い道路の一方通行を車で走らせると、もともとどこにいたのか分からないイメージである。つまり、元の文をハッシュ関数を使って、ハッシュ値に変換するわけだが、そのハッシュ値から元の文を推測する、もしくは逆変換することはできないということである。

最後に、衝突困難性。すべての異なるもともとの文は、ハッシュ関数によって、唯一無二のハッシュ値に変換されることが要求される。異なるもともとの文が、仮に、ハッシュ関数によって、まったく同じハッシュ値に変換されてしまうと、仮に、そのハッシュ値をもとの文に逆変換できたとしても、どれがもともとの文であるかがわからない。つまり、もともとの文と、ハッシュ値の間の関係は、一対一であるべきであるということである。

コメントを残す