ネットが遅くてイライラしてない!?

いつ頃からか、サービスへのログイン時のパスワードに使用する文字について、セキュリティ強化の一環として英数字混在化を必須とするシステムを目にするようになりました。

単純に組み合わせパターン数だけで考えると、混在必須とすると小さくなってしまう気がするのですが、間違ってますか?(パターン数の求め方に自信がなくて・・・ ^^;)

もし合ってるなら、わざわざこのような制限を設ける実際的な意味はあるのでしょうか?
(確かに「人間にとっては」より「想像しにくくなる」気はしますが・・・)

このQ&Aに関連する最新のQ&A

A 回答 (5件)

すいません。


組み合わせは減ります。

さて、その理由についても書き忘れていましたが、
パスワードとは言え、覚えやすい文字列となると基本的には英単語や固有名詞となります。
よく使われる単語や固有名詞はパスワード解析ソフトなどでまずアタックされる標的となります。
単純に辞書を用意して頭から順番に入れてみれば良いですし。

ここで、ある程度長い文字数を指定した場合には一つの単語だけではカバー出来なくなるので複数の単語をつなげたりして覚えやすいパスワードを作りますが、上記の様に辞書アタックを仕掛けると、文字の組み合わせと同じように累乗で組み合わせが増えるため解析が難しくなります。
例えばパスワードが20文字以上だとすると、全部で20文字以上になる単語の組み合わせとなると、それこそ星の数ほどの組み合わせが発生し、単純に辞書総当たりで解析することが現実的でなくなります。
しかし実際にはそんな長いパスワードを設定するユーザーは面倒ですし、システム側も大変です。

そこで[アルファベットと数字を混在させなくてはならない]とすると、同じように単語と数字の組み合わせが単純な辞書だけではカバー出来なくなります。
例えばパスワードが[4文字以上]で単語[the]に数字を組み合わせる場合には最小文字数でもtheの前後どちらかに10種類の数字が入りますし、パスワードが4~10文字なら片側だけで1000000通りの組み合わせが発生します。

よって、一般的には文字と数字を混在した方が解析されにくくなると言われています。


もちろんですが、入力できる文字・数字・記号の組み合わせを総当たりで試されればどんなパスワードもいずれは解析されます。
こうした攻撃の対策としては、トラフィックやリクエストを監視し、異常なログイン要求があれば警告するなどの別のセキュリティ対策が必要となります。
    • good
    • 0
この回答へのお礼

純粋なパターン数の減少よりも、辞書アタックによるヒット確率を下げる方が有効だということですかね。

回答ありがとうございました。

お礼日時:2008/10/10 15:56

単純に計算してみました。


計算が間違っていたらごめんなさい
(単純かするため大文字小文字の区別無し)

n桁のパスワードとする場合では、
数字のみの場合の組み合わせは10^n (4桁なら10000通り)
英字のみの場合の組み合わせは26^n (4桁なら456976通り)
混在する場合の組み合わせは36^n (4桁なら1679616通り)

4桁で混在必須とするなら
1679616-10000-456976 = 1212640通りとなるようです。
これなら混在必須とする方が組み合わせは多くなります。

詳しい人がいましたら補足して下さい。
    • good
    • 0
この回答へのお礼

混在必須の場合はそれぞれのパターン数を差し引けばいい訳ですね。

> これなら混在必須とする方が組み合わせは多くなります。

「少なくなる」の間違い?

お礼日時:2008/10/10 13:46

#2さんの通りですが、ご質問は[混在可]よりも[混在必須]の方がパターン数が少ないのではないかということでしょうか?



その通りです。
2文字の例だと260パターンしかありません。

でもパスワードは基本的に記憶すべきもので、人は英単語、名前、日付、電話番号を使ってしまいがちです。
システムでそれが推測しやすいパスワードなのかを判定するのは難しく、例えば子供の名前を使った場合、正確にはその人の家族構成が分かっていないと出来ません。

パターン数を犠牲にしても混在必須の方が、推測されにくいものになるという訳です。

勿論、最低入力文字数を多くすれば、パターン数は確保出来ますので。
    • good
    • 0
この回答へのお礼

> ご質問は[混在可]よりも[混在必須]の方がパターン数が少ないのではないかということでしょうか?

はい、そうです。
(やっぱり質問の文章が分かりにくかったでしょうか・・・;;)

> パターン数を犠牲にしても混在必須の方が、推測されにくいものになるという訳です。

やはりそういう意図があるんですかね。
プログラム解析するなら単純にパターン数が多い方が良い気もしますが、考えてみたらこの程度の差なら解析に掛かる時間にもそう大差出ないかもしれませんね。(^^;)

お礼日時:2008/10/10 13:43

いや、パターン数は混在の方が多くなりますよ。


単純に2文字だとしますね。
数字だけだと10(0~9)×10=100(パターン)
英字だけだと26(A~Z)×26=676(パターン)
英数混在だと36(0~9およびA~Z)×36=1296(パターン)
となります。

この回答への補足

それは分かっています。
質問の文章が悪かったでしょうか。

補足日時:2008/10/10 13:38
    • good
    • 0

文字数が増えればその組み合わせは増えます。


aとbの2文字の組み合わせは、ab ba
a、b、cの3文字だと、abc acb bac bca cab cba
a、b、c、dの4文字だと、abcd abdc acbd acdb adbc adcb bacd badc bcad bcda bdac bdca cabd cadb・・・・・
この様に文字が一文字増えるだけで、組み合わせが増えていきます。
アルファベット26文字に数字の10文字を加えれば、当然パターンは多くなります。

また、パスワードを解析するソフトがあります。
簡単な組み合わせだと解析されてしまう恐れがあるのです。

この回答への補足

それは分かっています。
質問の文章が悪かったでしょうか。

補足日時:2008/10/10 13:36
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英数キーで「半角英数」にする方法(初心者です)

「ひらがな」で入力していて、「半角英数」に変えたい時、英数キーを押すと、「全角英数」になります。

次に半角/全角キーを押すと「半角英数」になりますが、

二度キーを押すのが面倒なので、英数キーを押した時に「半角英数」にする方法はありますか?

(OSはWindows XPです)

Aベストアンサー

>また具体的なIMEの設定方法を教えていただければ、有難いのですが。

 私はXPでないので多少異なるかもしれませんが、IMEのプロパティを開いて

[全般]タブ → [詳細設定] → [キー設定] → [英数]キーの入力状態を選択 → [変更] → [半角英数] → [OK]

 です。
 入力状態と動作については希望する動作になるように、自分で試して見てください。

Q正規表現 英数字を1つ以上含む文字列

ASP.NET(VB)での入力チェックのために、

半角英数字「0~9」「a~z」「A~Z」と、ハイフン「-」からなる文字列
(ただし、半角英数字「0~9」「a~z」「A~Z」はそれぞれ少なくとも1個ずつ含む)

の正規表現での表し方が知りたいです。


 How To: ASP.NET への入力を制約するために正規表現を使用する方法
 http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000001.aspx

 (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$
 8から10文字で、最低1文字の数字と1文字の英字を使用し、特殊文字を使用してはいけません。


上記を参考に、
(?!^[0-9]*$)(?!^[a-z]*$)(?!^[A-Z]*$)^([a-zA-Z0-9])$
こんな感じかなぁと試してみたのですが、ダメでした。
そもそも「!」の意味が分かりません。否定でしょうか??

ASP.NET(VB)での入力チェックのために、

半角英数字「0~9」「a~z」「A~Z」と、ハイフン「-」からなる文字列
(ただし、半角英数字「0~9」「a~z」「A~Z」はそれぞれ少なくとも1個ずつ含む)

の正規表現での表し方が知りたいです。


 How To: ASP.NET への入力を制約するために正規表現を使用する方法
 http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000001.aspx

 (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$
 8から10文字で、最低1文字の数字と1文...続きを読む

Aベストアンサー

 (?!^[^0-9]*$)(?!^[^a-z]*$)(?!^[^A-Z]*$)^([a-zA-Z0-9-]+)$
でどう?試してないけど…。

でも、無理して1つの正規表現で表さなくても、
「0~9」が含まれているかどうか、「a~z」が・・・
と一つ一つチェックしても良いのでは?

> そもそも「!」の意味が分かりません。否定でしょうか??
 (?!regexp)
で否定先読みを意味します。
http://www.kt.rim.or.jp/~kbk/regex/regex.html#NEGATIVELOOKAHEAD

なお^は括弧内でも行頭の意味です。
(ANo.1は[^abc]との混同?)


人気Q&Aランキング