PuttyGenを使用して、さまざまなWindowsコンピューター用のsshキーを生成しています。特にウィンドウペイン内でマウスを回す形で、多くの手動ユーザー入力が必要です。 WindowsにもLinuxのような乱数ジェネレータがないため、これが必要であると理解しています/dev/random
またはPuttyGenはそれにアクセスできません。しかし、これは私に考えさせられました:良いSSH-RSA鍵を生成するのに十分ランダムな小さな領域でマウスを動かしていますか?それらをLinuxマシンで生成し、フラッシュドライブまたは何かを介してWindowsマシンに移植する必要がありますか(キーの移動に関するセキュリティの問題があります)?
これは、マウスの動きにおけるエントロピーの量と、キーを与えるためにどのように消化されるかによって決まります。
私は この投稿 を見つけました。これはマウスの動きの実験について説明しています。もちろん、ピクセル全体に丸められる不規則な間隔でサンプリングされたスムーズなマウスの動きを使用しました。これは、イベントごとに数ビットのエントロピーを伴う加速度のガウス分布につながることを示しています。それは数秒の動きが128ビットのエントロピーを生成すると推定しました。
その投稿の実験で注目に値するのは、滑らかな動きに基づいているということです。 PuttyGenを使用すると、マウスをぐるぐる回せます。それはいくつかの予測不可能な値を与えます。何千人ものボランティアがマウスを振って、各トレースをSHA256などで実行した場合、予測可能性は期待できません。
別の答えは、PuttyGenは暗号化キージェネレータアルゴリズムを介してマウストレースを実行するとしています。トレースでエントロピーをうまく活用することが期待できます。したがって、これは満足できるアプローチのようです。
Update/dev/urandom
を使用するアプリケーションに慣れているため、PuttyGenがマウスの動きを使用しているのではないかと思われます。しかし、非常に少数のシステムには ハードウェア乱数ジェネレーター 疑似乱数の標準的なメカニズムは デバイスドライバーからのノイズのサンプル であり、それをハッシュします。スムーズなマウスの動きをサンプリングするとノイズが発生し、ユーザーがそれを振ると予測不能になるため、PuttyGenは通常の安全な乱数ジェネレータと同等の処理を行っています。どうして? Linuxが行うことをウィンドウが信頼していないか、攻撃者から公式の乱数を隠すことがウィンドウを信頼していないか、攻撃者が公式のソースを予測可能なものに置き換えることができると疑っています。ユーザーが観測不可能な疑似乱数の生成を手助けすることを望まない場合は、おそらく非常に多くあります。したがって、PuttyGenは、エンドユーザーが安全なキーを取得するために時間と労力を費やす高パラノイアシナリオの特別なケースです。
適切なSSH-RSAキーを生成するのに十分なランダムな小さな領域でマウスを旋回させていますか?
はい、そうです。マウスの動きを誰も予測することはできず、パターンをコピーするように求められたとしても、それは不可能です。
他の場所でランダムコードを生成する必要はありません[〜#〜] if [〜#〜] Windowsコンピューターが、キー生成を傍受できるマルウェアに感染していないことを確認できます。新しくインストールされ、切断されたWindowsマシンは十分に安全です。
2019年の時点で、答えは単に「わからない」と思われます。おそらくそれは大丈夫です。
これは、Puttygenがキーを生成する方法です。
[A] Puttygenのソースコードをざっと見ると、マウスの動きだけに基づいて秘密鍵が生成されているようです。偶数セルでのマウス移動イベントの時間と奇数セルでのマウス位置で配列を埋め、その上にいくつかの魔法のシャッフルを振りかけ、配列を引数としていくつかのRSA/DSA/EC *キージェネレーターを呼び出します。
マウスの動きの予測不可能性を支持または否定する証拠を探す際に、 私は何も見つかりませんでした 。このトピックについて誰も調査を行っていないようです。
今のところ、安全であると確信できる方法を使用することをお勧めします。エントロピーはシステムソースから収集する必要があるため、最新のオペレーティングシステムはこれらを提供します(Linuxでは/dev/urandom
、Microsoft WindowsではCryptGenRandom
)。個々のプログラムは適切なランダム性を生成する機会がはるかに少ないため、ソフトウェアはシステムのランダム性のソースを使用する必要があります。 ssh-keygen
のようなソフトウェアがこれを行います。