2016-02-01 2 views
1

У меня есть приложение для кодирования, написанное на C#, где пользователи могут факультативно шифровать сообщения. Я использовал класс в this answer, и оказывается, что я нахожусь в хорошей компании, потому что я нашел severalplacesonlinethatusethe exactsame code (один из которых является Netflix's Open Source Platform).Безопасность шифрования AES с постоянной солью

Однако комментарии к этому ответу (а также изменения в этом ответе) заставили меня поверить, что этот метод был небезопасным. Вместо этого я решил использовать класс в this answer to the same question.

Насколько безопасно шифрование AES, если вы используете постоянную соль? Как легко может быть нарушен этот метод? Я признаю, что у меня очень мало опыта в этой области.

ответ

1

AES - это блок-шифр. Вход блока блока - это ключ и блок открытого текста. Блочный шифр обычно используется в блочном шифре mode of operation. Во всех безопасных режимах работы используется вектор инициализации или IV. В противном случае идентичный открытый текст будет шифровать одинаковый зашифрованный текст (для одного и того же ключа), и это утечка информации.

Соль не используется AES или режимами работы. Он обычно используется как вход для функций деривации ключей (KDF), особенно для функций определения ключа на основе пароля (PBKDF). Dot NET's Rfc2898DeriveBytes реализует функцию PBKDF2, как определено в: вы догадались бы - RFC 2898: "PKCS #5: Password-Based Cryptography Specification Version 2.0".

Если вы используете статическую соль в PBKDF2, вы получите тот же ключ, что и вывод (для того же числа итераций). Теперь, если вы когда-нибудь пропустите полученный ключ, тогда весь ваш зашифрованный текст будет уязвим. И если вы будете использовать несколько паролей, то злоумышленник сможет построить таблицу радуги; коэффициент PBKDF2 станет менее важным; злоумышленник может просто создать одну таблицу, а затем попробовать все полученные ключи на всех возможных зашифрованных текстах.

Так как соль на самом деле не используется для AES, это не имеет особого значения для безопасности. Однако это еще и ужасный грех, даже хуже, чем использование итерации по умолчанию для PBKDF2/Rfc2898DeriveBytes.


Обратите внимание, что ужасные грехи безопасности совершаются большим количеством людей на ежедневной основе. То, что существует много многих людей, которые ошибаются, не говорит вам, что вы находитесь в «хорошей компании». Что есть 289 upvotes, просто говорит вам, что ответы SO о криптографии не следует доверять на основании подсчета голосов.

+0

* «Обратите внимание, что ужасные грехи безопасности совершаются большим количеством людей на ежедневной основе. [...] Что есть 289 upvotes, просто говорит вам, что ответы SO о криптографии не должны доверяться на основе подсчета голосов». * - ДА.Пойдем, возьмем некоторые мастурбаторы, чтобы сгладить последствия таких дерьмовых ответов. Btw, другой downvote - мой. :) –

+0

«Хорошая компания», я просто имел в виду, что существуют десятки проектов, доступных для поиска Google, которые используют тот же код без изменений (с идентичной солью). Это и тот факт, что у этого есть более чем 280 upvotes, я нахожу удивительным, узнав его очевидные недостатки безопасности. –

+0

Это правда, что утечка ключа - это конец безопасности, но и утечка соли + секрет. Я не вижу причин предполагать, что это будет более или менее вероятным, чем другое. Поэтому я не вижу, как эта статическая соль вызывает ухудшение безопасности. – usr

0

Соль существует по причине. Это позволяет использовать тот же ввод, который будет зашифрован по-разному. Если злоумышленник действительно настаивал, он может найти некоторые шаблоны, которые повторяются в шифровании без соли, и в итоге могут с легкостью добраться до вашего ключа. Тем не менее, привязанность должна работать очень тяжело. Использование постоянной соли равнозначно тому, что соль вообще не используется. И настоятельно рекомендуется использовать его, так как он не влияет на процесс дешифрования.

+1

Нет, IV позволяет зашифровать один и тот же ввод по-разному. Ключ всегда защищен блочным шифрованием - ни один шифрованный текст не расскажет вам ничего о ключе (за исключением, возможно, проверки ключа после того, как вы это догадались). –

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