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()
交换例如for似乎相当简单AesGcmKeyManager.aes256GcmTemplate()
,除了createKeyTemplate
是私有的,并且 THAT 使用包私有方法,并且EciesAeadHkdfPrivateKeyManager
是最终的,总体而言,它似乎正在竭尽全力防止我们弄乱这些参数。这有什么原因吗?我应该从 Tink 源代码中重新构建我自己的修改版本和/或只是使用反射来绕过private
,还是有隐藏的非正交性让我绊倒并使结果不安全?