2

У нас есть устаревшая часть нашего классического приложения ASP, в котором используется некоторый код, который должен шифровать/расшифровывать строки с помощью Rijndael (AES). Этот код был найден по адресу the Internet here (Блочный шифр Rijndael AES (версия VB)). Я уже нашел вопрос о SO, который ссылается на эту точную библиотеку и который ask almost the same thing as me, но я подозреваю, что хотя бы одна вещь идет не так (кроме добавления длины данных для шифрования в начале массива байтов). Реализация vbScript не похожа на добавление IV на данные для шифрования. Таким образом, я не в состоянии соответствовать такое же шифрование с RijndaelManaged поскольку оно:Как зашифровать AES в .NET без IV

  1. автоматически создает различный IV каждый раз, когда
  2. абсолютно требует капельницу

ли кто-нибудь знает, если это возможно AES шифрует что-то в .Net без указания IV (пустой)?

+0

Я не понимаю вопрос 100%. Почему вы должны соответствовать (обычно имеет значение только то, что дешифрование работает, а не то, что одни и те же зашифрованные данные несколько раз выглядят одинаково при зашифрованном виде). ​​ –

+0

На самом деле, приложение Classic ASP шифрует и расшифровывает строки AES, но в основном расшифровывает строки, исходящие из. Net, поэтому мне нужно зашифровать AES.Net, и иметь возможность расшифровать эту строку в классическом ASP с использованием vbScript AES (что, как представляется, не поддерживает IV), поскольку vbScript не поддерживает AES изначально. – MaxiWheat

+0

А, я понимаю, спасибо. –

ответ

7

Оба кода, которые вы используете, и решение вашей проблемы полностью небезопасно. Во-первых, * ВЫ НЕ ДОЛЖНЫ БЫТЬ ПОД ЛЮБЫМИ ОБСТОЯТЕЛЬСТВАМИ ИСПОЛЬЗУЙТЕ КРИПТИЧЕСКУЮ БИБЛИОТЕКУ НЕКОТОРЫЕ СЛУЧАЙНЫЕ ПАРНИКИ WROTE * Период, конец истории. Оба окна и .net имеют надежные, проверенные библиотеки шифрования. У них нет таких вещей, как проблемы с таймингами, прямо на заднем дворе или просто модные вещи, которые никто не знал бы о крипто.

Дело в том, что библиотека, о которой вы упоминаете, поддерживается только ECB mode. Это совершенно небезопасно, и никто, кто знал, что они делают, это сделает. Хотя есть куча причин для этого, лучшая демонстрация Ф.О. почему бы не сделать это заключается в следующем:

enter image description here

Это ECB зашифровано изображение линуксового penguine. Не очень безопасно?

+0

Существуют приложения, в которых ЕЦБ является безопасным и соответствующим. – erickson

+0

Очень мало и очень специфические вещи, которые маловероятны, что делает простой веб-сервис, но да, они существуют. Тем не менее, писать криптографическую библиотеку, которая поддерживает только очень любительский час. – imichaelmiers

+1

Написание криптографической библиотеки - это очень любительский час. – erickson

1

Явно установить свойство вашего шифрования Mode на ECB.

ECB небезопасен, если простые тексты, которые вы шифруете, являются короткими, случайными, уникальными строками. Полезно, например, шифровать ключ сеанса или другой криптографический ключ.

+0

Или счетчик, как в AES в режиме CTR. – Cheeso

2

Нет, вы не можете зашифровать что-либо в режиме CBC без IV. Вы можете, однако, явно установить значение IV в ноль. Поскольку IV является XOR'ed с первым простым блоком, установка IV для всех нулей эквивалентна отсутствию IV.

Это всего лишь ответ на ваш вопрос, вы можете прислушаться ко всем другим советам по безопасности, предоставленным вам до сих пор. Вы также можете проверить, действительно ли код использует шифрование в режиме CBC, для которого требуется IV.

капельницу для CBC шифрование режима всегда точно один блок размера (16 байт для AES, но использовать метод getBlockSize() всякий раз, когда имеются.