web-dev-qa-db-ja.com

USBドライブにキーが保存されているファイルのキーベースの暗号化

私たちはクライアントの敷地内でサーバーを実行している小さなスタートアップであり、特定のファイルはそのサーバーで暗号化しておく必要があります。特定のUSBドライブを(その内部に秘密キーを挿入して)接続した場合にのみ、復号化を可能にしたいと考えています。これの無料の実装はありますか? GPGを使用してみましたが、秘密キーを一時的に保存することはできません(SSHとは異なります)。

4
Grim Reaper

私はそのアプローチを使用しません。 USBドライブをマウントしたり、そこからファイルを読み込んだりすると、そのデータのあらゆる種類のコピーがOSのメモリやログなどに保存される可能性があります。これを安全にするために、特に攻撃者がサーバーのメモリダンプを取得したり、サーバーにマルウェアを仕掛けたりする機能。

より良いアプローチは、サーバー自体が秘密キーに触れる必要がないように、ある種のUSBハードウェア暗号モジュールを使用することです。アイデアは、暗号化キーが暗号化デバイス上に存在し、決してそれを残さないということです。暗号化/復号化するデータをデバイスに送信し、暗号化操作を実行して結果を返します。

このアプローチでは、サーバーが秘密鍵に触れたことがないため、サーバーに秘密鍵のキャッシュが存在しないことが保証されます。USBデバイスを引き抜くと、サーバーは暗号化操作を実行できなくなります。あなたが欲しいものです。

探すことができるいくつかの技術/検索用語は次のとおりです。

  • uSBスマートカード
  • 暗号トークン
  • PKCS#11トークン
  • TPM(トラステッドプラットフォームモジュール)
  • HSM(ハードウェアセキュリティモジュール)

サーバーが実際にキーに触れないように、デバイス上で暗号化が行われるUSBスマートカード、TPM、軽量HSMなどのハードウェアベースのソリューションを検討することをお勧めします。

3
Mike Ounsworth

1つの可能性は、luks/cryptsetupを使用して暗号化されたパーティションまたはコンテナーファイルを使用することです。復号化キーをサムドライブのファイルに保存し、/etc/crypttabで場所を設定できます。このように、暗号化されたパーティションは、USBドライブが利用可能な間のみマウントできますが、USBドライブを取り外した場合でも、手動でマウント解除するまで読み取り可能です。

もちろん、キーはドライブから簡単に複製できますが、スマートカードを使用したくないと上記で述べたので、それに応じる必要があります。

2
mat