パスワードから求められる計算結果を保存する「ハッシュ化」
ハッシュ化では、パスワードを復元可能な状態で保存しない。パスワードから、
ハッシュ値と呼ばれる値を計算で求めて、その値を保存する。たとえば、sha256というアルゴリズムでは、「password」という文字列から「5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8」というハッシュ値が求められる。
ものすごく平易化した例で言えば、
「1234」というパスワードから「1+2+3+4 = 10」という値を求めるようなものだ。10から1234というパスワードは復元できない。しかし、ログイン時に1234というパスワードが入力された際、それが正しいかは計算結果の10と照合すれば確かめられる。
実際には、求められるハッシュ値は、とても長い値で、複数のパスワードで同じ計算結果になる頻度は低い。自分でも元のパスワードが分からないのだから、盗まれても大丈夫というわけだ。
平文や暗号化よりも安全な方式だと言える。
この場合は、パスワードを忘れた場合に、元のパスワードをメールで送ったりはできない。新しいパスワードを登録してもらう必要がある。最近、
メールでパスワードが送られてこないのは、こうした理由があるからだ。
パスワードを自分でも知らないのだから漏洩しようがない。そう考えたくなるハッシュ化だが、必ずしも安全というわけではない。
たとえば「1234」というパスワードが必ず「10」に変換されるならば、10という値が保存されているユーザーのパスワードは1234である可能性が高いということになる。世の中の多くの人は、単純なパスワードを利用している。「123456」「password」「qwerty」といった、
多くの人が利用しているパスワードをわざと登録して、同じ値の人を探せば、同じパスワードを利用していると推測できる。
極めて単純な例を紹介したが、このように攻撃側は、様々なアイデアでセキュリティを突破しようとする。そうした攻撃を避けるために、保存する値が同じにならないように、ユーザー毎に個別の値を付加する工夫や、データ流出後にオフラインで計算して破られないように、計算を複雑化する工夫などが存在している。ここまで来ると、技術者向けの専門的な話になるので割愛する。
データは漏洩する可能性がある。漏洩したデータは解読される危険がある。
個人情報やパスワードは、基本的に漏れるものと腹をくくり自衛するべきだ。
サービスごとにパスワードを変える。パスワードを長くする。英数字だけでなく、記号を使えるなら記号混じりにするなど、様々な方法が、各所で紹介されている。
そうした個人で採れる対策をしていない場合は、すぐにやっておいた方がよいだろう。
<文/柳井政和>
やない まさかず。クロノス・クラウン合同会社の代表社員。ゲームやアプリの開発、プログラミング系技術書や記事、マンガの執筆をおこなう。2001年オンラインソフト大賞に入賞した『めもりーくりーなー』は、累計500万ダウンロード以上。2016年、第23回松本清張賞応募作『バックドア』が最終候補となり、改題した『
裏切りのプログラム ハッカー探偵 鹿敷堂桂馬』にて文藝春秋から小説家デビュー。近著は新潮社『
レトロゲームファクトリー』。