Spring Security

Spring Vault 通过为 BytesKeyGeneratorBytesEncryptor 提供实现来与 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 毕竟是一种网络服务,每次操作都会产生延迟。 大量使用加密或随机字节生成的组件可能会在吞吐量和性能方面有所不同。