アカウント名:
パスワード:
ちなみに辞書攻撃可能なパスワードだと市販PC程度のスペックの マシンでも 100ms程度 で破られます。みんなが考えているよりも簡単です。 そんなに難しくもなく、ちょっとヒントを言うと 去年のCRYPTO2001 ( CRYPTO2002 [iacr.org] ) でのランプセッションの余興に パスワード破りのデモがあったのですが、それを一般のシステムに 応用すればすぐできます。 京都大学のように24000個のパスワードがあっても 全部走査するのも1時間かかりません。
組み込みシステムのような記憶領域の容量がない場合、PAMのように検査用辞書を持つことができません。その時は、僕の作った遷移状態(マルコフ連鎖)を使った文字列の複雑さを計算する 非常に小さい評価関数 [h2np.net] を試してみてください。かなり良い成績を出すはずです。
「そーゆーパスワードを選ぶ人」の作るパスワードをはじくための関数ではないのでしょうか?
むりなものは無理です。 もう一度書きますが、Fool Proofなパスワードセキュリティのシステムではありません。 あくまでも遷移状態からみた文字列の複雑さを計算する非常に小さな評価関数です。 それだけで過大な期待をするのは間違いです。
Linuxや*BSD、あるいはUNIX系のシステムでパスワードセキュリティのシステムを使うなら、 PAMを組み込むこと が今の所、最良の方法だと言えるでしょう。ただし、それでもすらも完璧だということはありません。
組み込みシステムのようなメモリや記憶容量のないコンピュータの中に入れる目的なので実行コードも2kbyteを切ります。 そのため 知識データベースを用いていないので、当然、知識による判断はできません。 12345678の入力でも、この函数からの戻り値に対するスレッシュホールドを上げれば対処できますが、たとえば誕生日や電話番号、あるいは学籍番号のようなものは判断できません。
容量が小さく、計算が速く、何でもできるような 万能なマジックがあると思うのは危険 です。
全くそのとおりです(そもそも Fool Proof なパスワードセキュリティシステムとはなにかという話はおいておくとして)。 つまり、あなたの「非常に小さな評価関数 [h2np.net]」は「検査用辞書を用いた方式と比べて大きく機能が劣っており、(検査用辞書を利用できないような環境では)あったほうがないよりはましかもしれないけれど、それについてもなんら理論的根拠はなく、また実証されているわけでもない」ものです。
実際には「没にした」ようなものであるにもかかわらず、読み手が誤解するような表現を用いて紹介したのは何故ですか。
こんな感じの答えていいですか?
あなたのスタンスについて理解が深まりました。大変素晴らしいスタンスだと思います。しかし、残念ながら、私の質問に対する回答にはなっていません。特に技術的な質問に一切答えていただけなかったので、返答を書こうにもオフトピックになってしまいます。ですので、がんばって簡潔に書きます。
理論的背景をきちんと文章にして 論文等で発表していない点 に対して没ネタといっているだけで、別に全体がダメだとは思っていません。アイデアやコードは第三者に評価して頂ける程度のものにはなっているものと思っています。
なるほど、わかりました。このコメント [srad.jp]の
辞書使っていないんだから、辞書を使ったパスワードチェッカーのような検査はできないのは当たり前だろ。
はい、そのとおりです。しかし、このコメント [srad.jp]とこのコメント [srad.jp]を精読していただければ分かるように、私が問題にしているのは「非常に小さな評価関数そのもの」ではなくて、「非常に小さな評価関数を紹介した不適切な表現」であることをお忘れないようお願いします。(一応念のために触れておくと、状態遷移解析によってパスワードの強度を検査するアイデア自
Fool Proofな目的に作ったのではなく、純粋に遷移で 見ているので12345678とか%%%%%%%%というのも いい点数が出てしまいますが、まあ、 そーゆーパスワードを選ぶ人は何をやっても救えない というスタンスでやっています。ちなみにランダムな8桁の数字は結構、丈夫ですよ。
ちなみにランダムな8桁の数字は結構、丈夫ですよ。
数字ばかりのパスワードは試す人がたくさんいそうで、すぐに破られる気がするのですが。何と比較して丈夫なのでしょうか。
なるべく長く / 英大文字・英小文字・数字・記号を入れる / 同じ文字を何度も使わない / 英語・日本語などの単語になっていない
というだけでは十分ではなく パスワードクラックの辞書には載っていないこと が必要です。 フランス語、ドイツ語、イタリア語、スペイン語などの卑しい言葉で、かつ文字O(オー)を数字0(ゼロ)などに変えるありがちな方法は 上記の要件は満たしますが、辞書攻撃ではたぶんダメでしょう。 ちなみにパスワードクラックの辞書は数十万、 あっても数百万の範囲ですので、8桁ランダム数字の方が それよりは少しは期待がもてます。 また人間が選ぶランダムな文字列でという要件を入れても、 人間の脳は乱数生成器を持っていないので:-) 人間が文字を意図的に選択するという点で弱くなる可能性があります。 それを避けるために、たとえばmkpasswdというプログラムを使ってパスワード候補の文字列生成したり(これはGNUのmkpasswdではなくNISTの人が作ったもの)、 それがなかったら、 % cat /dev/urandom | mimencode |head -1 として表示される文字列から任意の長さを選ぶとか人間の恣意的な データが含まれないようにした方がいいでしょう。 あとはその人の運次第。
また人間が選ぶランダムな文字列でという要件を入れても、 人間の脳は乱数生成器を持っていないので:-) 人間が文字を意図的に選択するという点で弱くなる可能性があります。
それを避けるために、たとえばmkpasswdというプログラムを使ってパスワード候補の文字列生成したり(これはGNUのmkpasswdではなくNISTの人が作ったもの)、 それがなかったら、
% cat /dev/urandom | mimencode |head -1
として表示される文字列から任意の長さを選ぶとか人間の恣意的な データが含まれないようにした方がいいでしょう。 あとはその人の運次第。
パスワードクラックの辞書には載っていないこと
パスワードクラックの辞書は数十万、あっても数百万の範囲
従って「ランダムな8桁の数字は結構、丈夫」などという誤解を招くような表現は避けるべきです。
たしかここだけ見ると誤解されかねないかも 知れませんね。推薦するの作り方はLinuxや*BSDだと
「8桁の数字は一般的な辞書攻撃の対象とはなりにくい。しかし、時と場合によっては対象となり得るし、また総当り攻撃に弱い。したがって8桁の数字のみからなるパスワードは利用するべきではない。」などという表現が妥当です。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike
弱いパスワードを登録できた時点で負け (スコア:5, 参考になる)
ちなみに辞書攻撃可能なパスワードだと市販PC程度のスペックの マシンでも 100ms程度 で破られます。みんなが考えているよりも簡単です。 そんなに難しくもなく、ちょっとヒントを言うと 去年のCRYPTO2001 ( CRYPTO2002 [iacr.org] ) でのランプセッションの余興に パスワード破りのデモがあったのですが、それを一般のシステムに 応用すればすぐできます。 京都大学のように24000個のパスワードがあっても 全部走査するのも1時間かかりません。
組み込みシステムのような記憶領域の容量がない場合、PAMのように検査用辞書を持つことができません。その時は、僕の作った遷移状態(マルコフ連鎖)を使った文字列の複雑さを計算する 非常に小さい評価関数 [h2np.net] を試してみてください。かなり良い成績を出すはずです。
すずきひろのぶ
なんじゃこりゃー (スコア:1, おもしろおかしい)
% ./peval
hironobu
7 hironobu
RKEaBh@$
51 RKEaBh@$
12345678
126 12345678
あと、ドキュメントにはスペルチェッカをかけるようにしてください。
Re:なんじゃこりゃー (スコア:0)
小さな評価関数は小さな評価関数以上でも以下でもない (スコア:1)
むりなものは無理です。 もう一度書きますが、Fool Proofなパスワードセキュリティのシステムではありません。 あくまでも遷移状態からみた文字列の複雑さを計算する非常に小さな評価関数です。 それだけで過大な期待をするのは間違いです。
Linuxや*BSD、あるいはUNIX系のシステムでパスワードセキュリティのシステムを使うなら、 PAMを組み込むこと が今の所、最良の方法だと言えるでしょう。ただし、それでもすらも完璧だということはありません。
組み込みシステムのようなメモリや記憶容量のないコンピュータの中に入れる目的なので実行コードも2kbyteを切ります。 そのため 知識データベースを用いていないので、当然、知識による判断はできません。 12345678の入力でも、この函数からの戻り値に対するスレッシュホールドを上げれば対処できますが、たとえば誕生日や電話番号、あるいは学籍番号のようなものは判断できません。
容量が小さく、計算が速く、何でもできるような 万能なマジックがあると思うのは危険 です。
すずきひろのぶ
Re:小さな評価関数は小さな評価関数以上でも以下でも (スコア:0)
全くそのとおりです(そもそも Fool Proof なパスワードセキュリティシステムとはなにかという話はおいておくとして)。
つまり、あなたの「非常に小さな評価関数 [h2np.net]」は「検査用辞書を用いた方式と比べて大きく機能が劣っており、(検査用辞書を利用できないような環境では)あったほうがないよりはましかもしれないけれど、それについてもなんら理論的根拠はなく、また実証されているわけでもない」ものです。
重箱ついでに (スコア:0)
Re:重箱ついでに (スコア:0)
そのとおりです。間違えました。
実は普段もよく間違えます。
コードはオープンにすることに意味がある (スコア:1)
こんな感じの答えていいですか?
すずきひろのぶ
Re:コードはオープンにすることに意味がある (スコア:0)
あなたのスタンスについて理解が深まりました。大変素晴らしいスタンスだと思います。しかし、残念ながら、私の質問に対する回答にはなっていません。特に技術的な質問に一切答えていただけなかったので、返答を書こうにもオフトピックになってしまいます。ですので、がんばって簡潔に書きます。
なるほど、わかりました。このコメント [srad.jp]の
Re:コードはオープンにすることに意味がある (スコア:0)
Re:コードはオープンにすることに意味がある (スコア:0)
はい、そのとおりです。しかし、このコメント [srad.jp]とこのコメント [srad.jp]を精読していただければ分かるように、私が問題にしているのは「非常に小さな評価関数そのもの」ではなくて、「非常に小さな評価関数を紹介した不適切な表現」であることをお忘れないようお願いします。(一応念のために触れておくと、状態遷移解析によってパスワードの強度を検査するアイデア自
Re:コードはオープンにすることに意味がある (スコア:0)
Re:コードはオープンにすることに意味がある (スコア:0)
Re:コードはオープンにすることに意味がある (スコア:0)
4択を見た時点であんたが執拗にからんでる動機が透けて見えたようだよ。
これ以上やっても何も生み出さないと思うよ。
Re:弱いパスワードを登録できた時点で負け (スコア:0)
引用された関数だと、
Re:弱いパスワードを登録できた時点で負け (スコア:1)
Fool Proofな目的に作ったのではなく、純粋に遷移で 見ているので12345678とか%%%%%%%%というのも いい点数が出てしまいますが、まあ、 そーゆーパスワードを選ぶ人は何をやっても救えない というスタンスでやっています。ちなみにランダムな8桁の数字は結構、丈夫ですよ。
すずきひろのぶ
Re:弱いパスワードを登録できた時点で負け (スコア:1)
パスワードを決めるときには
- なるべく長く
- 英大文字・英小文字・数字・記号を入れる
- 同じ文字を何度も使わない
- 英語・日本語などの単語になっていない
にするようにとよく言われます。これらは守るべきです。たとえこれらの情報が破る側にヒントとして与えられたとしても、これだけでは探索空間が大きすぎて、ちょっとやそっとでは破れません、たぶん。 :-)「破る人間の裏をかいて」数字ばかりとか記号ばかりとか長さ3文字とかにしている人はきっといるだろうと思うのですが、それはやっぱり危険です。破る側がちょっと「普通でないもの」を試したらすぐに破られてしまいますから。
鵜呑みにしてみる?
Re:弱いパスワードを登録できた時点で負け (スコア:1)
というだけでは十分ではなく パスワードクラックの辞書には載っていないこと が必要です。 フランス語、ドイツ語、イタリア語、スペイン語などの卑しい言葉で、かつ文字O(オー)を数字0(ゼロ)などに変えるありがちな方法は 上記の要件は満たしますが、辞書攻撃ではたぶんダメでしょう。 ちなみにパスワードクラックの辞書は数十万、 あっても数百万の範囲ですので、8桁ランダム数字の方が それよりは少しは期待がもてます。
また人間が選ぶランダムな文字列でという要件を入れても、 人間の脳は乱数生成器を持っていないので:-) 人間が文字を意図的に選択するという点で弱くなる可能性があります。
それを避けるために、たとえばmkpasswdというプログラムを使ってパスワード候補の文字列生成したり(これはGNUのmkpasswdではなくNISTの人が作ったもの)、 それがなかったら、
% cat /dev/urandom | mimencode |head -1
として表示される文字列から任意の長さを選ぶとか人間の恣意的な データが含まれないようにした方がいいでしょう。 あとはその人の運次第。
すずきひろのぶ
Re:弱いパスワードを登録できた時点で負け (スコア:1)
// クラックする際に参考にするという意味ではなく。 :)
鵜呑みにしてみる?
なになっとくしてんすかー (スコア:0)
ランダムな8桁の数字によるパスワードが、辞書に載ってる単語によるパスワードより辞書攻撃に強いのはあたりまえです。ランダムなんですから。
数字のみでも辞書に載っていたら簡単にやられます。確かに現状では数字のみの単語はあまり辞書には載っていませんが、今後加えられる可能性がないわけではありませんし、また今回のケースのように大学の学生アカウントであれば、攻撃者は当然学生IDなどの辞書化を行うでしょう。
Re:なになっとくしてんすかー (スコア:0)
推奨するパスワードの決め方 (スコア:1)
従って「ランダムな8桁の数字は結構、丈夫」などという誤解を招くような表現は避けるべきです。
たしかここだけ見ると誤解されかねないかも 知れませんね。推薦するの作り方はLinuxや*BSDだと
で表示された文字列から任意の長さ分使う。 という形なら誤解されないと思うのですが、これでいいでしょうか?すずきひろのぶ
Re:推奨するパスワードの決め方 (スコア:0)
Linux Security HOWTOにもこんな風に [linux.org]書いてありますし。
納得してはいけませんでした (スコア:1)
鵜呑みにしてみる?
Re:弱いパスワードを登録できた時点で負け (スコア:0)
なんか全体的にいいわけがましくて失望しました。