FIPS, как я понимаю, до сих пор позволяет TDEA для использования с 3-х независимых ключей (3 ключевых 3DES). Разумеется, использование 3DES с одним ключом DES и DES в течение некоторого времени небезопасно. Использование 2-х клавишных 3DES (DES-ABA) теперь уже не является совместимым с FIPS.
К сожалению, Java поддерживает только 3 ключевых 3DES (DES-ABC). Это означает, что многие разработчики просто скопировали первый ключ DES, который будет использоваться в качестве третьего ключа, когда им потребуется реализовать DES-ABA. Единственный способ обнаружить такие ключи - сравнить первую и последнюю ключевую часть ключа 3DES друг с другом.
Чтобы использовать 3DES самым безопасным способом, просто сгенерируйте 192-битный ключ, используя «DESede» KeyGenerator
.
KeyGenerator keyGen = KeyGenerator.getInstance("DESede");
keyGen.init(168);
SecretKey desABCKey = keyGen.generateKey();
Обратите внимание, что это создает 192 битный ключ, где 24 бит четности правильно установлены (168 бит эффективен, давая вам около 112 бит безопасности).
Настройка режима FIPS не поможет, так как это только вариант для провайдера JSSE Sun, который реализует TLS. Это may help, если у вас есть поставщики криптографии от других поставщиков.
Что касается различия между слабыми и полусладкими: это, вероятно, относится к ключам, используемым для базового шифрования DES. Как правило, вам не следует проверять сами ключи, чтобы они были слабыми, а скорее реализацией. Пока ключи имеют достаточную энтропию, вероятность получения слабых клавиш может быть безопасно проигнорирована.
Вы должны использовать AES, поскольку это является более безопасным, быстрее, на будущее, имеет больший размер блока, ни слабых ключей, полностью рандомизированные ключи (и т.д. и т.п. и т.д.).
Используйте AES вместо 3DES, если у вас есть выбор. 3DES достаточно силен для злоумышленника среднего уровня. – i486
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что речь идет о безопасности шифрования, а не о программировании. Вместо этого вопрос лучше подходит для [security.se]. –
Вы задаете разные вопросы в заголовке вопроса и вопросе. Пожалуйста, выберите один и придерживайтесь его. Подсказка: титульный вопрос основан на мнениях и будет закрыт. –