
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つの単語なら当面は安全と考えられるとのこと。
(続く...)
ランダムなパスフレーズを考える場合にも、関連する単語を組み合わせてしまったり、文法に従った語順に並べてしまったりと、人間はどうしてもパターンから逃れることはできないのだという。歌詞や名言、慣用句などを元にした場合、大文字小文字を取り混ぜたり、記号を挟んだりしてもランダムなパスフレーズよりも弱くなる。既存の単語を使わずに、完全にランダムな文字と記号を組み合わせてしまうと覚えるのが難しくなってしまう。
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氏はまとめている。
The Interceptではオープンソースの内部告発システム「SecureDrop」を運営している。SecureDropでは匿名での告発を受け付けるため、Dicewareの手法を利用して告発者に7つの単語を組み合わせたコードネームを割り当てているという。ただし、SecureDropではDicewareのリストから不快感を与えるような単語を除去した6,800語のみを使用しているとのこと。シンプルでランダムなパスフレーズは次の内部告発者がノートパソコンに保存したデータを守るためにも使用できるが、一般市民までもがこのように高いレベルの保護を必要とする世界に住んでいることを残念に思う、とLee氏はまとめている。
破れない訳ではないが、試すのを躊躇するようなパスワード (スコア:5, 興味深い)
' or 1 = 1 --
Re:破れない訳ではないが、試すのを躊躇するようなパスワード (スコア:1)
インジェクション成功したら二重の意味で怖いですね
不正アクセス禁止法とそんなヘボなシステム使うことと
# マスコミ [srad.jp]とセキュリティ企業 [srad.jp]は安心してアタックできますね!
Re: (スコア:0)
さらにパスワードそのままDBに格納してるとかな。
Re: (スコア:0)
すまん、意味が分からないんだが・・・
Re:破れない訳ではないが、試すのを躊躇するようなパスワード (スコア:4, 参考になる)
SQLインジェクションでぐぐるんだ
Re: (スコア:0)
毎回これを入力する方が勇気がいると思うんだ
Re: (スコア:0)
しかも攻撃する側はこのパスワードだろうがなんだろうが気にしないというw
Re: (スコア:0)
IDS/IPSに検知される危険があるから避けるんじゃない?
Re: (スコア:0)
これに慣れてしまうのが怖い
日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:5, 興味深い)
パスフレーズの強度を計算してみました。
強度的には、
(ランダムな英数字16桁) > (英単語リストから7個選ぶ場合) > (ランダムな英数字15桁)
となるようなので、英単語リストから7個選ぶ場合と、ランダムな英数字16桁で、覚えやすさ・入力しやすさを比較してみます。
確かに、「ランダムな英数字16桁」よりも「英単語リストから7個」の方が覚えやすいような気がします。これは、既に暗記している英単語であれば組み合わせと順番を覚えるだけで良いからでしょう。
でも、母国語が日本語であればもっと良い方法があります。日本語の単語(ネットスラング・固有名詞等を含む)を5個含む文をローマ字打ちすれば良いのです。
これを、総当たりでクラックするのは、英単語リストから7個・ランダムな英数字16桁とはくらべものにならない程の強度ですから、絶対不可能です。
辞書アタックするとしますと、助詞は数が少ないですから除いたとしても、「スラド」「プリ」「なんとか」「ちょうぶん」「うぜぇ」の組み合わせを試さなくてはなりません。
「スラド」「うぜぇ」クラスの特殊単語が載っている辞書を作る(ネット上から単語を自動収集するのがてっとり早い?)となると、掲載単語が少なく見積もっても30万語は必要ですから、
と、英単語リストから7個を上回ることになります。実際にはこれに更に助詞などが加わりますから、更に安全です。
ということで、日本語フレーズのローマ字打ちの方が、安全で、覚えやすく、打ちやすい(数秒で打てる)ですから、そっちをお勧めします。
上記のフレーズ、例えば「suradonopurinanntokanotyoubunnuzele(スラドのプリなんとかのちょうぶんうぜぇ)」で十分安全ですが、これでも辞書攻撃が心配な場合には、Google検索にかからないようなランダムな平仮名4文字 例えば 「ぽたにい」 [google.co.jp] (potanii) を入れたら、辞書攻撃は100%不可能となります。
リストからランダム選択することが重要 (スコア:4, 興味深い)
記事の方法の重要な所は、思いついた単語を使うことではなく、人間の発想による偏りが排除されていることを乱数生成で担保しつつ、覚えやすい単語リストを使う、という点です。
「20の質問」系の推論ソフトウェアが数問でほとんど正答できてしまうように、人間が思いつく事柄は酷く偏っているため、(リストを用意せず)単に思いついた単語を組み合わせるような方法だと、よく使われる危険な組み合わせになっている可能性があります。それが必ずしも危険というわけではないですが、どの程度安全であるか評価することができないか困難です。
実際に日本語30万語のリストを作った上で、そこからランダムに選べば強度を評価することできます。単語リストを作るのは便利だからではなく、安全性を保証するためです。
Re: (スコア:0)
「20の質問」系のソフトウェアは、それはそれで各種データベースとのマッチングを行うわけで、処理コストが辞書攻撃と比べたら膨大だからなぁ
そういった質問による類推がある程度可能だとしても、総当たりに近い形で(≒単語の相関関係を考慮しながら)辞書攻撃を行うのって、何も考えずに辞書攻撃を行うことより遙かに難易度高いことを考えれば、十分に安全が確保されてると思うよ
# そもそも「20の質問」みたいなのはある程度、正解の範囲を絞るから成り立つのであって、全ての単語を網羅的に相関関係を作るような真似は当分できないと思う
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:2, すばらしい洞察)
*パスワード(半角英数8~12文字)
というWebサービスのなんと多いことか。
Re: (スコア:0)
入力をマスクして横から見られないようにするのが基本である以上、
日本語入力をパスワードにするのは、不可能ではないが難しい。
最近では記号入力がOKなのが多い
そのへんがおとしどころじゃないだろうか
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:2)
> ランダムな英字43桁相当: 26^
ローマ字な文章だと使っている文字がアルファベット全域より少ない気がするけど、影響は計算していない
適宜大文字を混ぜればいいでしょうか?
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:2)
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
Re: (スコア:0)
みかか打ちを使いましょう。記号や数字を意識しなくても使えます。
#ただし、非JIS配列のキーボードだと泣きが入る。実際に入力している文字列を覚えているわけではないから、記号の位置が違うと、入力が困難。
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
ローマ字の表記には揺れがあるので面倒なことになるのでは?
//hiromとhailomのどちらが正しいのかという簡単なことすら覚えられない私には厳しい
//唱えよ友よそして入れ
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
それはパスワードが入口に堂々と書いてあった例でしょうが!
# ネタバレ
Re: (スコア:0)
打ち込む人間が表記ゆれしなければ問題ない。
多分、癖でそれなりに収束してるだろうから大丈夫じゃね?
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
私もこの方法でパスワード使用しています。
ただ、これが使えるのは、ある程度キーボード入力に慣れた人だけですね。
数回入力に失敗するとロックされるサービスも多いので、数十文字を間違えずに入力できる人でなければならない。
スラド基準ならいいのですが、文字を入力するのに、キーボードと画面を何度も往復して見るような人の割合は相当に多い。
こういう人は、4文字とか8文字ぐらいでないと、間違えずに入力することが難しいのです。
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
これだと36^35ですね。
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
やってることは「7776進数、5ケタ~7ケタ」。いち、にー、さん...でー、いー、えふ といった数詞が7776個あるだけ。そういう「5ケタ」の乱数を作って覚えましょ、というだけ。
Re: (スコア:0)
この記事の提案は、人間が恣意的に選んだフレーズは偏りが生じて探索空間数ほどの性能が出ないからサイコロで単語を選ぼう的な感じです。
主観ですけど、同等の長さをもったパスフレーズの場合、
A.従来型パスワードやスラングと機械選択した英語パスフレーズ>
B.従来型パスワードやスラングを活用した英語パスフレーズ>
C.語彙に乏しい機械選択した英語パスフレーズ(記事のアルゴリズム)>
D.語彙に乏しい英語パスフレーズ
みたいな順番の強度になると思ってます。で、日本語ローマ字は別系統になった上で数倍強い感じ。
# スラング込みの日本語は英語に比べて語彙数が跳ねるのでそ
Re: (スコア:0)
日本語の攻撃用辞書は実在しているから、攻撃対象が日本人であることが分かっている場合、その辞書を使えばいいわけだから、ローマ字だから英単語よりも安全なんてことはないですね。
クラッカーて、欧米人だけじゃなくて、中国人もいるんだからさ。「日本語だから」ってのは、気休めでレかなぃよ。
Re:日本語フレーズのローマ字打ちの方が、安全&覚えやすい&打ちやすい (スコア:1)
> 気休めでレかなぃよ
手書き入力が使える環境だとイラストパスワードというのもありでしょーか?
Re: (スコア:0)
日本のシステムなんかはパスワードを半角英数限定じゃなくてカナかな漢字もOKにすればいいのに
合言葉なんてアホな仕組みつける前にさ
Re: (スコア:0)
そして中国へ送信されると。
まともなアルゴリズムなら 「1秒間に1兆回」 ではなく 「1秒間に1万回」 しか試行できない (スコア:3)
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回) に、カッコ書きで書いた回数通してから、鍵として使う仕組みになっています。
全角文字 (スコア:2)
UTF-8の文字が全て使えるようにするだけで、暗号強度めちゃくちゃ上がると思うんですが、
なぜ半角英数記号以外を弾いているんでしょうか。
どうせWebページもDBもUTF-8で動いているのに
Re:全角文字 (スコア:1)
ユニコードの表記揺れは正規化してもまだ足りない(空白文字や記号のバリエーションまでは正規化されない)し、IMEが全部覗き見する前提が必須になる上に、画面上で変換状態を表示するためショルダーハッキングにも弱くなります。
探索空間は確実に広がるとしても代償のリスクが読み切れないのが不安な方法ですね。
やはり最強は (スコア:2)
複雑なパスワードを付箋紙に書いて貼っておくということですかね
ランダムな単語列を返すパスワードジェネレータ (スコア:1)
御大層な名前ついてますけどランダムな文字列の代わりにランダムな単語列を返すパスワード・パスフレーズジェネレータですよね。
文字単位の総当たり攻撃に対する辞書使った総当たり攻撃みたいなもの。
辞書使った総当たりで人間の単語選択率まで考慮ってそこまでメジャーじゃないだろうし、
そこまで考慮するなら完全に辞書制になどしないで長い単語列+パスワード的な文字列の方が辞書耐性高くない?
というかそもそも、長いパスワード(パスフレーズ)を受け入れない糞システムを破壊し尽くすほうが先決だと思う。
パスフレーズを打ち込むとそのハッシュのBASE64文字列に変換するキーボードとかでも用意するかね?
Re:ランダムな単語列を返すパスワードジェネレータ (スコア:1)
そうそう。
未だに、英数のみ8文字以内とかいい加減にしてくれ。
そろそろある程度以下のパスワードしか設定できないような金融機関や商業サイトには、何らかの罰則を設けるべきじゃないかね。
もうノーガードでええやん (スコア:0)
いくらパスワードかけても
そもそも告発サイト内に裏切り者がいれば同じことだろ?
キリスト教だってユダが裏切ってイエスが磔になっても復活つーか、まあ、実際どうっだったにせよパウロが改心すればオールOKだろ?
漫画版の悪魔くん千年王国もそんな感じだっただろ?
初めから裏切りや情報流出を織り込んで計画立てればいいだけの話
告発者をどうやって守るか
どうやって真偽を確認するか
あまり細かく調べようとするとそこから告発者の素性がバレるし
結局誰かが犠牲になり
その犠牲を無駄にしないことしか無いのかなあ
Re: (スコア:0)
そうですよね
ACにパスワードかけられたら
困っちゃうもの!
# 犠牲はダチョウメソッドで!
Re: (スコア:0)
らせん階段 カブト虫 廃墟の街」 イチジクのタルト カブト虫 ドロローサへの道 カブト虫 特異点 ジョット 天使 紫陽花 カブト虫 特異点 秘密の皇帝
Re: (スコア:0)
どこを縦読み?
ハッシュ化すればいい (スコア:0)
換字式でパスワードを作る時代は終わった
適当なキーワードとパスワードをくっつけてハッシュ化
これ最強
Re: (スコア:0)
例外が多すぎて使い物にならない
Re:ハッシュ化すればいい (スコア:1)
私はかれこれ10年ぐらい前からパスワードをハッシュ生成する方法 [srad.jp]を実践していますが、この方法で困るのが、「ハッシュ生成した文字列がパスワードとして使えなかった場合」の対応方法ですね。
滅多にないんですが、運悪く「アルファベット小文字と数字」なパスワードを生成してしまい、しかもそのパスワードを使いたいシステムが「大文字小文字数字の3種取り混ぜたパスワードじゃないとダメ」なシステムだったりとか。
(そんなん滅多にないだろ、と言われそうですが、サイト側のパスワード可能文字数に基づいて生成したハッシュを切り出すので、8文字パスワードだとたまにでくわします。まあ、ここ10年間で2サイトほどですが。これは個別例外処理してしまってます。)
あとは、ハッシュジェネレータをどこで動かすのか、という問題。昔はどこでも*nixなりDOSなりPerlを動かせる環境があったのでPerlスクリプトなハッシュパスワード計算機で問題なかったし、
Windows Mobile(W-ZERO3)の頃は頑張って自作アプリを作る元気があったんですが…
Androidなタブレットを使うようになってからは、自宅サーバにhttpsなハッシュパスワード生成CGIを動かしてます。
まあ、普段はブラウザのパスワードマネージャ任せで、このCGIの出番は滅多にないんですけど、セキュリティ的には弱いよなぁと常々思ってます。
日本語パスワードはまだかね (スコア:0)
マルチバイト最強伝説
Re:日本語パスワードはまだかね (スコア:1)
IMEに容易に記録されるような日本語はちょっと...
どうしてもというならHttpみたいな%92%E3%44
とかにエンコードしないと。
#どういう名前かど忘れしました。
常にメールリマインダとコピペ (スコア:0)
webサービスだと、普段はcookieを食べさせて、どうしてもログインし直したい時は、常にパスワード忘れたでメールリマインダーを経由して、パスワードは使い捨てにするとか、
アプリケーションで、パスワードを入れなければいけない時は、とあるオープンソースのプログラムのverXXのfoo.cのN行目をコピペで使うとかすればいいと思う。
最大の敵は、パスワードの文字列制限と、文字種類制限だな。
パスワードが長すぎる、利用できない文字がある、数字を含めてくださいなどの愚かなソフトウェアをどうフォローするかだな。
パスワードに制限を課すソフトウェアは、規制を満たすための妥協で、zzaaqq11などの安易なパスワードを産むだけだから、セキュリティを逆に下げるだけなのにな。
それと、パスワードにマルチバイトが使えるようになるともっと便利になると思う。絵文字やキリル文字とか使いたい。
Re: (スコア:0)
あらゆるバイナリ列をパスワードに使えるようにするのだってそう難しくないと思うんですけどね。何で出来るようにしないんでしょうね。
なんで単語つかうの? (スコア:0)
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倍近く安全。
と考えて使ってるんだけど、俺の考えって間違ってるのかな?
Re: (スコア:0)
まあ、Windowsのログインだけで、サイトは皆lastpass使ってる。流出怖ひ・・・
Re:1秒間に1兆回..... (スコア:1)
紙に書くこと自体は問題はないよ。問題はその管理。