パスワードを忘れた? アカウント作成
11982963 story
暗号

NSAでも破れないが、覚えやすいパスフレーズ 70

ストーリー by headless
記憶 部門より
いくら推測が難しいと思われるパスフレーズを考えても、1秒間に1兆回の試行が可能なコンピューターを使われれば簡単に破られてしまう。The Interceptでは、比較的容易に覚えられ、推測の困難なパスフレーズを生成する「Diceware」という方法をMicah Lee氏が紹介している(The Interceptの記事本家/.)。

ランダムなパスフレーズを考える場合にも、関連する単語を組み合わせてしまったり、文法に従った語順に並べてしまったりと、人間はどうしてもパターンから逃れることはできないのだという。歌詞や名言、慣用句などを元にした場合、大文字小文字を取り混ぜたり、記号を挟んだりしてもランダムなパスフレーズよりも弱くなる。既存の単語を使わずに、完全にランダムな文字と記号を組み合わせてしまうと覚えるのが難しくなってしまう。

Dicewareでは7,776個の英単語によるリスト(PDF)を使用してパスフレーズを生成する。各単語には各桁が1~6の数字で構成された5桁の数が割り当てられており、サイコロを5回振って出た目の数により単語を選択していく。使用する単語がわかっているので1回目の試行で破られてしまう可能性もあるものの、5つの単語を使用した場合にはおよそ2,800京通りの組み合わせがあるため、平均では1,400京回の試行が必要となる。2013年にエドワード・スノーデン氏が警告したような1秒間に1兆回の試行が可能なコンピューターを使用すれば平均で6か月以内に破られてしまうが、6つの単語を使用すれば平均3,505年、7つの単語では平均2,700万年かかる計算となる。コンピューターの性能が向上すればもっと短時間で破られることになるが、7つの単語なら当面は安全と考えられるとのこと。

(続く...)
パスフレーズを生成したら覚える必要がある。記事では覚えるまではパスフレーズを書いた紙を持ち歩き、なるべく見ないで入力することを推奨している。どうしても思い出せない時だけ取り出して見るようにし、日に数回入力していれば、覚えてしまうまでに2~3日もかからないとのこと。パスフレーズを完全に記憶したら、その紙を破棄すればいい。

The Interceptではオープンソースの内部告発システム「SecureDrop」を運営している。SecureDropでは匿名での告発を受け付けるため、Dicewareの手法を利用して告発者に7つの単語を組み合わせたコードネームを割り当てているという。ただし、SecureDropではDicewareのリストから不快感を与えるような単語を除去した6,800語のみを使用しているとのこと。シンプルでランダムなパスフレーズは次の内部告発者がノートパソコンに保存したデータを守るためにも使用できるが、一般市民までもがこのように高いレベルの保護を必要とする世界に住んでいることを残念に思う、とLee氏はまとめている。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2015年03月29日 17時55分 (#2786901)

    ' or 1 = 1 --

  • パスフレーズの強度を計算してみました。

    英単語リストから5個 : 7,776^5 =             28,430,288,029,929,701,376 (通り)
    英単語リストから6個 : 7,776^6 =        221,073,919,720,733,357,899,776 (通り)
    英単語リストから7個 : 7,776^7 =  1,719,070,799,748,422,591,028,658,176 (通り)

    ランダムな英数字8桁 : 62^8    =                    218,340,105,584,896 (通り)
    ランダムな英数字9桁 : 62^9    =                 13,537,086,546,263,552 (通り)
    ランダムな英数字10桁: 62^10   =                839,299,365,868,340,224 (通り)
    ランダムな英数字11桁: 62^11   =             52,036,560,683,837,093,888 (通り)
    ランダムな英数字12桁: 62^12   =          3,226,266,762,397,899,821,056 (通り)
    ランダムな英数字13桁: 62^13   =        200,028,539,268,669,788,905,472 (通り)
    ランダムな英数字14桁: 62^14   =     12,401,769,434,657,526,912,139,264 (通り)
    ランダムな英数字15桁: 62^15   =    768,909,704,948,766,668,552,634,368 (通り)
    ランダムな英数字16桁: 62^16   = 47,672,401,706,823,533,450,263,330,816 (通り)

    強度的には、

    (ランダムな英数字16桁) > (英単語リストから7個選ぶ場合) > (ランダムな英数字15桁)

    となるようなので、英単語リストから7個選ぶ場合と、ランダムな英数字16桁で、覚えやすさ・入力しやすさを比較してみます。

    英単語リストから7個  : jed-amber-creon-petal-jure-ant-aaron

    ランダムな英数字16桁 : n7Hb-9tBi-fcAS-b5Fd

    ※ハイフンは可読性を高めるために入れています。

    確かに、「ランダムな英数字16桁」よりも「英単語リストから7個」の方が覚えやすいような気がします。これは、既に暗記している英単語であれば組み合わせと順番を覚えるだけで良いからでしょう。

    でも、母国語が日本語であればもっと良い方法があります。日本語の単語(ネットスラング・固有名詞等を含む)を5個含む文をローマ字打ちすれば良いのです。

    「スラドのプリなんとかのちょうぶんうぜぇ」→「suradonopurinanntokanotyoubunnuzele」

    ランダムな英字35桁相当: 26^35 = 2.9552044145476812446587076597905e+54 (通り)

    これを、総当たりでクラックするのは、英単語リストから7個・ランダムな英数字16桁とはくらべものにならない程の強度ですから、絶対不可能です。

    辞書アタックするとしますと、助詞は数が少ないですから除いたとしても、「スラド」「プリ」「なんとか」「ちょうぶん」「うぜぇ」の組み合わせを試さなくてはなりません。

    「スラド」「うぜぇ」クラスの特殊単語が載っている辞書を作る(ネット上から単語を自動収集するのがてっとり早い?)となると、掲載単語が少なく見積もっても30万語は必要ですから、

    日本語単語(30万語)リストから5個
    300,000^5 = 2,430,000,000,000,000,000,000,000,000

    と、英単語リストから7個を上回ることになります。実際にはこれに更に助詞などが加わりますから、更に安全です。

    ということで、日本語フレーズのローマ字打ちの方が、安全で、覚えやすく、打ちやすい(数秒で打てる)ですから、そっちをお勧めします。

    上記のフレーズ、例えば「suradonopurinanntokanotyoubunnuzele(スラドのプリなんとかのちょうぶんうぜぇ)」で十分安全ですが、これでも辞書攻撃が心配な場合には、Google検索にかからないようなランダムな平仮名4文字 例えば 「ぽたにい」 [google.co.jp] (potanii) を入れたら、辞書攻撃は100%不可能となります。

    例: 「スラドのプリなんとかのちょうぶんうぜぇぽたにい」→「suradonopurinanntokanotyoubunnuzelepotanii」
    ランダムな英字43桁相当: 26^43 = 6.9799765368162422403982697322696e+60 (通り)

    • 記事の方法の重要な所は、思いついた単語を使うことではなく、人間の発想による偏りが排除されていることを乱数生成で担保しつつ、覚えやすい単語リストを使う、という点です。

      「20の質問」系の推論ソフトウェアが数問でほとんど正答できてしまうように、人間が思いつく事柄は酷く偏っているため、(リストを用意せず)単に思いついた単語を組み合わせるような方法だと、よく使われる危険な組み合わせになっている可能性があります。それが必ずしも危険というわけではないですが、どの程度安全であるか評価することができないか困難です。
      実際に日本語30万語のリストを作った上で、そこからランダムに選べば強度を評価することできます。単語リストを作るのは便利だからではなく、安全性を保証するためです。

      親コメント
      • by Anonymous Coward

        「20の質問」系のソフトウェアは、それはそれで各種データベースとのマッチングを行うわけで、処理コストが辞書攻撃と比べたら膨大だからなぁ
        そういった質問による類推がある程度可能だとしても、総当たりに近い形で(≒単語の相関関係を考慮しながら)辞書攻撃を行うのって、何も考えずに辞書攻撃を行うことより遙かに難易度高いことを考えれば、十分に安全が確保されてると思うよ

        # そもそも「20の質問」みたいなのはある程度、正解の範囲を絞るから成り立つのであって、全ての単語を網羅的に相関関係を作るような真似は当分できないと思う

    • by Anonymous Coward on 2015年03月29日 19時49分 (#2786955)

      *パスワード(半角英数8~12文字)
      というWebサービスのなんと多いことか。

      親コメント
      • by Anonymous Coward

        入力をマスクして横から見られないようにするのが基本である以上、
        日本語入力をパスワードにするのは、不可能ではないが難しい。
        最近では記号入力がOKなのが多い
        そのへんがおとしどころじゃないだろうか

    • > ランダムな英字43桁相当: 26^

      ローマ字な文章だと使っている文字がアルファベット全域より少ない気がするけど、影響は計算していない
      適宜大文字を混ぜればいいでしょうか?

      親コメント
      • ローマ字入力では使うことがありますが、「q」と「x」は除外できるでしょう。「v」も使用頻度は低いですね。また、日本語に限らず単語をベースにした場合は言語ごとに文字の並び方のパターンがあるので、完全なランダムよりも組み合わせは少なくなります。たとえば日本語のローマ字表記なら「w」の次に来る文字は「a」「o」しかなく、「ん」を「nn」と入力する場合でも子音字が4文字以上連続することはないですよね。
        親コメント
        • あらかじめ何らかのルールでパスワードが生成されていることを知っていれば、ね。英語でもqの次は必ずuが来るとか文字の使用頻度に少なからずかたよりがあります。でも攻撃側はそんなことにおかまいなく利用できる文字を全種類試すのが普通なので問題無いと思います
          親コメント
          • Dicewareで生成したパスフレーズの強度というのも、Dicewareを使用していることを攻撃者が知っているという条件付きですよ。そういう条件がなく、攻撃者がすべての文字を総当たりするなら強度はもっと高くなりますね。また、これだけの強度が必要とされるのはローカルでクラックを試行できる場合の話です。つまり、自分のパソコンや暗号化したデータなどが攻撃者の手に渡っているわけで、自分自身に関する情報も知られていることが想定されます。そう考えると、まったくランダムに総当たりするのではなく、持ち主が選びそうな何らかのルールを使った組み合わせから試していくのではないでしょうか。
            親コメント
      • by Anonymous Coward

        みかか打ちを使いましょう。記号や数字を意識しなくても使えます。

        #ただし、非JIS配列のキーボードだと泣きが入る。実際に入力している文字列を覚えているわけではないから、記号の位置が違うと、入力が困難。

    • ローマ字の表記には揺れがあるので面倒なことになるのでは?
      //hiromとhailomのどちらが正しいのかという簡単なことすら覚えられない私には厳しい
      //唱えよ友よそして入れ

      親コメント
    • 私もこの方法でパスワード使用しています。
      ただ、これが使えるのは、ある程度キーボード入力に慣れた人だけですね。
      数回入力に失敗するとロックされるサービスも多いので、数十文字を間違えずに入力できる人でなければならない。
      スラド基準ならいいのですが、文字を入力するのに、キーボードと画面を何度も往復して見るような人の割合は相当に多い。
      こういう人は、4文字とか8文字ぐらいでないと、間違えずに入力することが難しいのです。

      親コメント
    • ランダムな英字35桁相当: 26^35 = 2.9552044145476812446587076597905e+54 (通り)

      これだと36^35ですね。

      親コメント
    • やってることは「7776進数、5ケタ~7ケタ」。いち、にー、さん...でー、いー、えふ といった数詞が7776個あるだけ。そういう「5ケタ」の乱数を作って覚えましょ、というだけ。

      親コメント
    • by Anonymous Coward

      この記事の提案は、人間が恣意的に選んだフレーズは偏りが生じて探索空間数ほどの性能が出ないからサイコロで単語を選ぼう的な感じです。

      主観ですけど、同等の長さをもったパスフレーズの場合、
      A.従来型パスワードやスラングと機械選択した英語パスフレーズ>
      B.従来型パスワードやスラングを活用した英語パスフレーズ>
      C.語彙に乏しい機械選択した英語パスフレーズ(記事のアルゴリズム)>
      D.語彙に乏しい英語パスフレーズ
      みたいな順番の強度になると思ってます。で、日本語ローマ字は別系統になった上で数倍強い感じ。
      # スラング込みの日本語は英語に比べて語彙数が跳ねるのでそ

      • by Anonymous Coward

        日本語の攻撃用辞書は実在しているから、攻撃対象が日本人であることが分かっている場合、その辞書を使えばいいわけだから、ローマ字だから英単語よりも安全なんてことはないですね。

        日本語ローマ字対応はろくにしてないだろうし。

        クラッカーて、欧米人だけじゃなくて、中国人もいるんだからさ。「日本語だから」ってのは、気休めでレかなぃよ。

    • by Anonymous Coward

      日本のシステムなんかはパスワードを半角英数限定じゃなくてカナかな漢字もOKにすればいいのに
      合言葉なんてアホな仕組みつける前にさ

      • by Anonymous Coward

        そして中国へ送信されると。

  • NSAが確保できる演算能力を、2014年にスパコンのランキングGraph500で1位を獲得を取得した、日本の理化学研究所の「京」1式丸ごとと同じレベルと仮定して計算してみます。GPU での演算は試算が難しいので、今回は考えないものとします(もっとも、こういった分野にはGPUが使われるのでほんとはそっちで計算すべきかもしれませんが、データがすぐには入手できませんでした)。

    「京」は、浮動小数点数演算を1秒あたり1京回おこなう処理能力(10ペタFLOPS)を持ちます。これに対して一般家庭で普通に購入できるレベルのコンピュータのCPUだと、Core i7 (Haswell) 8コア 3.0GHz で 384 GFLOPS です。つまり、性能差は 約 26,040 倍ということになります。

    HDD の暗号化や Evernote のノートの暗号化を想定して、複合に必要な時間(パスフレーズを入力してから復号処理のために待たされる時間として許容できる時間)を3秒間とします。この時間が3秒間になるように、パソコンやスマホのスペックに合わせて、パスフレーズをソルト付きHMACハッシュ関数を通る回数を自動的に変更する仕組みにすれば良いと思います。勿論、時間がかかっても強度をあげたい人のために、手動で設定変更もできるようにしときます。

    さて、さっき例に出したCore i7 (Haswell) 8コア 3.0GHz で 3秒間かかる処理の場合、「京」だと1秒間で8,680回行える訳です。「京」ならば、1分間で520,800回、1時間で31,248,000回、1日で749,952,000回、1年で273,732,480,000回、100年で27,373,248,000,000回、パスフレーズの試行ができることになります。

    ランダムな英数字7桁のパスワードの場合 3,521,614,606,208 通りですから、これだと平均6年程度で解読されてしまいます。しかし、ランダムな英数字8桁のパスワードならば、218,340,105,584,896 通りになりますから、平均で400年ぐらいの解読時間がかかることになります。

    ということで、正しいアルゴリズムで実装すれば、8桁のランダムな英数字のパスワードでも十分安全だし、低スペックな端末を考慮してHMACハッシュ関数を通す回数を減らす場合や、コンピュータの性能の向上を考慮しても10桁~12桁のランダムな英数字のパスワードで大丈夫なことが分かります。

    もっとも、現実には、パスフレーズをそのままAESの秘密鍵として用いるようなゴミ屑のような実装が平気で行われているのが現状です。セキュリティの高さを売りにしているシステムであっても、MD5、SHA、SHA1といった高速ハッシュアルゴリズムを数千回通して満足しているような酷い実装がまかり通っています。そういった糞みたいな実装をするから、1秒間に1兆回試行できてしまうんです。正しくは、ソルト付きHMACハッシュ関数を用いるべきです。

    Evernoteも、2014年2月までは、ユーザが指定したパスフレーズからなる鍵長 64bitのRC2暗号といった脆弱な暗号化アルゴリズムが使われていました。しかし、私がさんざんクレームを付けておいた甲斐もあって(?)、ユーザのパスフレーズをHMAC/SHA-256ハッシュ関数に50,000回通したものが AES キーとして利用されるように改善された [evernote.com]ようです。ということで、脆弱な暗号を採用しているシステムに対しては、みんなで苦情を送るのが良いかもしれません(暗号化アルゴリズムが非公開なのは論外です)。なお、既に暗号化したノートは、暗号化をやり直さないと脆弱なままなので注意が必要です。(ちなみに、Evernote社は、画像検索がまともにできないバグ [srad.jp]などを、確実に再現する方法を書いて報告しても直さず放置することからあまり好きではありません)

    なお、HDDの暗号化で有名なTrueCryptは、ユーザーが入力したパスフレーズを、きちんとソルト付HMACである、HMAC-RIPEMD-160(2000回)、HMAC-SHA-512(1000回)、HMAC-Whirlpool(1000回) に、カッコ書きで書いた回数通してから、鍵として使う仕組みになっています。

  • by ich84 (33072) on 2015年03月30日 10時00分 (#2787193)

    UTF-8の文字が全て使えるようにするだけで、暗号強度めちゃくちゃ上がると思うんですが、
    なぜ半角英数記号以外を弾いているんでしょうか。

    どうせWebページもDBもUTF-8で動いているのに

    • by Anonymous Coward on 2015年03月30日 10時22分 (#2787215)

      ユニコードの表記揺れは正規化してもまだ足りない(空白文字や記号のバリエーションまでは正規化されない)し、IMEが全部覗き見する前提が必須になる上に、画面上で変換状態を表示するためショルダーハッキングにも弱くなります。

      探索空間は確実に広がるとしても代償のリスクが読み切れないのが不安な方法ですね。

      親コメント
  • by iwakuralain (33086) on 2015年03月30日 10時30分 (#2787223)

    複雑なパスワードを付箋紙に書いて貼っておくということですかね

  • by Anonymous Coward on 2015年03月29日 19時03分 (#2786929)

    御大層な名前ついてますけどランダムな文字列の代わりにランダムな単語列を返すパスワード・パスフレーズジェネレータですよね。
    文字単位の総当たり攻撃に対する辞書使った総当たり攻撃みたいなもの。
    辞書使った総当たりで人間の単語選択率まで考慮ってそこまでメジャーじゃないだろうし、
    そこまで考慮するなら完全に辞書制になどしないで長い単語列+パスワード的な文字列の方が辞書耐性高くない?

    というかそもそも、長いパスワード(パスフレーズ)を受け入れない糞システムを破壊し尽くすほうが先決だと思う。
    パスフレーズを打ち込むとそのハッシュのBASE64文字列に変換するキーボードとかでも用意するかね?

  • by Anonymous Coward on 2015年03月29日 18時24分 (#2786910)

    いくらパスワードかけても
    そもそも告発サイト内に裏切り者がいれば同じことだろ?
    キリスト教だってユダが裏切ってイエスが磔になっても復活つーか、まあ、実際どうっだったにせよパウロが改心すればオールOKだろ?
    漫画版の悪魔くん千年王国もそんな感じだっただろ?
    初めから裏切りや情報流出を織り込んで計画立てればいいだけの話
    告発者をどうやって守るか
    どうやって真偽を確認するか
    あまり細かく調べようとするとそこから告発者の素性がバレるし
    結局誰かが犠牲になり
    その犠牲を無駄にしないことしか無いのかなあ

    • by Anonymous Coward

      そうですよね
      ACにパスワードかけられたら
      困っちゃうもの!

      # 犠牲はダチョウメソッドで!

    • by Anonymous Coward

      らせん階段 カブト虫 廃墟の街」 イチジクのタルト カブト虫 ドロローサへの道 カブト虫 特異点 ジョット 天使 紫陽花 カブト虫 特異点 秘密の皇帝

    • by Anonymous Coward

      どこを縦読み?

  • by Anonymous Coward on 2015年03月29日 22時05分 (#2787027)

    換字式でパスワードを作る時代は終わった
    適当なキーワードとパスワードをくっつけてハッシュ化
    これ最強

    • by Anonymous Coward

      例外が多すぎて使い物にならない

  • by Anonymous Coward on 2015年03月29日 22時41分 (#2787053)

    マルチバイト最強伝説

  • by Anonymous Coward on 2015年03月29日 22時55分 (#2787056)

    webサービスだと、普段はcookieを食べさせて、どうしてもログインし直したい時は、常にパスワード忘れたでメールリマインダーを経由して、パスワードは使い捨てにするとか、
    アプリケーションで、パスワードを入れなければいけない時は、とあるオープンソースのプログラムのverXXのfoo.cのN行目をコピペで使うとかすればいいと思う。

    最大の敵は、パスワードの文字列制限と、文字種類制限だな。
    パスワードが長すぎる、利用できない文字がある、数字を含めてくださいなどの愚かなソフトウェアをどうフォローするかだな。
    パスワードに制限を課すソフトウェアは、規制を満たすための妥協で、zzaaqq11などの安易なパスワードを産むだけだから、セキュリティを逆に下げるだけなのにな。

    それと、パスワードにマルチバイトが使えるようになるともっと便利になると思う。絵文字やキリル文字とか使いたい。

    • by Anonymous Coward

      あらゆるバイナリ列をパスワードに使えるようにするのだってそう難しくないと思うんですけどね。何で出来るようにしないんでしょうね。

  • by Anonymous Coward on 2015年03月29日 23時25分 (#2787074)

    1503s/lashd.ot
    とかな感じでやってる。(なるべく音節で区切っちゃダメよ、それに数字の位置は単なる例示)
    これで辞書攻撃にはかからない。
    あとは
    7776^5=28,430,288,029,929,701,376
    7776^6=221,073,919,720,733,357,899,776
    に対して、小英文字26数字10記号23で59種を使うとして(大文字はミスしやすいので俺はパス)
    上の例でパスワード長14文字もあれば
    59^14=6,193,386,212,891,813,387,462,761

    0,221,073,919,720,733,357,899,776
    に対して
    6,193,386,212,891,813,387,462,761
    と30倍近く安全。

    と考えて使ってるんだけど、俺の考えって間違ってるのかな?

    • by Anonymous Coward

      まあ、Windowsのログインだけで、サイトは皆lastpass使ってる。流出怖ひ・・・

typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...