長いだけが複雑なパスワードではない。
いくら安全になるからと言っても、無限にパスワードを長くするわけにはいきません。
パスワードには当然、「正規のユーザ」がいるわけで、「このパスワードは314 億1592万6535 ケタあるから絶対に破られない!」って力んでも、そんなもの誰も使いません。
この「複雑にしなければならない」と「あんまり長くできない」のバランスを取るためにひねり出されたのが、「パスワードは要求する複雑さを満たす」や「パスワードの履歴を記録する」といった設定項目です。
ちょっと分かりにくいのですが、「パスワードは要求する複雑さを満たす」は、この場合「英大文字・英小文字・数字・記号の4種類の文字種から3種類以上が使われている」ことを示しています。
同じ3文字のパスワードでも、「英小文字だけしか使っていないパスワード」より「英小文字も英大文字も数字も記号も入っているパスワード」の方が、総当たりするのに時間がかかります。
パスワードとして考えられるバリエーションが増えるためです。
Windowsでパスワードを変更しようとして、「入力したパスワードは要件を満たしていません!」と怒られるのはこれが原因です。
また、「パスワードの履歴を記録する」は、「複雑にすること」とは直接結びつかないかもしれませんが、クラッカの安直な推理を防ぐための手段です。
例えば、「7日間でパスワードを変更する」ことがルールになっている場合、パスワードがもれてしまっても最悪7日後にはパスワードが変更され、クラッカをふたたびパスワードが分からない状態にすることができます。
しかし、せっかく変更したパスワードが前のものと似ていれば、クラッカは総当たりより楽に新しいパスワードを見つけてしまうかもしれません。
クラッカはコンピュータと違って知性のある人間ですので、文脈を読むのが上手です。
例えば、Pさんの使っている「xyz」というパスワードがあったとします。
クラッカはこれをひょんなことから入手しましたが、Pさんはルールにしたがって7日後にパスワードを「xyx」に変更しました。
このときクラッカはどんな行動を取るでしょうか? 「パスワードを変更されてしまった。
もう一度総当たり法で新しいパスワードを手に入れよう」「aaa 」「aab 」「aac」……とするでしょう。
でもクラッカは違います。
「パスワードを変更されてしまったな。
でも待てよ? 新しいパスワードを作ったり覚えたりするのがめんどうで、似たやつを使っているかもしれないぞ。
前のパスワードを起点に探してみよう」「xyy」「xyx」!ビンゴ!このように人間はあらゆる情報を使ってパスワードを推測するので、「以前に使ったのと似たパスワード」や「以前のパスワードの使い回し」を用いることは非常に危険です。
Windowsの「パスワードの履歴を記録する」は、パスワードの変更履歴を指定回数だけ記録しておいて、同じパスワードには変更できないようにする機能なのです。
さらに厳しく、「前のパスワードと×××文字以上同じ文字が合まれていたらダメ」なんて決めているソフトウェアもあります。
いずれにしろ、限られた条件の中でできるだけ複雑な要素を取り込み、クラッカをまどわせる努力が払われているのです。
こうしたパスワード作成者とクラッカの知恵比べは(クラッキングはしちゃいけないんですけど)、はたから見ている分には知的ゲームとして面白いです。
古くから推理小説のプロットとしても使われています。
有名どころでは、ドイルの「踊る人形」(『シャーロックホームズの帰還』所収)やポーの「黄金虫」が秀逸なので、未読の方は是非どうぞ。