私たちはクライアントの敷地内でサーバーを実行している小さなスタートアップであり、特定のファイルはそのサーバーで暗号化しておく必要があります。特定のUSBドライブを(その内部に秘密キーを挿入して)接続した場合にのみ、復号化を可能にしたいと考えています。これの無料の実装はありますか? GPGを使用してみましたが、秘密キーを一時的に保存することはできません(SSHとは異なります)。
私はそのアプローチを使用しません。 USBドライブをマウントしたり、そこからファイルを読み込んだりすると、そのデータのあらゆる種類のコピーがOSのメモリやログなどに保存される可能性があります。これを安全にするために、特に攻撃者がサーバーのメモリダンプを取得したり、サーバーにマルウェアを仕掛けたりする機能。
より良いアプローチは、サーバー自体が秘密キーに触れる必要がないように、ある種のUSBハードウェア暗号モジュールを使用することです。アイデアは、暗号化キーが暗号化デバイス上に存在し、決してそれを残さないということです。暗号化/復号化するデータをデバイスに送信し、暗号化操作を実行して結果を返します。
このアプローチでは、サーバーが秘密鍵に触れたことがないため、サーバーに秘密鍵のキャッシュが存在しないことが保証されます。USBデバイスを引き抜くと、サーバーは暗号化操作を実行できなくなります。あなたが欲しいものです。
探すことができるいくつかの技術/検索用語は次のとおりです。
サーバーが実際にキーに触れないように、デバイス上で暗号化が行われるUSBスマートカード、TPM、軽量HSMなどのハードウェアベースのソリューションを検討することをお勧めします。
1つの可能性は、luks/cryptsetupを使用して暗号化されたパーティションまたはコンテナーファイルを使用することです。復号化キーをサムドライブのファイルに保存し、/etc/crypttab
で場所を設定できます。このように、暗号化されたパーティションは、USBドライブが利用可能な間のみマウントできますが、USBドライブを取り外した場合でも、手動でマウント解除するまで読み取り可能です。
もちろん、キーはドライブから簡単に複製できますが、スマートカードを使用したくないと上記で述べたので、それに応じる必要があります。