辞書攻撃だったとしても、2048通りしか載っていない辞書で攻撃されるというのは普通はありえないでしょう。英語漬け.com [eigo-duke.com]の単語表なんかでも John Smith すら載っていませんからね。8192単語の辞書で攻撃するなら 13bit、大文字か小文字かの2通り試すだけで +1bit、単語の後ろにスペースをつけるかつけないかで +1bit です。先頭のみ大文字とか区切りがスペース以外にピリオドだの疑問符だのハイフンだのを考慮すると、もっともっとです。1語あたりでこれですから、3単語だと、まあまあ強力です。
個人的には、辞書に載っていない語を1つ組み合わせることを勧めています。Can You Celebrate? が好きなら cyc? とかと更に2語ほど。単語間を適当な文字でつなぐとなおよし。
単語の連続のほうが強力なのはホント (スコア:2)
https://xkcd.com/936/ [xkcd.com] と https://www.explainxkcd.com/wiki/index.php/936:_Password_Strength [explainxkcd.com] 参照。
例えば英数記号8文字、つまりchar[8]なパスワードであれば64bit = 1.84*1019通り、まあ実際は28bit = 2.7x108程度の情報量があります(\aとか\bとか\nとか使えないし、単語もじってる場合が多いし、等々)。これに対して"頻出英単語2048"のような本を買ってきて全部文字起こしして、その中から例えば"Correct Horse Battery Staple"のように、ちゃんとした乱数でランダムに4単語を選べば、情報量は少なくとも20484 = 1.8x1013となり、先の2.7x108を超えます。
"Correct Horse Battery Staple"はスペースを除いて25文字なので、単純なブルートフォースでは平均258/2回で割れます。単語帳アタックに対してはより脆弱ですが、頻出英単語2048から乱数で4単語選んでいるわけですから、1013回単位でガチャを引いて1/2048を4連で当てないと割れません。なのでちゃんとした乱数で4単語以上を選んでいる限りは英数記号より覚えやすい割に強力なのです。これと似た考え方は仮想通貨ウォレットの復元用のひみつの呪文でも取り入れられていて、例えば"among laundry cruise want ..."とか16単語くらいの羅列を表示してメモらせる方法が広く使われています。
……ではこの1)と2)は本当に2)が強力なのかというとですね、まず単語をランダムで選んでないし、単語数が足りていなくて……いわゆる"Correct Horse Battery Staple"法はランダム生成4単語だから20484の強度が期待できるわけですが、3単語だと11bit(1.5文字……)にしかなりません。そこから更に英文として成立しているという縛りが入るので……えーっと……
Correct Horse Battery Staple法にはジェネレーター [correcthor...staple.net]も複数あるので、使ってみたい人は適当なやつを選んで機械生成するのがおすすめです。くれぐれも、文章として成立する英文を頭で考えて打ち込んだり、単語数を4未満に減らしたりしてはいけません。完全にランダムに選ばれた4単語以上だからこそ、組み合わせがちゃんと爆発して、覚えやすい割に総当たりでも辞書でもAIでもどう絞り込まれても強度が確保できる、という理屈なので。長い分には好きにすればよろしい。
Re:単語の連続のほうが強力なのはホント (スコア:2)
例えば英数記号8文字、つまりchar[8]なパスワードであれば64bit = 1.84*1019通り、まあ実際は28bit = 2.7x108程度の情報量があります(\aとか\bとか\nとか使えないし、単語もじってる場合が多いし、等々)。
これに対して"頻出英単語2048"のような本を買ってきて全部文字起こしして、その中から例えば"Correct Horse Battery Staple"のように、ちゃんとした乱数でランダムに4単語を選べば、
どうして文字を選ぶときはランダムではないと仮定するのかがわかりません。条件を揃えない理由はなんでしょうか。
ランダムな場合、英数記号8文字で 8bit という時点でちょっと。英数字62文字、記号が32文字程度。約6.55bit×8文字=52.4bit ぐらい。「まあ実際は28bit」とは全然違います。
28bit というと、1文字 3.5bit つまり 12文字種未満です。数字と記号2種(+-とか)よりも小さいわけで、アルファベット小文字のみよりもはるかに小さいです。英数記号としているのに、これはないでしょう。
3単語だと11bit(1.5文字……)にしかなりません。
2048通りの単語は1語で 211、つまり 11bit あるのでは? 3単語なら 33bit、「まあ実際は28bit」を上回っています。
そもそも、攻撃者が試行しなければならない回数を基準に考えるべきでしょう。
まず総当たり法だったら短い方か攻撃者が考えるありそうな長さから攻撃するのでパスワードが長い方が絶対的に有利です。
辞書攻撃だったとしても、2048通りしか載っていない辞書で攻撃されるというのは普通はありえないでしょう。英語漬け.com [eigo-duke.com]の単語表なんかでも John Smith すら載っていませんからね。8192単語の辞書で攻撃するなら 13bit、大文字か小文字かの2通り試すだけで +1bit、単語の後ろにスペースをつけるかつけないかで +1bit です。先頭のみ大文字とか区切りがスペース以外にピリオドだの疑問符だのハイフンだのを考慮すると、もっともっとです。1語あたりでこれですから、3単語だと、まあまあ強力です。
個人的には、辞書に載っていない語を1つ組み合わせることを勧めています。Can You Celebrate? が好きなら cyc? とかと更に2語ほど。単語間を適当な文字でつなぐとなおよし。
Re: (スコア:0)
どうして文字を選ぶときはランダムではないと仮定するのかがわかりません。条件を揃えない理由はなんでしょうか。
8ビット8桁で総当たりって計算なんちゃう?知らんけど
Re: (スコア:0)
えっと、1.の方は11文字、
2.のほうは3単語と例えの前提と違うのですが、、、
前提を変えて良いのであれば、
パスワードに制限があって、例えば大小英数字記号が求められるとか、最長15文字とかがあると2は採用できない。
パスワードマネージャーを使用して良いのなら、覚えやすさは考慮しなくて良いから同じ文字数なら1のほうが強力になる(別に2を採用しても十分に強力にはできるけど)。
・あなたが覚えないといけない
・文字数は任意
・記号数字入力必須といった制限無し
という前提があれば2の方法は有用かもしれないげど、
上記の前提は別に当たり前ではないから答えようはないのでは?
Re:単語の連続のほうが強力なのはホント (スコア:2)
そう、例えの前提は明らかにCorrect Horse Battery Staple法をすごく低解像度で理解して雑に再実装してエンバグしているんです。だから信じられないアホと言われている。
Re: (スコア:0)
実際に検証してみろよ
Re: (スコア:0)
ちょい足しで。単語単位で辞書ファイルからデータを取り出し、メモリに送り、ハッシュ計算をするのは、文字単位でやるよりもはるかに計算負荷が高くなる。特にGPUを使う総当たり法はとにかく速度に全振りで、文字列生成はインクリメントでメモリへのロードなんて発生しないし文字列長も固定でループもそれに最適化されている。辞書攻撃はファイル読み出しメモリ転送がいちいち発生して速度はがたっと落ちる。100分の1もいかないんじゃないかな。計算量の点からみても単語をランダムに組み合わせた方がよい。