カレンダー

2020/04
   
  
       

広告

Twitter

記事検索

ランダムボタン

安全が保証できない

by 唐草 [2020/04/20]



 PCのパスワードは、PCのどこにも保存されていない。それなのにどうしてログインできるのか?これには単純なカラクリがある。
 PCの中にはパスワードそのものではなくて、パスワードから計算したハッシュ値を保存している。例えば"123"というパスワードは、"ba1f 2511 fc30 423b"といった感じの暗号のようなハッシュ値へ変換されている。ポイントは、ハッシュ値から元のパスワードに戻す方法が無いという点にある。
 初めてこの仕組を聞いたとき、元に戻せない値でどうして認証できるのかすぐに理解できなかった。だが、冷静に考えれば単純だ。
 入力されるたびにパスワードのハッシュ値を計算して、保存された値と比較すればいい。同じ計算結果になるのなら正しいパスワードが入力されたと判断できるという訳だ。元に戻せない値を保存しているので、覗かれても問題はない。
 機密情報を見られないように厳重に隠すのではなく、見せても誰にもわからない形に変換して保存してある点が重要なのである。
 ぼくもアカウントを管理するプログラムを作るときは、必ずハッシュ値を保存するようにしている。こうすればデータが流出しても、パスワードを悪用することは不可能だ。
 今日、ぼくに届いた依頼は、上記の考えに真っ向から対立するものだった。
 「データベースにパスワードを保存したい」と頼まれてしまったのだ。
 ぼくはセキュリティーに関しては、ただの素人だ。安全な鍵の掛け方なんて全然知らない。情報を見られても平気な形に変換するすべを知っているに過ぎない。
 当然のことながらパスワードをそのままの文字で保存するわけにはいかない。だから、元に戻せる暗号で暗号化する必要がある。ここまではOKなのだが、どんな種類の暗号を採用するのが適切なのかが分からない。また、暗号化するときの鍵の生成のノウハウもよく分からない。同じ鍵を使いまわしたら、偶然同じパスワードがあったとき同じ暗号が生成されてしまう。
 じゃあ、鍵も暗号化したほうが良いだろうか?いや、それだと今度は「鍵を暗号化するときの鍵」の問題が出てきて、堂々巡りになってしまう。どうすりゃいいんだ?