Spring Security

Spring Vault は、BytesKeyGenerator および BytesEncryptor の実装を提供することで Spring Security と統合します。どちらの実装も Vault の transit バックエンドを使用します。

例 1: VaultBytesKeyGenerator の例
VaultOperations operations = …;
VaultBytesKeyGenerator generator = new VaultBytesKeyGenerator(operations);

byte[] key = generator.generateKey();
例 2: VaultBytesEncryptor の例
VaultTransitOperations transit = …;

VaultBytesEncryptor encryptor = new VaultBytesEncryptor(transit, "my-key-name");

byte[] ciphertext = encryptor.encrypt(plaintext);

byte[] result = encryptor.decrypt(ciphertext);

Vault は、サーバー側のキー管理とともに JVM から切り離されたエントロピーソースをカプセル化します。これにより、アプリケーション開発者からの適切な暗号化 / 復号化の負担が軽減され、Vault のオペレータに負担が課せられます。Vault のオペレーターには通常、組織のセキュリティチームが含まれており、データが適切に暗号化 / 復号化されていることを保証できます。さらに、暗号化 / 復号化操作は監査ログに記録される必要があるため、復号化イベントはすべて記録されます。

バックエンドはキーのローテーションもサポートしているため、名前付きキーの新しいバージョンを生成できます。キーで暗号化されたすべてのデータは、最新バージョンのキーを使用します。以前に暗号化されたデータは、古いバージョンのキーを使用して復号化できます。管理者は、攻撃者が暗号文の古いコピーを取得して暗号文を正常に復号化できないように、復号化に使用できるキーの以前のバージョンを制御できます。

結局のところ、Vault はネットワーク化されたサービスであり、各操作に遅延が発生します。暗号化やランダムなバイト生成を多用するコンポーネントでは、スループットとパフォーマンスに違いが生じる可能性があります。