2015-09-02 2 views
-1

Согласно исследованию NIST 3DES не является хорошим шифром. Но после многих чтений я понимаю, что слабость заключается в реализации (с использованием слабой, полуслабой и комбинации), но не в спецификации.Как можно безопасно использовать 3DES в Java?

Мы используем Oracle JSSE/JCA (JDK 1.7). Как я могу проверить шифры 3DES слабее? Поддерживает ли режим FIPS?

Эталонные NIST SP800-57 part 1: Recommendation for Key Management (part 1)

+0

Используйте AES вместо 3DES, если у вас есть выбор. 3DES достаточно силен для злоумышленника среднего уровня. – i486

+2

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что речь идет о безопасности шифрования, а не о программировании. Вместо этого вопрос лучше подходит для [security.se]. –

+0

Вы задаете разные вопросы в заголовке вопроса и вопросе. Пожалуйста, выберите один и придерживайтесь его. Подсказка: титульный вопрос основан на мнениях и будет закрыт. –

ответ

1

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, поскольку это является более безопасным, быстрее, на будущее, имеет больший размер блока, ни слабых ключей, полностью рандомизированные ключи (и т.д. и т.п. и т.д.).

Смежные вопросы