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,还是存在隐藏的非正交性来绊倒我,使结果不安全?
发布于 2021-01-22 06:57:20
创建者将“难以误用”作为设计目标,特别是接口“安全保证”的概念。(https://github.com/google/tink/blob/master/docs/SECURITY-USABILITY.md)
“例如,如果底层加密模式要求非does,如果重用nonces,则Tink不允许用户传递非does。”
在本例中,我可以看到这是如何应用的,但是有一个不推荐的类(com.google.crypto.tink.hybrid.HybridKeyTemplates)执行您所描述的操作。它有一个公共方法createEciesAeadHkdfKeyTemplate,它接受所有内部参数(src/src/main/java/com/google/crypto/tink/hybrid/HybridKeyTemplates.java#L127)。
https://stackoverflow.com/questions/65821910
复制相似问题