会員制サイトにおけるパスワード(1)
例えばブラウザメール、例えば会員制出会い系サイト。こうした「IDを作成しパスワードを使ってログインするサイト」。その「パスワード」について、です。
人間である以上「パスワード」をなくすことってある訳です。ID制のサイトには「パスワードを忘れた人の救済措置」みたいなものがあったりします。「秘密の質問」であったり「あらかじめ登録しておいたアドレスにパスワードをメール送信」であったり。
この「救済措置」を観察することで、「そのサイトでパスワードがどのように扱われているか」を推測してみましょう。
「救済措置」には次のような分類方法があることにお気づきでしょうか?
例えばhotmailはこっちです。
□1と□2の差なんです。はっきり言って「秘密の質問に答えるとパスワードが表示される」のと「登録しておいたメールアドレスにパスワードが送ってくる」に(今回と次回で扱うテーマにおいて)大差はありません。ブラウザに表示するかメールを使うかの差に過ぎません。しかし□1と□2には大きな差があります。
さて、perlにはcryptという関数があります。
(基本的にこの文章はperl知らない人を対象にしてますのでご安心を。)
例えば「tokix」という文字列をあるキーを使ってcryptにかけた結果「asgefhk」になったとしましょう。この「asgefhk」を元に「tokix」を復元することは基本的に不可能なんです。このように「復元が基本的に不可能」であることを「一方向」って言います(※2)。
crypt関数はパスワード認証によく使われます。正しいパスワードをあらかじめあるキーで暗号化しておくんです。で入力されたパスワードも同じキーで暗号化します。暗号化されたモノ同士を比較して「入力されたパスワードが正しいか」を判断する訳です。
人間である以上「パスワード」をなくすことってある訳です。ID制のサイトには「パスワードを忘れた人の救済措置」みたいなものがあったりします。「秘密の質問」であったり「あらかじめ登録しておいたアドレスにパスワードをメール送信」であったり。
この「救済措置」を観察することで、「そのサイトでパスワードがどのように扱われているか」を推測してみましょう。
「救済措置」には次のような分類方法があることにお気づきでしょうか?
□1:正しいパスワードを表示
例えば秘密の質問に答えるとブラウザ上に表示される。あらかじめ登録しておいたメールアドレスにパスワードが送りつけられる。何にしても「正しいパスワード」が表示されますよね。□2:パスワードを変更できる
秘密の質問に答えるとパスワードを変更することができる。そうすれば変更後のパスワードでログインできる。例えばhotmailはこっちです。
□1と□2の差なんです。はっきり言って「秘密の質問に答えるとパスワードが表示される」のと「登録しておいたメールアドレスにパスワードが送ってくる」に(今回と次回で扱うテーマにおいて)大差はありません。ブラウザに表示するかメールを使うかの差に過ぎません。しかし□1と□2には大きな差があります。
さて、perlにはcryptという関数があります。
(基本的にこの文章はperl知らない人を対象にしてますのでご安心を。)
$crypted = crypt ( $content, "ab" );
$contentという文字変数に「ab」という「キー(※1)」を使った暗号化を施して$cryptedに代入してます。
※1
「関数」というのは例えば「f(x)=3x+5」とかそういうヤツですね。「キー」と言われるとよく分からないかもしれないのでとっても簡単かつ乱暴に説明しておきます。
f(x,a)=3x+a
xが「変数」でaが「キー」。「f(x)=3x+5」で出てきた数が例えば20ならばxは5ですよね。でも「f(x,a)=3x+a」で出てきた数が20だとしてもaが分からなければxは分かりません。(x,a)=(5,5)なのか(x,a)=(6,2)なのか(x,a)=(7,-1)なのか・・・。
crypt暗号化は基本的に一方向です。「関数」というのは例えば「f(x)=3x+5」とかそういうヤツですね。「キー」と言われるとよく分からないかもしれないのでとっても簡単かつ乱暴に説明しておきます。
f(x,a)=3x+a
xが「変数」でaが「キー」。「f(x)=3x+5」で出てきた数が例えば20ならばxは5ですよね。でも「f(x,a)=3x+a」で出てきた数が20だとしてもaが分からなければxは分かりません。(x,a)=(5,5)なのか(x,a)=(6,2)なのか(x,a)=(7,-1)なのか・・・。
例えば「tokix」という文字列をあるキーを使ってcryptにかけた結果「asgefhk」になったとしましょう。この「asgefhk」を元に「tokix」を復元することは基本的に不可能なんです。このように「復元が基本的に不可能」であることを「一方向」って言います(※2)。
※2
例えば「g(x)=x^3」(a^bは「aのb乗」)。xに1.72を代入すると5.088448になります。縦書き計算するか電卓を使うかすれば小学生でも出せますね。しかし「3乗すると5.088448になる数は?」と聞かれたら高校生でも「・・・」ですね。こういう性質を「一方向」と言います。と、かなり乱暴に説明しておきます。
5.088448は末桁が8です。よってxの末桁は2です。また、5.088448は小数点以下が6桁ですからxは小数点以下が2桁です。そして概算からxは1以上2以下です。
だから1.12や1.22を3乗していけばいつか「3乗して5.088448になる数(=1.72)」は分かる。
この方法でg(x)からxを求めることは「復元」ではないですよ。
・・・まぁ本筋とは関係ないんで意味分からなければ深く気にせずに。
「そんなの何に使うの?」と不思議かもしれません。普通「暗号」っていったら「秘密のメールを他人に読まれないために暗号化しておいて相手だけが解読できる」とかそんな感じですよね。「一方向」ってのは「解読不可能」ってことですから。そうした用途には適しません。例えば「g(x)=x^3」(a^bは「aのb乗」)。xに1.72を代入すると5.088448になります。縦書き計算するか電卓を使うかすれば小学生でも出せますね。しかし「3乗すると5.088448になる数は?」と聞かれたら高校生でも「・・・」ですね。こういう性質を「一方向」と言います。と、かなり乱暴に説明しておきます。
5.088448は末桁が8です。よってxの末桁は2です。また、5.088448は小数点以下が6桁ですからxは小数点以下が2桁です。そして概算からxは1以上2以下です。
だから1.12や1.22を3乗していけばいつか「3乗して5.088448になる数(=1.72)」は分かる。
この方法でg(x)からxを求めることは「復元」ではないですよ。
・・・まぁ本筋とは関係ないんで意味分からなければ深く気にせずに。
crypt関数はパスワード認証によく使われます。正しいパスワードをあらかじめあるキーで暗号化しておくんです。で入力されたパスワードも同じキーで暗号化します。暗号化されたモノ同士を比較して「入力されたパスワードが正しいか」を判断する訳です。

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