Объединение нескольких криптографических ключей для генерации ключа шифрования - PullRequest
0 голосов
/ 03 мая 2018

У нас есть система, имеющая несколько секретных ключей (например, один для пользователя и один для нас). Мы хотим зашифровать данные так, чтобы все эти ключи были доступны для дешифрования.

Я думаю, что правильный способ сделать это - использовать какую-то функцию получения ключа для объединения исходных секретных ключей и использовать результат в качестве ключа шифрования.

Учитывая, что все исходные ключи являются криптографически сгенерированными 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 ().

Есть ли какие-либо проблемы или риски с этим подходом?

1 Ответ

0 голосов
/ 04 мая 2018

Использовать конвертное шифрование. Лучше не объединять хэши и не выполнять двойное шифрование, особенно это может привести к атакам типа «посередине».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...