• ITに強い編集プロダクション・リブロワークスのWebサイト

    上司の愚痴、言いたいですよね?

    と、思わず小林製薬のCMのような見出しでスタートしてしまったが、もしこの問いに対する答えが「いいえ」であったとしても、この記事を読むのをやめないでほしい。この記事では、「上司の愚痴を、本人にバレないように言う」という行為を通して、デジタル社会における必須の知識といっても過言ではない「暗号化技術」について学んでいくからだ。
    この記事(前後編)を読むことによってあなたは、「なぜECサイトやSNSのログインパスワードを短いものにしてはいけないのか」「コンピュータはメールやデジタル文書が改ざんされていないことをどうやって判定しているのか」という疑問の答えを知ったうえで、上司の愚痴を安全に言えるようになる。

    意外と身近な暗号化技術

    「暗号化技術」と聞くと、企業の情報セキュリティ担当者か名探偵くらいしか知る必要がない分野と思われるかもしれないが、実はあなたがECサイトやSNSにログインする時や、容量の大きいファイルを圧縮する時、その裏では暗号化技術が使われている。

    暗号化技術とは、ひとことで表現すれば「メッセージの見た目を変えて、正当な受信者以外の第三者には読めないようにすること」だが、コンピュータの分野ではその技術がいろいろな場面で使われている。

    それではなぜ、上司の愚痴を本人にバレないように言う方法を通して暗号化技術を学べるのか。

    「メッセージの見た目を変えて、正当な受信者以外の第三者には読めないようにすること」の「正当な受信者」を「同僚や友人」、「第三者」を「上司」と考えると、愚痴を言う際に必要なのは、まさしく暗号化技術に他ならないからだ。

    初回である今回は、ハッシュ関数という暗号化技術を取り上げたい。
    それでは、暗号化技術を使って、上司の愚痴を言おう!

    暗号として強いあだ名をつけよう

    愚痴を言う時、上司に対してあだ名をつけることがよくあるだろう。上司の名前の言いかたを変えて、そのあだ名を知っている人にしか誰のことを指しているかわからないようにする……つまり、あだ名をつけるとは、上司の名前を暗号化することに他ならない
    その際に最も大切な点は、「できるだけ本人に聞かれてもバレないあだ名をつける」ことだ。

    誰かのあだ名をつける時にありがちなのが、その人の名前や特徴を元にあだ名をつける方法だ。しかし、これは暗号化という観点から見た時に安全性が低い。名前や特徴に限らず、本人との結びつきを感じさせる言葉をあだ名として採用してしまうと、本人に伝わった時に「自分のことを言っているな」と勘づかれる可能性が高いからだ。
    正当な受信者以外が暗号化されたメッセージを読み解くことを「暗号解読」と呼ぶが、あだ名をつける際には、暗号化レベルが高く解読されにくいものを選ぶ必要がある。

    そこで今回は、「ハッシュ関数を使って上司のあだ名を生成する」というテクニックを紹介したい。

    ハッシュ関数とは、メッセージから短い文字列(ハッシュ値)を生成する機能を持つプログラムのことだ。
    ハッシュ関数の役割を説明するために、まずは以下の図を見てほしい。

    左側に書かれている「あ」、「メロスは激怒した。」などはもともとのメッセージ、右側はCRC32というハッシュ関数を使って得られたハッシュ値だ。

    図のように、ハッシュ関数はメッセージを与えられると短い文字列、ハッシュ値を生成する。

    ハッシュ値の特徴の1つは、もともとのメッセージの長さに関わらずハッシュ値の長さは一定であるということだ。図では1文字と9文字の例しか示していないが、数万文字のメッセージでも、ハッシュ値の長さは「あ」1文字のハッシュ値の長さと変わらない。

    そして、もともとのメッセージが1文字でも違えばハッシュ値は全く異なるものになる。「メロスは激した。」と「メロスは激した。」は1文字しか違わないが、そこから得られるハッシュ値は少しも共通していない。
    この特徴から、ハッシュ関数はメールやデジタル文書が改ざんされていないことを判定するのにも使われている。数万文字のメッセージのうち、1文字でも変更されていたり、句読点や改行の数が異なるだけで、そこから得られるハッシュ値は全く異なるものになる。
    電子署名という仕組みでは、この特性を利用して、メールや文書が改ざんされていないことを確認する。

    ハッシュ関数は、以下の3つの条件を満たしていることが必要とされている。

    原像計算困難性
    ハッシュ値からもともとのメッセージを推測することが難しい(「124781db」から「あ」を推測することが難しい)

    第二原像計算困難性
    あるメッセージと同じハッシュ値を生成する、他のメッセージを探すことが難しい(「あ」以外に「124781db」というハッシュ値を生成するメッセージを探すことが難しい)

    衝突困難性
    異なるメッセージから同じハッシュ値が生成されにくい

    ハッシュ関数はこれら3つの性質を持っているために、情報セキュリティの分野で信頼性のある暗号化技術とされている。

    たとえば、WebサイトやSNSを運営する企業では、ユーザのデータを保存する際、パスワードなどの情報はユーザが入力したものをそのまま保存するのではなく、パスワードのハッシュ値を保存していることが多い
    そうすることで、万が一データベース内のデータが外部に漏れてしまった場合でも、パスワードなどの情報を秘匿できる。
    ハッシュ関数には原像計算困難性があるため、漏れてしまったハッシュ値からもともとのメッセージ(ユーザが入力したパスワード)を復元することはできないというわけだ。

    ユーザがログインする際に正しいパスワードを入力したかどうかを確認するためには、もう一度ハッシュ関数による計算を行う。
    ログイン時に入力したパスワードのハッシュ値を計算し、データベースに保存されているハッシュ値と一致した場合、パスワードは正しいと判定され、ログインが成功する。

    ハッシュ関数には第二原像計算困難性、衝突困難性があるため、間違ったパスワードがたまたま正しいパスワードと同じハッシュ値を生成してログインに成功してしまうということも起こらない

    上司をヒップホップグループのメンバーにしよう!

    上司の愚痴を言う話に戻ろう。
    上司のあだ名をつける際、その人との結びつきを感じさせる言葉を使っていては本人に気づかれてしまう危険性が高い。
    しかし、上司の名前をメッセージとしてハッシュ値を生成すれば、ハッシュ関数の現像計算困難性により、本人に気づかれないあだ名を作ることが可能なのだ。

    しかし、ハッシュ関数で得られるハッシュ値は無意味な文字列であり、それをあだ名に使うのはかなり難しい。たとえば、SHA-1というハッシュ関数で筆者の名前「平山 貴之」のハッシュ値を求めると、結果は「af93902f2f8515437e43e870f4e0674fae981f5f」となる。
    これをあだ名に使うとなると、確かに本人にバレる心配はないが、愚痴を言うほうがあだ名を覚えておくのも大変だ。「いやぁ、昨日af93902f2f8515437e43e870f4e0674fae981f5f(えー・えふ・きゅう・さん・きゅう・ぜろ・……)がさぁ」から愚痴をはじめなければならず、その煩わしさは落語の「寿限無(じゅげむ)」どころではない。

    それでは、あだ名として使えそうなハッシュ値を生成するハッシュ関数などあるのだろうか。厳密なハッシュ関数ではないが、その代わりとして使えるWu-Tang Name GeneratorというWebサイトを紹介しよう。

    https://www.mess.be/inickgenwuname.php

    Wu-Tang Name Generatorは、ニューヨーク州スタテンアイランドで結成されたヒップホップグループ、Wu-Tang Clan(ウータン・クラン)のファンが非公式に作ったWebサイトだ。

    ウータン・クランには
    RZA(レザ)、
    GZA(ジザ)、
    Method Man(メソッド・マン)、
    Ol’ Dirty Bastard(オール・ダーティー・バスタード )、
    Ghostface Killah(ゴーストフェイス・キラ)
    などのメンバーがおり、Wu-Tang Name Generatorは、自分の名前を入力するとWu-Tang Name(ウータン・クランっぽいニックネーム)を付けてくれる。

    『スパイダーマン ホーム・カミング』や、スターウォーズのスピンオフ『ハン・ソロ』にも出演した俳優のドナルド・グローヴァーが、ラッパーとして活動する際のアーティストネームChildish Gambino(チャイルディッシュ・ガンビーノ)をこのサイトから名付けたことで広く知られるようになった。

    現在でも、Wu-Tang Name Generatorに「Donald Glover」と入力すると「Childish Gambino」と結果が表示される。

    ちなみに、「名前を入力するとウータン・クランっぽいニックネームを付けてくれる」という類似のサイトはいくつか存在するが、ドナルド・グローヴァーにチャイルディッシュ・ガンビーノという名前を授けたという点で、このWu-Tang Name Generatorが最も格式高いサイトであるとされている。
    ウータン・クランの公式サイトにもName Generator(https://wutangclan.net/name-generator/)というページがあるが、それよりもファンが非公式に作ったWu-Tang Name Generatorのほうが正当とみなされているというねじれた状況だ。

    筆者も、自分や友人、家族などの名前を入力して遊んでみたが、Wu-Tang NameはAmazing(驚くべき), Mighty(力強い), Vulgar(粗野な)などの「カッコいい形容詞」とDestroyer(破壊者), Knight(騎士), Conqueror(征服者)などの「カッコいい名詞」の2語の組み合わせで作られる。
    2語の組み合わせで名付けられる法則は、入力する名前の文字数が1文字でも数万文字でも、必ず当てはまる。

    また、入力する名前が少しでも異なれば、Wu-Tang Nameは全く異なったものになる。「Donald Glover」の綴りを間違って「Donald Grover」と入力すると、Wu-Tang NameはChildish Gambinoと少しも共通しないものになる。

    もうお気づきだろうか? Wu-Tang Name Generatorは、先ほど紹介したハッシュ関数の3つの条件をすべて満たしているのだ。

    原像計算困難性
    Wu-Tang Nameからもともとの名前を推測することが難しい

    第二原像計算困難性
    ある名前と同じWu-Tang Nameを生成する、他の名前を探すことが難しい(「Donald Glover」以外にWu-Tang Nameが「Childish Gambino」になる名前を探すことが難しい)

    衝突困難性
    違う名前から同じWu-Tang Nameが生成されにくい

    もちろん、企業の情報セキュリティで使える水準ではないが、あだ名として採用するには十分使えるだろう。

    上司によるサイバー攻撃に備えよう

    というわけで、「ハッシュ関数を使って上司のあだ名を生成する」ための準備は整った。
    このWu-Tang Name Generatorに上司の名前を入力して得られたWu-Tang Nameで、いざ上司の愚痴を……

    と言いたいところだが、実は単純に上司の名前にハッシュ関数を使うだけでは、暗号の安全性は高いとは言えない

    もしも上司がWu-Tang Name Generatorの存在を知っていた場合には(ヒップホップ好きの上司であれば可能性は高い)、上司は自分のWu-Tang Nameを知っていて、あなたが付けたあだ名と自分のWu-Tang Nameが一致していることがわかるかもしれない。

    ちょうど、ECサイトがログインページに入力されたパスワードから計算したハッシュ値と、データベースに保存されているハッシュ値を比較して「入力されたパスワードは正しい」と判定するように、上司は「このあだ名は自分のことだ」と判定するのだ。

    次回の記事では、上司がWu-Tang Name Generatorを知っていたとしても「自分のことを言っているな」と勘づかれないための、よりレベルの高いWu-Tang Nameの付けかたを紹介するので、上司のあだ名を決めるのは次回の記事を読むまで待ってほしい

    こうして、あだ名を付けようとするあなたと、それを読み解こうとする上司の暗号化バトルが始まる。
    そこで繰り広げられる戦いは、企業や国家のデータベースから重要な情報を盗み取ろうとするハッカーと、その情報を守ろうとする情報セキュリティ専門家との戦いそのものだろう

    上司の愚痴を言うことをとおしてあなたは、情報セキュリティの戦場でどんな防御が、そしてどんな攻撃が行われているかを知ることができる、かもしれない

    後編はこちら

    文責 Takayuki Hirayama(Wu-Tang Name: Dynamic Contender)