С теоретической точки зрения нет, это небезопасно.Не то чтобы я мог точно определить настоящую атаку;но результатом обмена ключами Диффи-Хеллмана является элемент группы, состоящий из q элементов и обеспечивающий максимальную защиту sqrt (q) .Усечение частей кодирования этого элемента не выглядит хорошей идеей ...
"Правильный" способ заключается в использовании односторонней функции получения ключа.Проще говоря, обработайте вывод Диффи-Хеллмана с хорошей хеш-функцией, такой как SHA-256 , и используйте результат хеширования в качестве ключа.Время хэширования будет незначительным в отношении шага Диффи-Хеллмана.Java уже включает в себя прекрасные реализации SHA-256 и SHA-512, и если вы после совместимости с очень старыми реализациями Java (например, Microsoft JVM, которая шла с Internet Explorer 5.5), то вы можете использовать независимую реализацию Java SHA-2.например, в sphlib .Или, возможно, переопределить его из спецификации (это не сложно): FIPS 180-3 (файл PDF) .
Если вам требуется более 128 бит для вашего ключа, это означает, что выпутешественник во времени с 2050 года или около того;128 бит (много) более чем достаточно, чтобы защитить вас на некоторое время, при условии, что вы используете правильную симметричную схему шифрования.
Кстати, Blowfish больше не рекомендуется.Он имеет 64-битные блоки, что создает проблемы, когда длина зашифрованных данных достигает нескольких гигабайт, размер, который в настоящее время не так велик.Вам лучше использовать 128-битный блочный шифр, такой как AES .Кроме того, в любой серьезной симметричной системе шифрования вам потребуется проверка целостности ключа.Это можно сделать с помощью MAC (кода аутентификации сообщений), такого как HMAC , который сам построен на основе хеш-функции (опять же, прост в реализации, и в sphlib есть реализация Java).Или, что еще лучше, используйте AES в комбинированном режиме шифрования / MAC, который будет обрабатывать сложные детали для вас (потому что правильно использовать блочный шифр не просто);lookup CWC и GCM (оба не имеют патентов; последний был одобрен NIST).