良いパスワードとは

広告

広告

良いパスワードとは

セキュリティ総論第一回としまして、表題の通り「良いパスワードとは」を考えてみましょう。世の中のIT化がじゃんじゃん進むにつれて、パソコンからパスワードを入力する機会が増えたのは私だけではないはずです。コンピュータにログインするためのパスワード、インターネットに接続するためのパスワード、メールを受信するためのパスワード、掲示板に書込みをするためのパスワード、メールマガジンの登録情報を編集するためのパスワード、更には、インターネットバンクを使ってお金を振り込むためのパスワードまで。個人を認証する手っ取り早い方法がパスワードなので仕方無いと言えば仕方が無いのですが、ここがポイントです。

どんなパスワードを登録していますか?

随分抽象的な質問ですがいかがでしょう。当たり前ですが、なんらかのパスワードがもし破られたならばそのパスワードはもはや何も意味をもちません。せっかく各自でパスワードを登録させてもらえるのに、簡単に破られるパスワードを登録していませんか?絶対に破られないパスワードは不可能でしょうが、破られにくいパスワードを登録することは可能です。ここで、パスワードについて書かれた様々な資料に共通する「良いパスワード」を紹介します。

  1. 名前などの個人情報からは推測できないパスワードにする。
  2. ユーザ名と同じ文字列をパスワードにすることは避ける。
  3. パスワードをメモや手帳、パソコンのファイル等に保存しない。
  4. 辞書にのっている単語は避ける。
  5. なるべく長いパスワードにする。
  6. 「aaaaa」等、同じ文字の繰り返しによるパスワードは避ける。
  7. 数字、アルファベット(大文字、小文字)、記号をおりまぜたパスワードにする。
  8. 同じパスワードを長期間使う事は避ける。
  9. デフォルトのままパスワードを使う事は避ける。
  10. 同じパスワードを違う用途に登録する事は避ける。

これだけの条件をクリアしていれば、良いパスワードと言う事になるらしいです。(本当に良いかどうかは後に考えていきます。)当然、ここで論議されています良いパスワードは、破りにくいパスワードと言うことです。まぁ、確かにこれだけの条件を満たしていれば、よっぽどの事が無い限り破られないでしょう。でも正味な話、無理ですよね。「英字大文字/小文字、数字、記号をおりまぜた十分に長い文字列をどこにもメモらず頭の中に記憶し、用途ごとに全て別のパスワードを作成し、一定期間が過ぎれば変更する。」こんなことをやってる人が本当にいるのかと逆に聞きたくなります。(あくまで個人ユーザの話。企業のネットワーク管理者等重要任務に就かれている方は、自分の身を守る意味でも手抜きはしない方がよろしいかと。)例えば、メールマガジンの個人情報修正のためのパスワード。こんなものに本当に厳重なパスワードが必要なのかと言う話ですよね。仮にパスワードを破られたとしても、盗まれるのはメールアドレスと偽名くらいでしょう(笑)。ユーザIDがメールアドレスとなっている事がほとんどですので、考え付く被害と言えば…メルマガを勝手に配信中止にされることくらいでしょうか。要は、そのパスワードが破られたときに、どれだけ困るかなんですよね。掲示板へ書き込む際のパスワード、メルマガの登録情報修正パスワード、自分の掲示板の管理者パスワード等々。これらのパスワードが破られたからといって、多少腹が立つくらいで困ることと言うのは少ないと思います。そんなパスワードは使いまわしであろうが、仮に「0123」であろうが、気にせず覚えやすさを最優先させれば良いでしょう。

とは言いましても、少なからず被害に遭うことに違いはありませんので…「8桁くらいの英数字記号をおりまぜた覚え易いパスワードを使いまわす」くらいの自己防衛は最低限しておきたいですね。

逆に、良いパスワードを考えなければならないのは破られたときに本当に困るときです。ネットバンクにログインするためのパスワード、インターネットに接続するためのパスワード、メール受信のパスワード。銀行の残金が勝手に減ったり、使いたいときにインターネットに接続できなかったり、離婚の危機に陥ったりと…もうここまでいったら腹が立つくらいじゃ済まないですよね。破られて本当に困るパスワードには良いパスワードの条件をできるだけ満たした方がよいでしょう。以上のことを踏まえた上でここから先は読み進んでいってください。

では、上記1〜9までの条件を満たすパスワードがなぜ良いパスワードなのか、本当に良いパスワードなのかを考えてみましょう。パスワードを破る際の代表的な流れ(笑)は以下の通りらしいです。

まず、その人の情報から推測されるパスワード、つまり名前や生年月日、社員番号などが試されます。

次に、ディクショナリーアタック(辞書アタック)と呼ばれる推測が行われます。これはあらかじめ用意された単語リスト(辞書)を元に順番に試していく方法です。

ここまでの推測で見つからなかった場合の最後の手段としてブルートフォースアタックと呼ばれる推測が行われます。これは、パスワードとして使うことのできる文字全てを、全ての並び替え順序で試していく方法です。早い話がパスワードになりえる全ての文字列を片っ端から試していく方法ですので、この方法で破れないパスワードは無いと言われています。

以上が代表的な流れですが、当然ディクショナリーアタックとブルートフォースアタックに関しましては「手動」と言うわけにはいきません。コンピュータを使用し、高速かつ正確にパスワードの推測を行っていくというわけです。

ここまで読んで頂けたならば、どんなパスワードが良いパスワードなのかわかってきたでしょうか。そもそも誕生日や社員番号など、調べようと思えば簡単に調べられる情報というのは真っ先に試されます。こんなパスワードが何の役にも立たない…まで言ったら言いすぎですが…ことは明らかです。よって、「1.名前などの個人情報からは推測できないパスワードにする」は守ってもらった方がよさそうです。

また、同様の理由により「2.ユーザ名と同じ文字列をパスワードにすることは避ける」も守った方が良いでしょう。ついついめんどうになってやりがちなのがこの2番なのですが、この「やりがち」と言うのが落とし穴なのです。多くの人が「やりがち」なことは真っ先に試されます。この「ユーザ名とパスワードが同じアカウント」にはJOEアカウントと固有名詞までついており、パスワード破りの際に真っ先に試されることの一つとなっています。

次に3番ですが、これはいかがでしょう。「パスワードマニュアル」的なものに、よくこの文言が見られますが、これは正しいでしょうかね。どこにも保存しないということは、完全に記憶しなければならないと言うことです。複数のパスワードを使いこなし、全ての複雑なパスワードを完全に記憶することが出来る人には何も言いません。この3番は正しいでしょう。しかし、私のような一般市民以下の頭脳しか持ち合わせていない人間にしてみればこの「覚える」と言う大前提がそもそも怪しいです。覚えきれなかった場合、どこにもメモを残していなければ人はいったいどのような行為に及ぶかを想像してみて下さい。何らかのパスワード認証画面でパスワードを入力したところ、「認証エラー」と機械ごときに怒られた。少しむかつきながらももう一度、正しく正確にパスワードを入力してみるが、また同じ「認証エラー」となった。半べそかきながら思いつくパスワードを片っ端から入力していく。まぁ、経験談なのですが…誰しも一回くらいはこんな経験をしているのではないかと勝手に思っています。大抵の場合この行為も問題ないでしょうが、もしそのパスワード認証画面が悪意のあるサイトによるものであったならば…別途紹介しようと思っていますが、「URLスプーフィング(偽装)」による偽サイトに導かれ、正確なパスワードばかりか他の認証個所で使用しているパスワードまでばれてしまう。こんな可能性も否定はできないでしょう。そもそもメモをとることができないとなったら人間心理(私的心理?)として簡単で覚え易いパスワードに気持ちが流れていきます。こうなってしまっては本末転倒と言うよりは目もあてられないって感じですね。覚えれないならメモしておきましょう。ただし、そのメモはコンピュータのそばなどには置かず(付箋でディスプレイに貼るなどもってのほか)、他人に見つかりにくい場所に保管しておくことをお奨めします。

4番の「辞書にのっている単語は避ける」がディクショナリーアタック対策だということはもう分かって頂けていると思います。しかし、安易に考えていたら痛い目にあいますよ。この「辞書」と言う言葉にだまされる方が多いのですが、ここで言います「辞書」は一般に本屋などに並んでいる「辞書」ではありません。パスワードを推測するための、言うならば「パスワード破り専用辞書」です。自分が乗っている車の名前など辞書にのっていないだろうと…思うのは勝手ですが大きな間違いです。英語辞書に載っている単語などもちろんのこと、芸能人の名前をローマ字標記に直したもの、古今東西の曲やアーティストの名前、動物や食べ物の名前、歴史上の人物や事件の名前などなど、考えつくありとあらゆるジャンルの様々な辞書が用意されています。そればかりではありません。最近のディクショナリーアタックツールには、「単語」+「任意の数字」などといった組み合わせまで試すものがあります。例えば、「古今東西ミュージシャン辞書」と「4桁以下の数字」と言った指定の仕方までされてしまうのです。ちなみに英字大文字/小文字を織り交ぜた一般的な単語もこのディクショナリーアタックによって攻略されることがあります。よって一般的な単語や、一般的な単語+自分の誕生日といったパスワードは役に立たない部類に入ってしまうのです。

5番の「なるべく長いパスワードにする」も呪文のようにどこにでも載っている注意ごとなのですが、これは本当に正しいのでしょうか。まぁ、正しくないと思うからこんな書き方しているわけなんですが…順番に考えていきましょう。まず、短すぎるパスワード。例えば4文字の英数字を使用したパスワード。こんなものはもってのほかですね。

#!/usr/bin/perl

$kore = 'cryptされたパスワード';
$keta = 4;
@pass = ('0','1','2','3','4','5','6','7','8','9');
@pass = (@pass, 'a','b','c','d','e','f','g','h','i',
  'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',);
@pass = (@pass, 'A','B','C','D','E','F','G','H','I',
  'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',);
#@pass = (@pass,'!','#','$','%','&','(',')','*','+','-',',',
  '.','/',':',';','<','=','>','?','@');
#@pass = (@pass, '');
$kazu = @pass;
$max = $kazu ** $keta;

for($lngX = 0; $lngX <= $max; $lngX++) {
    $line = '';
    $flg = 1;
    $X = $lngX;
    $line = '';
    
    while($flg <= $keta){
        $yo = $X % $kazu;
        $line = "@pass[$yo]$line";
        $X = ($X - $yo) / $kazu;
        $flg ++;
    }
    print $line;
    if( $kore eq crypt($line, $kore) ){
        print "Passwd Get!  [" . $line . "]\n";
        exit;
    }
}
print "Passwd Not Found!\n";

exit;

実験のために上記のようなスクリプトを実行したところ、4桁((10+26+26)^4 = 14,776,336 通り)ならば5分強で全検索終了しました。いくらいずれ破られるパスワードとは言っても5分はひどすぎます。これが8桁になると218,340,105,584,896 通り・・・かな。英字大文字/小文字と数字を組み合わせたパスワードを使用していれば何時間かかるんでしょう?計算する気も起きませんが、24時間では足りなさそうですね。これに記号まで含めると・・・もう何通りかなんて計算も不要なくらいでしょう(笑)「7.数字、アルファベット(大文字、小文字)、記号をおりまぜたパスワードにする」と言った理由はこういうことからです。

ブルートフォースアタックにも段階があります。まずは4桁数字くらいから挑戦し、だめならば4桁英小文字と数字の組合せ、それでもだめならば4桁英大文字/小文字と数字の組合せそれでもだめならば5桁の・・・といったように、桁が多ければ多いほど、また、使用している文字の候補が多ければ多いほど、ブルートフォースアタックにかかる時間も多くなるというわけです。

ここまで読んで頂けたならば、英字の大文字と小文字を使い分ける重要性が分かったと思いますが、少し待ってください。この話が有効なのはUNIX系のパスワード認証システムです。世間一般に最も広まっていますWindowsではこの話はほとんど意味がありません。Windows 9x/Meではパスワード中の英小文字はすべて大文字に変更されます。なので、Windows 9x/Meの場合、大文字小文字を使い分ける意味がありません。更に、Windows NT/2k/XPであっても、14文字以下のパスワードを設定した場合には、Windows 9x/Meと同じ方式の認証方式もサポートします。ってことは今のところWindows上では、大文字小文字を使い分ける意味なんて無いということになります。意味がないばかりか、覚えにくく入力しにくいデメリットを考えればもうこんなものは使用者対する嫌がらせ以外何ものでもありません。大文字小文字を使い分けたほうがよいのはUNIX系OSのみということを覚えておいて下さい。

ここで本題に戻りまして、本当にパスワードは長ければ長いほど良いのでしょうか。ある程度短いほうが覚えやすい、という理論はとりあえず横においておきまして、パスワードがシステム内においてどのように使われているのかをまず考えていきます。UNIX系のいくつかのシステムにおいて、入力されたパスワードのうち頭から8文字分までしか認証に使っていない場合があります。言い換えますと、このようなシステムでは9文字目からは全く認証に意味がありません。当然、自分がシステムを構築していればどのような認証を行っているかわかるので問題ありませんが、他人が作ったシステムに自分がパスワードを登録する際には注意が必要となります。注意書きとして、「パスワードは8文字以内にして下さい」と書いてあったり、8文字以上は入力できない仕様になっているシステムはまだ良心的です。しかし中には、注意書きも入力制限もないのに、システム内部ではパスワードの頭から8文字までしか使っていないところがあることも考えられます。こうなってしまったら「長いパスワードだから安心」などという錯覚に陥るだけでなく、意味の無い入力を毎回強いられていることにもなります。8文字以上のパスワードがサポートされているかどうかをまずは確認することをお勧めします。

次に「8.同じパスワードを長期間使う事は避ける」について考えてみましょう。これも現実的に実行可能かどうかで最善の策が変わってくると思います。もし可能であれば、毎日でもパスワードを変更した方がいいでしょう。もしそのパスワードを破るために、世界最速の計算能力を持つコンピュータ1万台がフル稼働で1日以上時間を費やすのであれば…そのパスワードがブルートフォースアタックで破られることはまずないでしょう。しかし毎日パスワードを変更することなど可能ですか?メモの項目でも触れましたが、人間こんなめんどうな要求をつきつけられますと、ついつい楽な方にいってしまいがちです。「毎日変更しているのだから今日くらいは覚えやすいパスワードでもいいか」とか「毎日パスワードが変わって覚えきれないから現在のパスワードをとりあえずディスプレイに付箋で…」とか。そんなことするくらいでしたら最初から一つの良いパスワードを2,3年間使用する方がましなのではないでしょうか。あまり神経質にならずに自分のできる範囲で気が向いたときにでも変更すればいいと思います。

更に、「9.デフォルトのままパスワードを使う事は避ける」ですが、これはどうでしょう。少し分かりにくいとは思いますが正論だと思います。例えば、ルーターのデフォルトパスワードを考えてみてください。そのルーターの製造元のWEBサイトにでもいけば「使用説明書」くらいはダウンロードできるでしょう。当然その「使用説明書」にはデフォルトのパスワードは「root」です…などと記入されていて、もしデフォルトのパスワードから変更を加えていなければ、公の場にパスワードを公開しているのと同じことです。「誰かが勝手に登録したパスワード」をそのまま使う事は避けるべきでしょう。

最後になりましたが、「同じパスワードを違う用途に登録する事は避ける」はどうでしょう。ついついやってしまいがちですよね。メールの受信パスワードも、コンピュータの起動パスワードも、FTPサーバへの認証パスワードも、登録できるパスワードは全て同じパスワードといった具合に…。絶対やめるべきでしょうね。全て同じパスワードということは、一つのパスワードが破られたら一網打尽となってしまいます。例えば、掲示板に書込みをした際に、自分のWEBサイトへのログインパスワードと同じパスワードを使っていたとします。余談ではありますが、掲示板のログは管理者以外には見られることも無いと…まだそんな眠たいことを思っている方は考えを改めてください。特にオープンソースの掲示板で、ログファイルが「log.dat」とか言う名前であるにもかかわらず、そのまま使っている掲示板など一般にログを公開しているも同然です。ログである以上記入者偽名、パスワード(一応暗号化)、IPアドレス、記入者運営のWEBサイトURL等々記入してあるでしょう。URLから大抵の場合ログインアカウント名は想像できますよね。こんな状況で掲示板への書込みパスワードと、WEBサーバへ接続する際の認証パスワードがもし同じであったら、いつご自分のサイトのTOPページが、見たことも無い面白いTOPページに変わってもおかしくありません。例は少し極端なものを挙げましたが、「同じパスワードを違う用途に使う」ことはかなり危険なのです。めんどうなようでもパスワードは用途用途で変えましょう。

ここまでをとりあえずまとめてみると以下のようになります。

  1. 名前などの個人情報からは推測できないパスワードにする。
  2. ユーザ名と同じ文字列をパスワードにすることは避ける。
  3. パスワードをメモする場合はなるべく他人に見られない場所を選ぶ。
  4. 一般的に使われている単語をパスワードにすることは避ける。
  5. 8文字の元になる強いパスワードを作成し、状況に応じてその後にいくつかの文字列をつけ加える。
  6. 「aaaaa」等、同じ文字の繰り返しによるパスワードは避ける。
  7. 数字、アルファベット(大文字、小文字)、記号をおりまぜたパスワードにする。
  8. デフォルトのままパスワードを使う事は避ける。
  9. 覚えきれる範囲で2〜5個のパスワードを用意し、上手に使いまわす。

例えば掲示板に書き込むためのパスワードや、メールマガジンの登録情報変更パスワードなどは、「7Key#」を常に使いまわし、その他の破られたときに本当に困るパスワードにはある程度強いパスワードを用意する。死守しなければならない情報には、自分が持っているパスワードに対する知識の結晶をつぎ込む…といった具合に、負担はなるべく少なく、効果的な運用を行うべきでしょう。

以上パスワードに関することを考えてみましたが、結局「セキュリティ」と「効率的な運用」は相反するものです。この相反する部分が「理想」と「現実」となり、結局疎かなパスワード管理をしている人だらけになっているのでしょう。いずれにしましても、パスワードはセキュリティ対策の基本です。パスワードは自分の情報を守ってくれている、ということをしっかり認識しましょう。

広告

Copyright (C) 2003-2004 七鍵 key@do.ai 初版:2004年4月4日 最終更新:2004年4月4日