【发布时间】:2021-01-21 05:59:26
【问题描述】:
Google Tink 支持“混合加密”——一种用非对称密钥加密对称密钥、用对称密钥加密明文并将两个密文捆绑为一条消息的便捷方法。
不过貌似基本支持两组参数组合:
EciesAeadHkdfPrivateKeyManager.eciesP256HkdfHmacSha256Aes128GcmTemplate();
EciesAeadHkdfPrivateKeyManager.eciesP256HkdfHmacSha256Aes128CtrHmacSha256Template();
在内部,这些映射到例如
public static final KeyTemplate eciesP256HkdfHmacSha256Aes128GcmTemplate() {
return createKeyTemplate(
EllipticCurveType.NIST_P256,
HashType.SHA256,
EcPointFormat.UNCOMPRESSED,
AesGcmKeyManager.aes128GcmTemplate(),
KeyTemplate.OutputPrefixType.TINK,
EMPTY_SALT);
}
交换似乎相当简单,例如AesGcmKeyManager.aes128GcmTemplate() 代表 AesGcmKeyManager.aes256GcmTemplate(),除了 createKeyTemplate 是私有的,并且使用包私有方法,而 EciesAeadHkdfPrivateKeyManager 是最终的,总的来说,它似乎正在竭尽全力防止我们弄乱这些参数。这有什么原因吗?我应该从 Tink 源代码中重新构建我自己的修改版本和/或只使用反射绕过 private,还是有隐藏的非正交性让我绊倒并导致结果不安全?
【问题讨论】:
-
澄清一下:您对 Tink 混合加密很满意,但您想将加密算法从“AES GCM 128”更改为“AES GCM 256”?
-
@MichaelFehr 基本上,是的。这个问题稍微笼统一些——更改混合加密的参数——但我对 ATM 感兴趣的具体参数是 AES 密钥大小。
标签: java cryptography tink