個人認証サーバーのパスワード管理
キャッシュカードのパスワード(暗証番号)は 4 桁の数字なので、最大 10000 回平均 5000 回の試行錯誤により暗証番号が明らかになってしまいますが、3 回続けて間違えるとキャッシュカードが使用できなくなります。
このため 4 桁でも安全とされていますが、暗証番号を生年月日など他人が推測しやすいものにしていたら台無しです。
一般のコンピューター・システムでは、パスワードは 6 桁以上の英数字の組合せになっており、個人認証サーバーで以下のように管理されています。
| ID | 暗号化されたパスワード | パスワード暗号化関数 |
|---|---|---|
| 0001 | 9dvo4t | y = a x + b |
| 0002 | k1jwn5 | y = c x 2 |
個人認証は、以下の手順で行われます。
- クライアントが ID とパスワードを認証サーバーへ送る
- 個人認証サーバーが 1 の ID に対応する暗号化されたパスワードとパスワード暗号化関数を探す
- 1 のパスワードを 2 のパスワード暗号化関数に入力する
- 2 の暗号化されたパスワードと 3 の出力を比較して、同じ場合はログインを許可するが、異なる場合は禁止する
ただし、キャッシュカードの暗証番号とは違い、一般のコンピューター・システムはパスワードファイルが盗まれる危険性があります。
パスワードファイルが盗まれたとしても、暗号化されたパスワードとパスワード暗号化関数からパスワードが復号されることはありません。
しかし、以下の手順で総当たりをすれば、パスワードが解析されることになります。
- 文字列 1 をパスワード暗号化関数に入力し、その出力を暗号化されたパスワードと比較する
- 文字列 2 をパスワード暗号化関数に入力し、その出力を暗号化されたパスワードと比較する
このとき、英数字の総当たりではなく、「ディクショナリー・アタック(辞書攻撃)」がよく利用されます。
ディクショナリー・アタックとは、「人間は無意味な文字列は覚えられず、意味のある文字列をパスワードに利用する」という発想から生まれたもので、辞書に載っている単語を最初から順番に試していきます。
ディクショナリー・アタックには、以下の手段が有効です。
- 大文字と小文字を組合せる
- 最初や最後に生年月日を付加する
- 複数の単語を連結する
