Алгоритм отклонения шифрования Veracode — какой мне следует использовать?

Я унаследовал проект Java (Spring) на этапе обслуживания, который только что прошел через Veracode в первый раз, и единственный оставшийся недостаток High — это сообщение о «слабом или сломанном» алгоритме шифрования. Я бы предпочел потратить время на изучение криптографии, но этот проект находится в разработке, поэтому мне нужно начать с более быстрого решения, чтобы обеспечить безопасность этого приложения.

Вот строка, о которой Veracode сообщает конкретно:

Cipher cipher = Cipher.getInstance("PBEWITHSHA1ANDDESEDE");

Veracode не предоставляет информацию о:

  • Почему этот алгоритм неисправен/слаб
  • Какие алгоритмы могут обеспечить достаточное количество заменителей
  • Любые другие проблемы, о которых следует помнить при выборе соответствующего алгоритма.

Чем можно заменить "PBEWITHSHA1ANDDESEDE"? Потребует ли это других рефакторингов, или это так же просто, как замена строкового литерала? Я хотел бы дать больше спецификаций, чтобы помочь нам определить, какой алгоритм шифрования будет лучшим, но, поскольку Veracode не предоставляет их, единственной спецификацией является «алгоритм шифрования, который удовлетворяет Veracode».


person Steverino    schedule 26.05.2017    source источник
comment
PBE не так хорош, SHA-1 считается сломанным (но не для всех случаев использования), а Triple DES тоже не так хорош. Есть много возможных замен. Я бы рекомендовал PBKDF2 с SHA-256 и AES, но я не знаю, есть ли такой вариант алгоритма.   -  person Artjom B.    schedule 27.05.2017
comment
Учитывая, что и SHA1, и DES на данный момент не работают, вполне логично, что они его отвергают. Попробуйте SHA256 с AES?   -  person Luke Joshua Park    schedule 27.05.2017


Ответы (1)


Почему этот алгоритм неисправен/слаб

В основном он неисправен, потому что использует PBKDF1 вместо PBKDF2 (или другую / лучшую функцию получения ключа на основе пароля). Использование тройного DES также является небольшим недостатком, поскольку при определенных настройках он может обеспечить только около 80 бит безопасности. SHA-1 не работает, и это вполне может быть причиной того, что Veracrypt упоминает «слабые или сломанные» алгоритмы шифрования, но на самом деле использование SHA-1 в функции получения ключа считается безопасным.

Какие алгоритмы могут обеспечить достаточное количество заменителей

Если вы хотите полагаться на встроенную функциональность, то PBEWithHmacSHA256AndAES_128 будет прямой заменой. Другие схемы могут включать другие функции вывода, такие как bcrypt, scrypt или Argon2, и другие режимы шифрования, такие как AES-GCM.

Любые другие проблемы, о которых следует помнить при выборе соответствующего алгоритма.

CBC, используемый в приведенных выше схемах, не является безопасным для безопасности транспортного режима, если не добавлен MAC (аутентификация сообщения); он безопасен только для шифрования на месте, где атаки оракула заполнения не применяются. Это также относится к вашей текущей схеме.

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

Никакая схема PBE (включая ту, которую вы уже используете) не является требованием к реализации для Java-совместимых JRE. Хотя альтернативные JRE, вероятно, предоставят реализацию, я бы не стал рассчитывать на ее присутствие или правильную реализацию в версиях Java других поставщиков.

person Maarten Bodewes    schedule 26.05.2017
comment
Veracode идентифицировал PBEWithHmacSHA256AndAES_128 как сломанный или опасный криптографический алгоритм. Мы рассматриваем возможность связаться с Veracode, чтобы узнать, как решить эту проблему или какие альтернативы они рекомендуют. - person Steverino; 31.05.2017
comment
Как и в случае с любой криптографией на основе пароля и CBC, здесь есть много «если» и «но», но я бы не назвал это сломанным. - person Maarten Bodewes; 31.05.2017