サイバートラスト ジャーナル

SHA-2

2016.01.19
  • このエントリーをはてなブックマークに追加

 今や市民権を得たこの単語について改めて確認したい。

 まず発音だが、「シャーツー」と呼ばれることが多いようだ。「シャー」の「2」なのでもちろん「1」も存在するが、それは「シャーワン」と呼ばれる。「シャー」のアクセントに注意されたし。今風の「彼氏」のアクセントを使うこと。決して昭和のそれを使ってはいけない。ゲームのコマか赤にこだわる仮面の男と間違われると困るからだ。

 次に、これは一体全体何か、ということだ。「sha」は英語で書かれた技術文書では「secure hash algorithm」が省略されたものとなっている。「安全な」「hash」の「アルゴリズム」ということだ。「hash」は辞書を引くと「細切れにする」「ぐちゃぐちゃにする」ということなので、つまり「安全にぐちゃぐちゃにするアルゴリズム」の「2」ということになる。「1」より「2」の方が新しいのは映画の世界も同じだが、こちらの世界では、新しいことはすなわちより良いものであることの可能性があちらより高い。よって「より良く安全にぐちゃぐちゃにするアルゴリズム」ということになる。では「ぐちゃぐちゃにする」ことに意味があるのか。

 計算機は大きな桁の計算は得意であり、疲れることなく何度でも反復できる。そして答えもきっちり出せるのだが、出鱈目なことが苦手である。中学校の数学で「確率」を習ったことを覚えているだろうか。そこでは必ず袋から「無作為に」玉を取り出すことになるが、この「無作為」が計算機にとってハードルが高い。ある限られた範囲で「無作為」に選ばれた数字は「乱数」と呼ばれるが、真の乱数は計算機では実現できないのではないか。玉の入った袋をしゃかしゃか振って中身を「ぐちゃぐちゃ」にして取り出すだけだが、その「アルゴリズム」は誰かが「作為的」に作り出さなければ計算機はちゃんと動かないのだから。

 さて、話をもどすと、要は「ぐちゃぐちゃ」な数値を取り出すアルゴリズムということになるのだが、正確には「ぐちゃぐちゃに見える」数値を取り出すアルゴリズムのことだ。本当に「ぐちゃぐちゃ」な数値を取り出す必要がある時もあるだろう。でもここでは「ぐちゃぐちゃに見える」数値である必要がある。計算なので、元の数値をどうにかすると結果の数値が出てくる。その計算の結果は次のような特徴がある。

1.同じアルゴリズムを使えば元の数値がどんな値でも結果は必ず決まった桁数の数値になる。
2.結果の数値から元の数値を推測するのが難しい。

「1」の特徴から、どんな大きな数値でも結果は同じ桁数になるので、その後の扱いは楽になる。例えば特典付き DVD の映画のデータであってもツィート可能な文字数ぐらいのデータになったりする。また、「2」の特徴から、例えば元の数値に1を足しただけでも結果の数値はとんでもなく変わってしまうことになる。でも、「計算」だから、元の数値が同じであれば必ず結果も同じになることが数学的に立証されている。これらの特徴をうまく使って現在さまざまなところで使われている「暗号」が成り立っているのだ。

 でも、本当に上記の特徴を持つ結果になるのかな。文系の私でも疑問に思うのだから、数学博士達も何度も検算しているに違いない。その当時の理論では抜けが無いと思われていたものでも、何度も検算しているうちに何かほつれのようなものが見つかるかもしれない。「安全にぐちゃぐちゃにするアルゴリズム」はかなり昔からあって、実はほつれ(かもしくはその可能性)が見つかるたびに何度も代替わりしている。昔は「ぐちゃぐちゃにする」とは言わず「要約する(digest)」と言っていたようだけど。

 そして今回の代替わりは SHA-1 から SHA-2 へということになる。SHA-1 にしても、まだ「ほつれ」のレベルで危ないわけではないけど、そうなってからでは遅いのでより良く安全にぐちゃぐちゃにするアルゴリズムを使いましょう、とみんな言ってるわけか。なるほど。

 SHA-2 も実は正式な名称ではなくて、別に名前があるのだけど、それはまた別の機会で。

  • 前の記事へ
  • HOME
  • 次の記事へ