0

我们有一个具有多个 SecretKey 的系统(例如,一个给用户,一个给我们)。我们希望以一种需要所有这些密钥都可用才能解密的方式加密数据。

我认为正确的方法是使用某种密钥派生函数将源 SecretKeys 合并在一起,并将结果用作加密密钥。

鉴于所有源密钥都是使用以下密码生成的 SecretKey:

KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(256);
return generator.generateKey();

仅使用源密钥的加密哈希是否安全,或者是否可能以某种方式引入漏洞?像这样:

SecretKey secretKey1 = ...
SecretKey secretKey2 = ...
SecretKey secretKey3 = ...

MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(secretKey1.getEncoded());
md.update(secretKey2.getEncoded());
byte[] digest = md.digest(secretKey3.getEncoded());

SecretKey mergedSecretKey = new SecretKeySpec(digest, "AES");

然后在对 Cipher.init() 的调用中使用生成的 mergeSecretKey。

这种方法是否存在任何问题或风险?

4

1 回答 1

1

使用封装加密。最好不要组合哈希或进行双重加密,尤其是后者会导致中间相遇攻击。

于 2018-05-04T19:49:28.797 回答