У нас есть система, имеющая несколько секретных ключей (например, один для пользователя и один для нас). Мы хотим зашифровать данные так, чтобы все эти ключи были доступны для дешифрования.
Я думаю, что правильный способ сделать это - использовать какую-то функцию получения ключа для объединения исходных секретных ключей и использовать результат в качестве ключа шифрования.
Учитывая, что все исходные ключи являются криптографически сгенерированными SecretKeys, используя следующее:
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");
Затем используйте полученный mergedSecretKey в вызовах Cipher.init ().
Есть ли какие-либо проблемы или риски с этим подходом?