1

プログラムの後半で使用するSSHキーペアを生成する必要があるため、文字列として必要です。残念ながら、ssh-keygenユーティリティはSTDOUTなどへのキーの書き込みをサポートしていません。

したがって、「次善の策」はssh-keygen、出力を一時ファイルに書き込んでから、プログラムに読み戻すことです。ただし、これにより、システム上の他の誰かが秘密鍵ファイルを読み取るリスクが生じます(スクリプトはWebアプリによって実行されます)。

安全な方法でキーペアを生成するにはどうすればよいですか?

4

1 に答える 1

0

配布用の秘密鍵を生成するための完全に安全な方法はありません。最も安全な方法は、各クライアントにキーペアを生成させ、公開キーのみを送信させることです。

ただし、それが単に機能しない状況にあり、キーペアを一元的に生成することに専念している場合は、いくつかのオプションがあります。

これを行うハードウェアセキュリティモジュール(HSM)があります。あなたがそれを買う余裕があれば、これは行くための最良の方法です。

それが失敗した場合:

  1. Webアプリまたはキージェネレータラッパーが独自のユーザーで実行されていることを確認します(この回答の残りの部分では、このユーザーを「kguser」と呼びます)。
  2. パーミッション0700(chmodで設定)を使用して、kguserが所有するWebアクセス不可能なディレクトリを作成します
  3. キージェネレータラッパーが「umask0177」を設定していることを確認してください。作成するファイルが0600であることを確認する必要があります(kguserのみが読み取りと書き込みを行うことができます)
  4. 推測しにくい(ランダムUUIDなど)ファイル名を指定してキーを生成する
  5. chmod 0600キーファイルを生成するとすぐに、umask設定が保持されないか、変更された場合に備えて
  6. SSL/TLS接続を介して秘密鍵を送信する
  7. 秘密鍵ファイルを安全に消去します(例:Linuxの「shred」)
  8. cronジョブを使用して、数分より古い秘密鍵ファイルを定期的に見つけて安全に消去します(アプリケーションエラー、クラッシュなどのために残っているファイルをクリーンアップするため)

本当に妄想的な場合は、Webアプリケーションで独自の対称鍵を使用して書き込み時に暗号化し、ユーザーに送信するときに復号化することで、ディスク上で鍵が暗号化されるようにすることもできます。ただし、これによりキー管理が失敗する可能性が高くなるため、お勧めしません。

キーにパスフレーズを設定すると、そのパスフレーズをディスクに保存しない場合にも役立ちます。誰かがパスフレーズで保護されたキーをなんとか回復した場合でも、キーが役立つようにパスフレーズを推測する必要があります。ただし、これは、ユーザーがキーを使用するときにパスフレーズを提供する必要があることも意味します。これは、受け入れられる場合と受け入れられない場合があります。

于 2012-03-07T06:53:29.433 に答える