叛乱オンライン
HOME > Theory > Crypt

暗号を使おう!

 

パスフレーズFAQ, version 1.04

HTML coded and last revised on 01-13-1997 by Randall T. Williams.

 

目次

 

1.0 はじめに

これはPGPのためのパスフレーズFAQである。パスワードや種々の鍵長といったことがらをカバーするような雑事について、alt.security.pgpで尋ねられたことのある質問をすべて含めようとした。大学の代数学以上のものを学んでいる人は数学についてくることができるだろう。8.2節の用語解説をチェックして、いくつかの用語とその使われ方についての助けとしてほしい。

MD5とIDEAは128ビットブロックに基づいている。56ビットDES鍵や他の大きさの鍵に変えることは些細なことだろう。パスワードがパスフレーズと違うのは、その長さである。パスワードでもパスフレーズでも、解析するには同じ考えを使う。

このFAQは工事中である(みんなそうじゃないか?)。それらについてわかったり、それを生み出したり、時間があったりしたら変更するだろう。適用された暗号使用法[1]は、この分野で出版された研究はそれほど多くなかったと信じさせてくれる。パスワード・クラックはカバーされているが、パスフレーズについてはほとんどない。数学関係の一部は、私が通常かかわっている分野ではない。私は訓練を積んだエレクトリニクス・エンジニアである。暗号使用は単なる趣味だ。些細な見落としがあっても許してほしい。わたしはこれをほとんど頭の中で考えて作った。コメント、訂正、追加、激励、ポジティブな批評は電子メールで ac387@yfn.ysu.edu まで。ただし、返事は期待しないでほしい。フレームは /dev/null に送ってほしい。

1.0.1 どこにパスフレーズFAQはあるのか?

これはお約束の質問。これを読んでいるということは見つけているのである。もし見つけていなければ、この節は実質的に役に立たない。今のところ、パスフレーズFAQのある公式な場所は3つしかない。のウェブサイトに感謝する。FAQのPGP署名済みコピーも、毎月中ごろにalt.security.pgpに投稿される(ほとんどのばあい)。
ウェブサイトは、

1.1 この文書ではどのように物事が扱われるのか?

最初のことは、この文書で使われる数字である。ここでのほとんどの数学は、Texas Instruments TI-60 ポケット計算機と、私のPCの立証のためのいくつかのプログラムで実行された。有効数字の桁数はわずかに制限されている。40桁もの数列はほとんど必要ではなく、実のところ、ほとんど理解を超えているからだ。ここで使われた巨大な数字の正確な値は、6.0節を参照のこと。3.4E38=3.4*10^38=2^128という表記法を使っている。これは入力しやすく、場所もとらない。また、log(x)(base 10)もここで使うので注意。私たちは指数を使ったところだが、log(x)がなくても、ln(x) (base 2.718 or e)を使うことを心配しなくてもよい。

セキュリティに影響するところで概数にするには、安全を期して切り上げにしている。他の数字は四捨五入している。ほとんどの場合、これについてはっきりテキストに書いてあるはずだ。

参照は番号をつけて[ ]で囲んでいる。下位参照は小文字をつけてある。ほかのことがらについては、それをたどってほしい。

1.2 乱数を得る方法は?

乱数はひじょうに生成しづらい。危機や回路のランダムさをもたらすのは、ランダムでない出来事だったりする。1からNまでのマーカーを作って、優れたミキサーに置くところを考えてほしい。コインをはじいてみてもいいが、誰かを実験すれば、コインをはじくのも長期的に見れば充分に偏るという結果が出るだろう。宝くじで使っているようなボール法はよい乱数源だが、宝くじからの数字をつかってはならない。宝くじの番号はあまりにも少なく、簡単に試せてしまう。ビリヤードゲームは、1セットのボールを入れ物にいれておいて、同時に取り出せるのは1つだけということにできる。これは、安価な乱数源となる。16個のボールから取り出すという作業を特定のアプリケーションで使えるようにする方法については、読者にゆだねた。「ダンジョン&ドラゴン」などのロールプレイング・ゲームに親しんでいる人なら、いろいろな面数のあるサイコロのセットを持っていることだろう。一つ注意しなければならないことは、サイコロの目を足すこと(たとえば2つの6面体サイコロ)は、中間の数字を多く(7は1/6の確率で出る)、両極の数字は起こりにくく(2と12の確率は1/36)してしまい、乱数性が薄れるということだ。ランダムなサイコロを持っているとしよう。その品質はあまりよくないことがあり、ランダムではない結果を導くかもしれない。セキュリティのための乱数生成についての情報は、 RFC1750 [6]を参照のこと。

1.2.1 疑似乱数生成

PGNG(疑似乱数生成)を使うのは、たいていの場合、乱数をつくるのによくない。PRNGの問題は、数字が機械的に作られることである。これは、ベーシックの RND()、Cの rand()、その他の言語での乱数機能も同じことである。プログラマーはこの単純で比較的高速な方法をプログラムやゲームで長い間使ってきた。その理由は、PRNGの働き方にある。単純なPRNGは、R = (A * R1 + B) mod(C): R1 = R: R = R / C というようなコードを使う。定数A, B, Cには、ふつう、素数が使われる。ほとんどの言語は、PRNGを呼び出す前にR1の基本値を設定するが、必ずというわけではなく、PRNGのなかには付加的な定数Bに煩わされないものもあるかもしれない。PRNGが破りやすくなっているのは、その値を蓄えるのに16ビットしか使っていないためである。それはつまり、使用された疑似乱数要素の数をNとすると、16ビットPRNG鍵スペースを無理やり解くには、65536*N回の試みで破ることができるということだ。おそらく、PRNG鍵スペースは1日で検索できるだろう。どれほど幸運で最善のPRNGを持っていたとしても、平均的な家庭用コンピューターで最悪1週間以内に検索することはできるし、検索スペースはせいぜい2^32であろう。なお、NSAが40ビット鍵など気にしていないように、40ビット鍵も個人がコンピューターを全力で使って1週間内外で総当たりすることができることに注意。乱数列生成についてのさらなる情報や他の参考文献については[1e] を参照のこと。

1.2.2 ハードウェア乱数生成

ハードウェア生成は、さまざまな半導体PN接合点からのノイズを使って作る。このよい例は、zenerダイオードから単純に導かれるノイズである。他のノイズ源は、高価なレジスターや、ノイズを発生させるためにさまざまな技術を使っている商用チップの数々である。ランダムな情報のハードウェアソースへの注意としては、ランダムではないノイズや他の信号に影響されうるということである。多くの場所では、コンピューター、テレビ、ラジオその他の電磁気機によって、電源からの50Hzや60Hzのノイズ、時計信号、その他のデジタルノイズにさらされる。安全のために、ハードウェアソースの出力を暗号化したり改作してもいいだろう。よい改作機能または暗号化は、どんな未発見のパターンも隠れる。安価なランダムビットソースは、10米ドルで[7]、大量生産は5米ドル以下で作られる。

1.3 IDEA鍵をクラックするのはどれくらい困難か?

PGPは、従来の暗号としてIDEAを使う。IDEAのための鍵は128ビットである。総当たりでの鍵スペースは、2^128=3.4E38と計算できる。すべての鍵の可能性を調べるために、1秒あたり10億(1E9)の鍵を試すことができるIDEAのための鍵クラッカー用特別ハードウェアでも、1.08E22年かかる。ほとんどの鍵を得ることができるだろうと思われる半分の時間でも5.39E21年である。太陽は1E9年で新星と化すとされている。アルゴリズムは安全であるから、暗号分析家はRSAのような別のものやあなたのパスフレーズを狙う。IDEA鍵を総当たりでクラックするには、われわれの技術力を越えている。

1.4 RSAをクラックするのはどれほど難しいか?

素因数分解は、鍵スペースの総当たり検索よりも簡単な問題である。RSAサイズの数のための現在唯一の実用的な因数分解法は、倍数多項式二次方程式ふるい分け(MPQS)とその変形、そして数フィールドふるいわけ(NFS)である。200桁/664ビット数のためにはMPQSは3.7E9年かかるという [1d]。何らかの特殊な例を除いて、130桁/429ビットより大きな数を素因数分解するにはどれほどかかるか、だれもわからないのではないかと思う。数についてのネット参考文献は、素因数分解されたのはRSA129と384ビットブランクネット鍵だという。129桁/426ビット鍵を素因数分解するよりも、116桁/384ビット鍵を素因数分解するほうが時間もコンピューターの能力もかからないことに注意すべきだ。NFSは、RSA129が素因数分解されるよりも速く、130桁/430ビット鍵のRSA130を素因数分解してしまった。RSAはおそらく、PGPでも最も弱いリンクであるが、現在、155桁/512ビット以上の数を素因数分解するのに、特別な機械を作らずにやる方法はだれもわからない。

1.5 MD5とは?

MD5はあなたのパスフレーズを撮ってそれをIDEA鍵に変換するものである。理論的に、MD5はあなたの鍵スペースが2^128以上である限り、毎回違ったビットの組合わせを出力するものである。MD5がすべての2^128出力を、2^128に等しい与えられた鍵スペースから作るであろうということを証明するのは、実質上不可能である。これは、IDEA鍵への総当たり検索とほぼ同じである。興味深い問題は、理論的に、2^128以上の与えられた鍵スペースを検索することによって、同じパスフレーズを作り出すことができるということだ。

MD5に対する攻撃を考慮して、待って、観察しよう。弱点が発見されてから、審査委員会では未修整のMD5を使わないようにしている。SHAその他の変換機能への移行が、将来のPGPにあるかもしれない。

 

2.0 パスフレーズはどのくらいの長さがいいか?

経験からいえば、必要とする鍵の1ビットあたり1文字を使うことだ。実際には、鍵のために英文文字ごとに約1.2ビット[1c]ということになる。つまり、鍵の長さは128÷1.2=106.667≒107文字が必要ということだ。これは、パスフレーズのための小文字とスペースだけの通常の英語構文を想定しており、計算のためにパスフレーズ中のスペースはすべて無視している[1a]。しかし、PGPを使うたびに1行半もの文字を喜んで入力する人は少ない。だからセキュリティが破られ、弱いパスフレーズを使ってしまうのだ。

2.0.1 別の言語を使ったら?

あなたの母国語を使うということはもちろん選択肢の一つとしてあっていい。このFAQを通じて、データと統計は英文によるものだ。他の言語または複合言語を使うなら、その数字は少々変わるだろう。それは、あなたのパスフレーズをわかりにくくするわけではない。異なった言語や複数の言語を攻撃するのは、やはり同じことだ。検索スペースは大ざっぱに、言語のサイズか、追加される言語の語彙の平均サイズが追加されると言うことになる。別の言語の辞書攻撃は、英語の辞書攻撃と同じ方法で作用するだろう。

2.1 一般的なフレーズ(句)や引用文を使ったら?

一般的なフレーズの短いものは使ってはならない。一冊の本の引用だったら、4万くらいの引用ができるだろう[5]。古いPC XTをセットして、特別なハードウェアなしに比較的短い時間で一般的なフレーズをチェックすることだってできる。単純なフレーズは真っ先にチェックされるだろう。もしあなたがスタートレック・ファンなら、「喜べ、スコット」はよくないフレーズだ。もし公刊書籍にフレーズを見つけたら、それは使ってはいけない。背景を探るだけで、音楽、本、テレビショー、映画、ゲーム趣味、その他あなたが使いたがるようなものはすぐにわかる。すべての一般的フレーズは鍵検索の最初の過程で試されるだろう。40000の引用でも、未改造PGPで約2.4日のあいだに試すことができる。2.7.1節参照のこと。

2.2 フレーズや無意味なフレーズを組み合わせたら?

フレーズを組み合わせることで、フレーズ検索はちょっと大変になる。無意味なフレーズは、総当たり検索の速度を落とすだろう[4]。。頭のいい検索では一般フレーズ構造を利用する。名詞、動詞、副詞、形容詞、その他の文の構成要素の順序は、自然な順序で試されるだろう。よい無意味なフレーズは、総当たり検索に対する限りランダムに見えるがほんとうはランダムではないというものだ。

2.3 変な綴り、句読法、大文字化は助けになるか?

"Odd sp3LLing5 and CaPitaliZatTiOn"というようにすることで、検索を1語あたり100万まで増やせる[1b]。パスフレーズのための数字を修正することは、きちんとしたパスフレーズの800万倍以上(1語あたり100万倍)を手に入れることになる。ランダムな大文字化は語の長さによって順列組合わせが変わってくる。語に0〜9の数字を一つ付け加えるなら、辞書サイズを10倍にする。これは小さなプラスだが、いくつかの場合では煩雑にできるかもしれない。3をEのかわりに、1をIのかわりに、5をSのかわりに、2をZのかわりに使うなら、0〜9までの数字を追加してアルファベットを36文字にすることができる。文字の入れ替え、文字の循環、文字ずらし、その他の語撹乱はランダムさの役には立たないが、総当たり検索を遅くしてくれる。この方法でパスフレーズをランダムなものに近づけることができる。

2.4 ランダムな単語を使ったら?

辞書 [3] には約74000語の単語がある。128ビット鍵サイズに必要なのは、log(2^128)/log(74000)=7.91のランダムな辞書からの単語ということになる。切り上げれば、IDEA鍵より難しいパスフレーズにはランダムな8語が必要だということになる。総当たり辞書攻撃は、IDEA鍵への総当たり攻撃よりわずかに長くかかる。これは覚えておくのが難しいようなパスフレーズを作り出す方法だ。それでもこれは多少タイプしやすい。

2.4.1 鍵生成辞書を使ってもいいか?

小さな辞書ほど速く検索できる。だれかの周囲にあるものは、一般の検索のかわりに始める手がかりとして充分であろう。だから、鍵生成システムはほんとうにランダムだと思っていい。プログラムは、貧弱に作られていたり、監視されていても解決できる。よいランダム・パスフレーズ生成システムとして、ダイスウェア[8]を試してほしい。もし辞書が語の構造を一層ランダムにするようなトリックを持っているなら意味はない。最後に、検索スペースを数えてみよう。乱数のもとがランダムでなければ、検索の手間を減らしてしまう。このため、鍵生成器がほんとうにランダムかどうか確認する必要がある。

違ったサイズの辞書がどれくらいの効果を持つかを示した。1万語辞書を使うと(2.7節より)、平均6か月以上かからせるにはlog(3.16E13)÷log(10000)=3.37≒約4語が必要。同じ辞書でIDEAの同等のパスフレーズを作るには、log(2^128)÷log(10000)=9.63≒約10語が必要。2万5000語辞書では、lot(2^128)÷log(25000)=8.76≒9語。5万語辞書だと、log(2^128)÷log(50000)=8.20≒9語。

2.5 完全にランダムな文字を使ったら?

標準アルファベットは26文字ある。再び数学的にいえば、log(2^128)÷log(26)=27.23個のランダム文字が必要だ。切り上げれば、IDEA鍵より難しいものを作るのに28文字が必要だということである。28ランダム文字を記憶するのは難しいが、不可能ではない。入力するにもそう悪くはない。

2.6 すべてのランダムな記号を使ったら?

印字可能なすべてのASCII文字を使うなら、95の文字・記号を使うことができる。log(2^128)÷log(95)=19.48のランダムな文字がこの方法に必要だということになる。切り上げれば、この方法でIDEA鍵より難しくするには20のランダムな文字が必要ということだ。20のランダムな文字を記憶するのはまだむずかしいことであり、また入力も簡単ではない。

2.7 パスフレーズ攻撃にどれくらいかかるか?

鍵クラッカーは1秒あたり100万鍵を試せると仮定しよう。ペンティアムはパイプライン処理 [3] で1クロックサイクルあたり約1回の指示を実行する。200Mhzペンティアムと最小の指示を使えば、小さいプログラムは1秒間に100万回動作するということになる。Cyrix 6x86は同じクロック速度でももっと速く、RISCチップはもっと速い。これは、現在の技術がそれほど発展しなくても、デスクトップパソコンでプログラムを組み、1E6 × 60 × 60 × 24 × 365.25 = 3.15576E13 の鍵を1年で試すことができるということだ。ランダムな語でできた1つの鍵は、6か月平均で終わらせるならlog(3.16E13)÷log(74000)=2.77≒3語の長さであるということになる。ところで、私たちが本当に試そうとしているのは、沈黙のコンピューター攻撃をやめさせることである。コンピューターが賢くなるにつれて、コンピューターが得るものはゆっくりになっていく。私たちはいつでもハードウェアを注文して組み立て、監視統制だけのためにコンピューターを使うこともできるのである。

2.7.1 誰でもできることは

486DX2-66 w/128k キャッシュ、RAMドライブ一つ、Smartdrv、未修整のMIT PGP2621つ、その他の必要なファイルをロードしたものでの実験がある。RAM shadowsが有効であり、ビデオとBIOS はキャッシュ可能、その他の設定も高速になるようにしてあった。プログラムはQBASIC(DOS 5と6.xで使われるようになった)で、有効なパスフレーズ環境を使って新しいパスフレーズをPGPに送ってエラーコードを調べるという形でパスフレーズを試した。PGPは +batchmode で実行された。

この方法を使って、毎秒2つ(正確には1.8125)のパスフレーズが試され、PGPはエラーが検出されたときにはビープ音を鳴らして遅くなるが、それは最小限になるように修正された。本気でパスフレーズを攻撃するためには、PGPを改良して遅延をのぞき、加速する必要があるだろう。

教訓として、小さな辞書からの一つのランダムな語は約1時間で得られる。最大の辞書なら検索に1日かからない。この攻撃に必要なツールはすべて持っているとしよう。この作業をするのに必要なプログラムと設定は、高校生ハッカーでも充分に可能なのである。

 

3.0 強いパスフレーズの作り方は?

その答えは、あなたのパスフレーズがどのくらいの安全性を必要としているかによる。一般のフレーズで始めて、それをわずかにランダムにさせて、ゆがめるといい。単語を変えて、無意味なフレーズを作ろう。ランダムなやり方で分校蔵を変えるのも忘れてはならない。いくつかのランダムなタンゴや文字を加えて、安全性を確保しよう。最後に、IDEA鍵への攻撃より時間のかかるように、覚えやすいものを作ろう。

"my unbreakable super pass phrase can't be beat"(私の破られないスーパー・パスフレーズは打つことができない)というのは、それ自体は弱い。では、どう変えようか。"mile unbraking stupor past froze can tent bee beets"(マイルブレーキない意識朦朧過去凍結は露営できる蜜蜂ビート)ならずっといいし、攻撃に備えて同音異字辞書を使うのはいいことだ。一方で、一つのパス中に、文構造と違う無意味なフレーズや論理的に全くつながりのない語を入れてもいい。総当たり攻撃以外では想像もできないがあなたにはわかるようなランダムな文字を加えてもいい。フレーズはかなり覚えやすい。一般のフレーズをもとに使ったからだ。もし実際のフレーズを忘れても、再構成できるだろう。人間として、わたしたちは物事を同じように予測できるやり方でする傾向がある。

さらなる安全性のために、あなたは完全にランダムなフレーズや文字列を生成してもいい。これは時間がかかり、覚えにくい。あなたのセキュリティ・レベルは、鍵の長さを変えることで簡単に変更できる。ほぼ確実な方法はダイスウェアだ[8]

 

4.0 私のパスフレーズはどのくらい強いか?

わたしたちは知っているパスフレーズのなかでも絶対的最小と最大のものを使って、与えられたパスフレーズがどれだけ安全かを計算するちょっとした公式を作ってみよう。ここで、ランダムとは真のランダムを意味する。rnd()や線形合同生成器のような疑似ランダム法はここでは勘定にいれない。この公式は使うときに必要に応じて変更してもいい。

PS = パスフレーズの安全性
FF = ごまかし要因。
これは、無意味なフレーズ、
妙な綴り・句読法・大文字使用・数字のような変形。
RW = ランダム単語(無意味なフレーズに含まない)
RC = ランダム記号
RL = ランダム文字
OC = 妙な文字(小文字以外のもの)
LC = 合計文字数
(単語全体、スペースは無視) (もしすっかりランダムなシステムならカウントしない)

注:多くの仕事がされるなら、ごまかし要因は変えたほうがいいかも。
F1 = 0.5 = 無意味なフレーズになっているなら
F2 = ? = 妙な綴り/つづり・句読法・大文字化の間違い
これは、変更された文字の数と使われている単語の長さによって決まる変数。単純には、F2 = 4 * OC / LC
F3 = .09 = 乱数 (F2が使われているときには除外)

FF = 1 + F1 + F2 + F3

PS = RW/8 + RC/20 + RL/28 + LC/107 * FF


パスフレーズ・セキュリティ(PS)を計算することは、多くの人にとって簡単なことだろう。PS > 1 なら、あなたのパスフレーズをクラックするよりIDEA鍵を攻撃するほうが簡単だということになる。PS < 1 なら、IDEA鍵のかわりにあなたのパスフレーズを攻撃するほうがたぶん易しい。1未満のPSを持っているなら、別の安全なパスフレーズをさらに持ってもいい。0.35未満のPS値なら1年以内に破られるという見積もりである。この公式は作成中であり、目安値にすぎない。どんなエラーも保守側にあり、おそらく公式をだますことはできるだろう。

4.1 パスフレーズの例

これはパスフレーズとPS値の例である。この公式を使って同じ数字が出たら、パスフレーズがいいか悪いかわかるだろう。(訳注:一応意味を並べてみた)
0.855 無意味なフレーズ
betty was smoking tires in her peace of pipe organs and playing tuna fish.
「ベティはパイプオルガンの彼女の平和でタイヤを薫製にしてマグロを遊んだ」
1.05 ランダムな文字の束
A6:o@6 Ls+\` uGX%3y[k
1.34 妙な大文字化/句読法で無意味
Web oF thE Trust is BrokEn cAn You Glue it Back ToGether? and give it xRays.
「信頼乃う工ぶは壊レたそれをまに接着ぞきる力?でソレハX線を与える」
0.280 平均的なフレーズ
There is a sucker born every minute.
「毎分乳児が誕生している」
1.125 ランダムな単語
paper factors difference votes behind chain treaties never group
「紙要素違い投票背後チェーン条約決してグループ」
0.761 いくつかのランダムな文字のあるフレーズ
Ignorance is bliss. spgemxk Education cures ignorance.
「知らぬが仏。spgemxk教育により無知は矯正される」
 

5.0 私のパスフレーズをだれがどうやって手に入れようとするのか?

なぜ人はあなたのパスフレーズを手に入れたがるのか? 私たちのほとんどにとって、私たちが暗号化したものにほんとうに興味をもっている人はいないだろう。普通、私たちが直面するかもしれない最悪の「敵」は、見えないところで何をしているか探りたがる家族や、あなたのインターネット・アカウントのあるシステム管理者だろう。今のところ、たいていの家族はどうやってパスフレーズ攻撃を始めたらいいかわからないし、256ビットRSAはコンピューターの使い方のわからない人たちからは安全だ。本当に社会の偏執病かそれに近い人には、FBIその他の法的執行機関が監視しているかもしれない。何をやっているかわかる人はだれもが、総当たり攻撃なしにパスフレーズを得ようとするだろう。

5.1 法的強制執行と政府

もしあなたが法的強制執行機関に調査されるなら、これはいろいろな情報源から手に入れてもいいものだ。あなたの通信のすべては監視されている。彼らが十分な情報を得たと考えたら、法的強制執行機関は捜索令状を示して、あなたのコンピューターとディスクその他のものをたくさん、証拠として持ち去るだろう。彼らはおそらくすでにあなたが送受信した平文のコピーを持っているだろう。sれらを手にする一方で、彼らはあなたに尋問するだろう。一度彼らがあなたのコンピューターを手にしたら、彼らはコピーを作り、ハードドライブを検索するだろう。もしそのすべてか一部が暗号化されていたら、ハードディスクに残っているかもしれない削除ファイルも含めてそれを復号化するだろう。もしパスフレーズがハードドライブに残っていれば、彼らは鍵を使ってすべてのファイルを復号化するだろう。法的強制執行は彼ら自身のコンピューター専門家を有し、必要な専門家を呼ぶこともできるのだ。あなたの個人的経験は、どの国に住んでいるかによって変わってくるだろうが。

5.2 マルチタスク・システム

Windows3.x、Windows95、OS/2、その他の、ハードドライブへのスワップ・メモリーや仮想メモリを使うオペレーティング・システムを信頼してはならない。Macユーザーについては、RAMディスクはハードドライブに自動的に保存されてしまう。何人かのウィンドウズユーザーは、スワップファイル中にパスフレーズを発見した。ウィンドウズからのDOSでPGPを使って安全なのは、ウィンドウズが動いていないとき、つまりWindowsのDOS窓じゃないときだけのようだ(DOSモードのことか?:訳注)。DOSにシェルを渡すWindowsプログラムは、直接、パスフレーズをスワップ・ファイルに書き込むようだ。指定してクリックする程度でディスク表面全体を検索するプログラムもある。また、テキスト文字列をファイル中で検索する単純なプログラムを書くのも大したことではない。もっと真剣な攻撃と削除されたファイルには、読めないディスクからデータを回復するさまざまなサービスのうちの一つが必要になろう。マルチタスク・システムの主要な問題は、管理の問題である。あなたはメモリー内で起こることを効果的に管理できないということだ。

5.3 マルチユーザーシステム

大きなマルチユーザーシステムでは、のぞきプログラムをインストールしたり、ファイルのコピーを作ったり、場合によっては直接ユーザーを監視するためにアクセスすることは、たやすいことである。それはネットワーク化されたPCでも同様だ。ネットワークでは、あなたは適切なソフトでものごとを離れて操作できる。コンピューターを仕事で使うことは、多くの人々にあなたのパスフレーズを手渡すことかもしれない。この問題を解決するために、安全な自分の鍵とマルチユーザーシステムの鍵を別にする人も多い。

5.4 テンペストと電子監視

コンピューターからの電磁的ノイズが監視、あるいは使用すらされうることもやや知られてきた。すべての接続線は、いかなる信号でも放出するようなアンテナとしてふるまう。手が込めば、一つのコンピューターをいくつかの同一のコンピューターの中から見つけだすこともできるだろう。一つのコンピューターしかなければ、スパイの仕事はかなり易しい。ある場合には、特別に保護された装置を買うよりも部屋を保護するほうが簡単かもしれない。最も難しい部分は、漏れや接続をも識別するかもしれない。部屋の中のすべての接続線情報は、いかによいシールドが作られても信号を外に伝えてしまう。あなたがテンペスト(tempest)攻撃を心配するまえに、あなたが少しでも政府や企業の重要人物となる必要がある。本当に単純な装置でのいくつかのテストで、モニターからのほんのわずかのノイズを示し、キーボードもいくらかのノイズを発していた。テスト中に使われたすべてのケーブルはシールドされているようにみえ、コンピューターは画面に示されたデータと無関係だった。検出装置はそれほど高性能ではなかった。実際に検出されたよりもノイズのほうが多かったかもしれない。

 

6.0 どうやってパスフレーズを安全に保存しておくか?

最もよい方法はおそらく、鍵を分割するテクニックである。あなたの正規のパスフレーズのすべてを守るパスフレーズの断片を配布しておく必要がある。何人かの友人を失ったとしても、あなたの鍵が安全になるようにこうする方法はいくつかある。簡単な方法は、パスフレーズを3つの部分に分割することだ。それから6人の別々の友人に断片を渡す。あなたのパスフレーズを再現するには、3人の友人があればいいし、これでバックアップできる。同じ琴を実際のパスフレーズ・ファイルでも行なう。個々の友人はあなたのパスフレーズを再現できず、3つすべてが合わさらないと断片を復元できない。この方法の安全性は、もしあなたがもっと多くの人を使えば高められるが、最も重要な部分は、あなただけが復元できてほかのだれもできないという方法で鍵のコピーを配布することだ。あなたは最低PGPのコピーを一つは持っておき、鍵は家以外のどこかに置いておこう。あなたのリスクを減らすことを忘れてはならない。鍵分割テクニックその他の参考文献については[1]を参照のこと。

6.1 私はパスフレーズを書き留めておいてもいいか?

私は反対する。セキュリティ全体のために、あなたはパスフレーズをいかなる方法でも書き留めるべきではない。上記の鍵分割テクニックも完全に安全ではない。

あなたのパスフレーズを書くことは、もし注意されなければセキュリティ違反である。多くの普通の置き方では、あなたの書かれたパスフレーズは見える人すべてに渡しているようなものだ。普通の鉛筆で書くという簡単な技術は、実際に書かれたメモ帳の一番上の紙が取り除かれても、メモ帳内にパスフレーズの痕跡がわかってしまう。あなたのパスフレーズのコピーをゴミ箱に入れることは、パスフレーズをゴミ箱漁りに渡すことになる。家からのゴミでさえ大した苦もなく捜索できる。財布も、あなたが傷ついたり、財布が盗まれたりしたときには安全な場所ではない。書くことにはこれ以外にも多くの問題がある。

 

7.0 パスフレーズ・スイッチや変数の使い方は?

こういった方法を使わないようにおすすめする。これはあなたが特別慎重でない限り、巨大なセキュリティ・ホールになるからだ。誤用あるいは一般的になされる間違いは、単一語辞書検索者に無防備になってしまう、つまり攻撃者にパスフレーズを渡すことになる。PGPをマニュアルモードで使ってバッチ・プロセスを確実なものにするテストケースを二重にチェックすることは、微妙なデータを使うまえに正確に行なっておくことだ。

この節での基本的システムは、MS-DOS PC, UNIX, Macであり、その他では異なってくる。ここでの基本的な目的は、あなたにありうる危険を示すことだ。これらの方法を使う前に、PGPマニュアルと、システムのためのOSマニュアルを読んでおくことを強くおすすめする。それでも充分ではないことがあるのだ。いくつかのマニュアルは少々不明瞭か、情報そのものを持っていないこともある。

7.1 環境変数PGPPASSを設定する

PGPPASSを使うことに依存するセキュリティ・リスクを制限しようとして、多くの人がいい方法や悪い方法を開発してきた。まじめなバッチ・プログラムを起動する私の方法は、ダミー・パスフレーズを設定して、あなたがautoexec.batに必要とされる環境用スペースを多く割り当てるものである。もしあなたが十分なスペースを割り当てていないなら、環境スペースエラーがあとで出てくるだろう。それからバッチ・プログラム、たいていはQBASICだが、これが環境設定をユーザープロンプト経由でプログラムから変更する。プログラムプロセスを実行し、PGPPASSをリセットしてスペースを十分にする。ここで安全になるのは、メモリーに書かれるものである。あなたのパスフレーズはディスクに書かれることがない。

7.2 -z スイッチを使う

コマンドラインスイッチは、一部のユーザーとバッチ方式に便利である。MS-DOSでは、あなたは128文字のコマンドラインに制限される。よいパスフレーズは80文字以上の長さであり、これでは有用性が制限されてしまう。加えて、もしあなたがパスフレーズ用のスペースを持っていれば、引用符で囲まない限り、最初の1語か最初のスペースまでしか得られない。PGPが最初の単語しか認識しないとき、完全なパスフレーズでもすっかり無意味であるということは多くの人が気づいてきた。

7.3 バッチファイル中のパスフレーズ

それをしないことが一番だとおすすめする。この方法を安全にしておくにはかなり面倒だ。ダミーのパスフレーズをautoexec.batに設定しよう。バッチファイル中で、パスフレーズの入力を求めるプロンプトが出たら、本当のパスフレーズを設定し、PGPコマンドを実行して、パスフレーズを上書きし、バッチファイルを閉じる。常にバッチファイルを終了する前に本当のパスフレーズが上書きされるようにしておくこと。スペースをとりれたパスフレーズを囲む引用符を使うようにすることに気をつけて、すべてを試しておくこと。

 

8.0 著作権、数字、用語集、その他

Copyright © 1995-97 by Randall T. Williams <ac387@yfn.ysu.edu> この注意書きがついていて利益を伴わないならば、これは利用できるところに自由に配布してよい。

8.1 極めて大きい数、その他の数

これらの数字が実際にどれくらい大きいかを示す。それを扱うのはむずかしく、定規に当てはめようとしたりするのでなければ使う理由もない。この形で計算するには、ポケット計算機では足りない。2^128の長さについて注目。これが128ビットの数の大きさなのだ。512ビットモジュールはその4倍長い。
 100万      =                                             1,000,000
 10億       =                                         1,000,000,000
 1兆        =                                     1,000,000,000,000
 3.15576E13 =                                    31,557,600,000,000
 2^128      =   340,282,366,920,938,463,463,374,607,431,768,211,456
 74,000^8   =   899,194,740,203,776,000,000,000,000,000,000,000,000
 95^20      = 3,584,859,224,085,422,343,574,104,404,449,462,890,625
 26^28      = 4,161,536,836,220,038,342,098,551,818,958,537,752,576
こちらは、FAQを通じて使われたlog(x)数である。log(x)を理解していない人には、数学がわかりやすくなるだろう。

  log(2^128)    = 38.53183945
  log(3.16E13)  = 13.49910397
  log(74,000)   =  4.86923172
  log(50,000)   =  4.69897004
  log(25,000)   =  4.397940009
  log(10,000)   =  4.0
  log(95)       =  1.977723605
  log(26)       =  1.414973348

8.2 用語集

文脈がはっきりしない場合、いくつかの事項がこれではっきりするだろう。詳しい定義は、必要に応じて付け加えられる。
攻撃者 = これはあなたのパスフレーズを狙っている人すべてである。
それは、あなたの弟、妹、妻、友人、通りすがりのハッカー、法的強制執行、その他多くである。
総当たり検索 = これは、鍵スペース全体の検索である。
すべての可能な組合わせを片っ端から試すこと。例:書類鞄のダイヤル錠は1000の鍵スペースがあり、それを一つずつ試す(000,001,002, ... 999)
鍵サイズ = 鍵の実際のサイズ。例:IDEAは128ビット鍵サイズ。
鍵スペース = Tある鍵が持つことのできる可能な組合わせの数。
鍵スペースは、すべての可能な組合わせを試す以外の攻撃法があるなら、その計算は扱いにくいことになる。例:IDEAは2^128の鍵スペースを持っている。
疑似乱数 = ランダムに見えるような数学的数列
またはその他の繰り返し数列
乱数 = 数列の記録を繰り返す以外の手段では
再現できない数列
検索スペース = 鍵を壊すのに必要な検索の大きさ。
鍵サイズよりもずっと小さな検索スペースを有する鍵もある。例:40桁/130ビットの強力な数字(toy RSA)は、IDEAの39桁鍵スペースより大きいが、ある高速因数分解法を使えば数分で因数分解されてしまう。
 

9.0 参考文献

統計学についての本や、確率計算についての本がある。それ以外にも参照し損ねているかもしれない。私は、数多くの参照についての長いリストのかわりに、充実した内容なので、[1]をこの文書で使った。
[1] Bruce Schneier, Applied Cryptography. John Wiley & Sons, 1994
(1st edition paperback) (2nd edition paperback) [1a] p. 144-5 and p. 190-1 p. 173-5 and p. 234 [1b] p. 141-3 p. 170-3 [1c] p. 190 (1.2 bits Shannon) p. 234 (1.3 bits Cover) [1d] p. 212 p. 256 (No specifics) [1e] p. 347 Chapter 15 p. 369 Chapter 16
[2] The Random House Dictionary. Ballantine Books, 1980
(paperback, 約1.5インチ(3.8cm)の厚みがあって、「74000語以上の記載」がある)
[3] Nick Stam, Inside the Chips. PC Magazine Feb. 21, 1995
p. 190-199
[4] Grady Ward, Creating Passphrases From Shocking Nonsense
[5] The Oxford Dictionary of Quotations. ???
(広告には「4万以上の引用」とある)
[6] RFC1750 Randomness Recommendations For Security
その一つは: http://www.clark.net/pub/cme/html/ranno.html
[7] Randall T. Williams, A Simple Random Noise Source, July 01, 1995
Posted to sci.crypt and alt.security.pgp 9/95 and 10/95
[8] Arnold Reinhold, Diceware (パスフレーズ生成システムのダイスウェア)
http://world.std.com/~reinhold/diceware.html
 

もともとの著作者

Last modified: 23 Mar 1997
Author: Randall T. Williams <ac387@yfn.ysu.edu>
Comments: galactus@stack.nl

 

HOME > Theory > Crypt

2000年盗聴法対抗
ダウンロードPGP6.5.1iPGP disk
日本語化PGP鍵作成
PGPdiskマウント秘密鍵を隠す
落とし穴
完全抹消法

PGP ユーザーズ・マニュアル 第1巻
The comp.security.pgp FAQ 日本語版
パスフレーズFAQ 日本語版
バックドア NSAPhrack Magazineソースコード
暗号関係リンク集

叛乱オンライン