web-dev-qa-db-ja.com

truecryptボリュームの作成中にランダムにマウスを動かすとどうなりますか?

新しいボリュームを作成するときにマウスを動かすたびに「ラウンド」と呼ばれますか?私は、ボリューム作成プロセス中の乱数のある画面について話しています。ランダムな動きをする目的は何ですか?

Lastpassが「100,000ラウンド」を実行しているのを見ましたが、それが正確に何を意味するのかわかりません。

ここで暗号化の世界に真新しい:)

15
v15

「エントロピー」と呼ばれるものを作成しています。コンピュータ内の乱数ジェネレータは、ソフトウェア内に実装されている場合、せいぜい疑似ランダムにしかできません。疑似乱数ジェネレータ(PRNG)はシードで始まります。シードがよく知られている場合、PRNGアルゴリズムの知識がある人なら誰でも、あなたが導出したものと同じ値を導出できます(これは、シミュレーションなど、要素が必要な場合に実際に非常に適しています)再現性の問題-暗号には適していません。そのため、よく知られていないシードから開始する必要があります。伝統的に(暗号ではなく!)このシードはコンピューターの時刻でした。しかし、暗号では、これよりも強いランダム性。

多くの商用環境では、乱数ジェネレーター(RNG)がハードウェアベースの「ノイズソース」に基づいているという要件がよくあります。これは、ランダムなネットワークパケットデータ、検出器に当たる光子の数、センサーを通過する空気の速度、または完全にランダムと見なされる可能性のあるものの組み合わせなどです。

残念ながら、これらのハードウェアベースのノイズ源は、通常、消費者環境で広く使用されているわけではありません。したがって、次善の策は、ハードウェアベースのノイズを他の何かから引き出すことです。多くの暗号化システムは、これを取得するためにマウスを動かす人間を使用します。人間がマウスを円にしたり前後に動かしたりしたとしても、PRNGをシードするための妥当なレベルのエントロピーを提供するために、通常、マウスパスの偏差には実際の実際のランダム性が十分にあります。

環境からのエントロピーの実際の例については、宝くじの檻の中で回転している空気で吹き飛ばされたボールだけを見てください。

「ラウンド」はエントロピー収集とは関係がなく、特定のアルゴリズムが実行される回数と関係があります。ほとんどの場合(?)フィードバックメカニズムがあり、1つのラウンドが後のラウンドに影響を与えることができます。ラウンド数を増やすと、データの暗号化/復号化にかかる時間が長くなります。これは、ブルートフォースの解読作業を真剣にスケール解除できるため、重要です。もちろん、暗号化の取り組みも遅くなります。

24
logicalscope

ポイントは エントロピー を提供することです。 Truecryptはボリュームの秘密鍵を生成する必要があります。 ランダム ビットの束を生成することにより、これを行います。ここで(暗号化ではよくあることですが)、重要なことは、キーを構成するビットが統計的な意味でランダムであることではなく、攻撃者がキーを予測または再現できないことです。コンピュータは確定的なマシンです¹:攻撃者がキーの生成を開始したときの状態がわかっている場合、攻撃者はTruecryptを実行して同じキーを生成できます。

マウスを動かすことで、攻撃者が再現できない入力を提供しています。入力する情報が多いほど、再現するのが難しくなります。たとえば、コンピュータが左または右に1つのモーションしか記録しなかった場合、キーは2つしか存在せず、攻撃者は両方を試すことができます。キーは1ビットのエントロピーのみを持ちます(キーの長さに関係なく)。理想的には、キーは完全にランダムである必要があります。たとえば、キーが128ビットのキーである場合、乱数ジェネレーターは128ビットのエントロピーを使用できる必要があります。人間の動きはある程度予測可能ですが(マウスを2メートル左に移動することはありません)、移動するほど、プールにエントロピーを供給します。

マウスの動きは100,000ラウンドとは関係ありません。ラウンドは別の問題であり、攻撃者がpasswordを再現するのがどれほど難しいかに関連しています。人間は複雑なパスワードを選択して記憶することで悪名高いので、攻撃者はすべてのもっともらしいパスワードを力ずくで試すことができます。このため、パスワードを使用する暗号化システムでは、パスワードをそのまま使用するのではなく、パスワードに対して何度か計算を実行します(たとえば、暗号ハッシュ、たとえば PBKDF2 が最近推奨されています)。この計算は高価です。実行時間はラウンド数に比例します。システムは、この反復計算をパスワード試行ごとに1回実行する必要があります。攻撃者は、パスワードの試行ごとに1回実行する必要もあります。ボリュームをマウントするときに、システムがパスワードを処理するのに10マイクロ秒ではなく1秒かかる場合、それは大した問題ではありません。パスワードの処理は、CPUを使用するもののごく一部にすぎないためです。しかし、CPUの時間をすべてブルートフォースに費やしている攻撃者にとって、1秒あたり1回のクラッキング試行しか実行できず、CPUあたり100,000回のクラックができないのは大きな打撃です。

¹ 一部のコンピューターには、ハードウェア乱数ジェネレーターがあり、物理的に予測できない(または少なくとも非表示で予測が非常に難しい)ソースから乱数を導き出します。核崩壊はこれには良いが実用的ではない。モバイルデバイスでは、カメラのホワイトノイズはかなりうまく機能します。しかし、多くのコンピューターにはそのようなハードウェアランダムジェネレーターがありません。

Truecryptは、MOUSEHOOKSTRUCT構造のCRC32を作成します。これは、Windowsによって入力され、マウスを動かすとTruecryptによって定義されたコールバック関数に渡されます。定義を見てください:

http://msdn.Microsoft.com/en-us/library/windows/desktop/ms644968%28v=vs.85%29.aspx

呼び出し間で変化しないhwndなどのメンバーを含め、構造体全体が使用されます。ヒットテスト機能により、マウスをウィンドウの境界上に移動すると、間違いなくエントロピーが向上します。または多分それを弱めます。あなたはそれを熟考することができます。

構造体のCRCがTruecryptのコールバックが最後に実行されたときと異なる場合、GetTickCount()によって返された32ビットのティックカウントのCRC32を作成します。デフォルトでは、構造体のCRCとティックカウントが加算され、RIPEMD160でハッシュされます。結果のハッシュは、XOR操作でランダムプールを変更するために使用されます。

それを見ると、このプロセスが実際にどれほどランダム性を追加するのか不思議に思います。 y、x座標には、取り得る値の範囲が広すぎません。ウィンドウハンドルは、特定のキー生成ではランダムですが、マウスがサンプリングされるたびに変更されません。ヒットテストでは、少数の列挙値が返される場合があります。マウスでの特定の動作により、常に単一の値が返されます。詳細情報へのポインタがあります。これがいつ設定されるかはわかりません。

2
Anonymous

疑似乱数ジェネレータを使用した乱数の生成は、ウルトラパラノイドによって疑わしく扱われる可能性があるため、乱数の一部をユーザー定義の入力にリンクすると、「安全」であるという確信が得られます

1
Rory Alsop