パスワード盗難防止ガイド(4)
パスワード盗難防止ガイド(1)「パスワード盗難と関係ないじゃん」と思うかもしれませんが以下の話を。
パスワード盗難防止ガイド(2)
パスワード盗難防止ガイド(3)
□例
Napster以降MP3の著作権問題が新聞レベルでも盛んに取り上げられるようになり、例えば富士通デジカメのMP3再生機能には「コピーガード機能」が搭載されています。
- HDDから(USB接続した)デジカメのメディアに専用ソフトを使ってMP3を転送する
- するとデジカメでそのMP3を再生することが出来るようになる
- デジカメ内のメディアをカードリーダーに差し込みエクスプローラーでアクセスする
- MP3ファイルをHDD内にコピー(移動)する
- コピー(移動)したファイルを再生しようとしても出来ない
- デジカメ内のメディアをカードリーダーに差し込み、別のメディアを別のカードリーダーに差し込む
- MP3ファイルを別のメディアにコピー(移動)する
- コピー(移動)先のメディアをデジカメに差し込み再生しようとしても出来ない
前回まで「暗号化」という言葉を極めて抽象的に使ってきました。その抽象的な暗号観しか持っていないならば、前回書いたように
実のところ「アプリがパスワードを暗号化して保存するか否か」というのは「パスワード盗難を防ぐ」という話においてあまり意味を持っていないと言わざるを得ない。
□例に関する解説
MP3ファイル転送用の専用ソフトは、ファイルに対して暗号化を施しながらMP3をHDDからメディアにコピーしています。この暗号化には「メディアが一枚一枚固有に持っているナンバー」が使用される。つまり、あるMP3ファイルを転送するにしても
- そのMP3ファイルをメディアAにコピーする場合
- そのMP3ファイルをメディアBにコピーする場合
- 「メディアAの番号」を使用し暗号化されたMP3ファイルがメディアAに書き込まれる
- デジカメ内のMP3再生ソフトは現在ささっているメディア(A)の番号を利用し書き込まれたファイルを解読し再生する
- 「メディアAの番号」を使用し暗号化されたMP3ファイルがメディアAに書き込まれる
- メディアAに書き込まれたファイルがメディアBにコピーされる
- メディアBをデジカメにさして再生を試みる
- デジカメ内のMP3再生ソフトは現在ささっているメディア(B)の番号を利用し書き込まれたファイルを解読し再生する
例えば「あるアルファベットをアルファベット順で1個後ろのモノにする」という「暗号」があったとしましょう。この「暗号化」では「A」は「B」に、「S」は「T」になりますね。「A」が「暗号に対する入力」で「B」が「暗号による出力」である、と。では、「あるアルファベットをアルファベット順でn個後ろのモノにする」という「暗号」ならばどうか。入力が「A」「2」ならば出力は「C」ですね。入力が二つで出力が一つ。y=f(x)=3xならば入力は一つで出力も一つだが、y=f(x,a)=axならば入力が二つで出力が一つ。
・・・と、いうように、「暗号」に対する入力は必ずしも一つではない。複数の入力から一つの出力を生成する「暗号」も存在する。そして、「暗号」とは「関数」と同じようなモノである。入力・出力が一つずつな関数は「一入力関数」、入力が複数で出力が一つな関数は「複数入力関数」と呼ばれます。
MP3ファイル転送用の専用ソフトは、ファイルに対して暗号化を施しながらMP3をHDDからメディアにコピーしています。この暗号化には「メディアが一枚一枚固有に持っているナンバー」が使用される。「元のMPファイルの内容」と「メディアが一枚一枚固有に持っているナンバー」が入力で、「メディアに書き込まれるMP3ファイルの内容」が出力です。
さて。例えばHDD内の設定ファイルにパスワードが書き込まれる時、暗号化に「マシン固有のナンバー」が入力として使われていたらどうなるか。
- あるマシンでパスワードが「そのマシン固有のナンバー」を使って暗号化されHDD内設定ファイルに書き込まれる
- 次回起動時、プログラムは「設定ファイルに書かれている文字列」を「そのマシン固有のナンバー」によって解読し「正しいパスワード」を得る
- あるマシンでパスワードが「そのマシン固有のナンバー」を使って暗号化されHDD内設定ファイルに書き込まれる
- その設定ファイルが(直接操作やネットワーク経由の攻撃によって)盗難される
- 盗難したクラッカーは自分のマシンに同じアプリをインストールして盗んだ設定ファイルを読み込ませる
- アプリは「クラッカーのマシン固有のナンバー」を使ってパスワード解読を試みる
FFFTPはパスワード保存時に「正しいパスワードを一入力関数に代入した値」を保存しています。
「abcde」と設定したのに「AFcBFCFBaIYZL」となっている「abcde」が「正しいパスワード」の時、「AFcBFCFBaIYZL」が「正しいパスワードを一入力関数に代入した値」。「何故一入力関数だと分かるのか?」という理由ですが、
上記の行程で、新PCを買った時に環境移行することが出来るからです。もしもFFFTPが「正しいパスワードを複数入力関数に代入した値」を設定ファイルに記録しているのならば、上記の行程で環境移行が出来る訳がない。
- 旧PC内のFFFTPの設定ファイルをFDDか何かにコピーする
- 新PCにFFFTPをインストールする
- 新PC内のFFFTPフォルダに(1でバックアップした)FFFTP設定ファイルをコピーする
- ユーザーがパスワード「abcde」をマシンAにインストールされたFFFTPに登録する
- FFFTPは「abcde」と「マシンAの固有番号a」を複数変数関数に代入し得られた文字列「AFcBFCFBaIYZL」を設定ファイルに記録する
- ユーザーがマシンBにFFFTPをインストールし上記設定ファイルをコピーする
- マシンB上のFFFTPは「AFcBFCFBaIYZL」を「マシンBの固有番号b」によって解読しようと試みる
基本的に、「アプリがパスワードを暗号化して記録するか否か」というのは「パスワード盗難を防ぐ」という話において何も意味を持っていません。「暗号」が一入力関数であるなら「設定ファイルを抜かれる」は「アカウントを破られる」と同値であるし、「設定ファイルを抜かれない」なら「アカウントは破られない」。その「暗号」が「複数入力関数」だからこそ、「設定ファイルを抜かれる」と「アカウントを破られる」の同値関係が揺らいでくる(こういうアプリでは「設定ファイルを抜かれる」は何のダメージにもならないのか?という話は次回扱います)。
この話は、まぁ全ての人にとって重要といえば重要なのですが、特にパスワード管理ツールを使っている人にとって大きな問題となるでしょう。「FFFTPの設定ファイルを抜かれる」は「FTPアカウントを盗まれる」にしか直結しない(もちろんそれだけでも大きな問題ですが)。しかし、パスワード管理ツールに全てのパスワードを記録させている人にとって、「パスワード管理ツールで記録しているパスワードを盗まれる」は「全てのパスワードを盗まれる」ということです。その「パスワード管理ツール」がパスワードを暗号化して記録している場合(平文で記録する「パスワード管理ツールはさすがにないとは思いますが・・・)、その「暗号」が「一入力関数」なのか「複数入力関数」なのかは大きな差です。
今回の結論:
「ソフトがパスワードを暗号化する時、正しいパスワードを一入力関数に代入しているのか複数入力関数に代入しているのか」というのは大きな差である。見かけ上はどちらも「平文ではない」のだが、「設定ファイルを抜かれる」が「アカウントを破られる」に繋がるか繋がらないかはここで決まってくるのだ。パスワードをマシンに覚えさせるなら、その設定ファイル(orレジストリ)に記録される文字列は「正しいパスワードとマシン固有の値を複数入力関数に代入して得られた文字列」であることが望ましい。
パスワード盗難防止ガイド(5)
パスワード盗難防止ガイド(6)
パスワード盗難防止ガイド(7)

TrackBack
この記事へのトラックバック