AES CTR без IV - один и тот же ключ для нескольких сообщений - безопасно? - PullRequest
0 голосов
/ 01 июля 2018

Я хочу создать веб-страницу в формате js, которая будет шифровать открытый текст, чтобы я мог отправить ее другу, который будет использовать эту же веб-страницу для расшифровки.

Мы будем использовать один и тот же секретный ключ и использовать его для нескольких сообщений.

Я знаю, что при использовании AES CBC - для каждого сообщения должен быть случайный iv, но я бы хотел использовать AES CTR.

Я буду использовать ключ 256, а не пароль.

У меня есть 2 вопроса:

  1. Могу ли я использовать один и тот же пароль несколько раз с CTR и без iv?
  2. Если я буду использовать CBC, безопасно ли отправлять iv в виде открытого текста вместе с зашифрованным сообщением?

Я использую aes-js и основные общие режимы работы:

https://github.com/ricmoo/aes-js#ctr---counter-recommended

https://github.com/ricmoo/aes-js#cbc---cipher-block-chaining-recommended

Я хочу максимально возможную безопасность.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Во-первых, нет такой вещи, как CTR или CBC с «без IV». Вы, вероятно, просто используете все нули в качестве IV. Всегда есть IV. (CTR называет его IV одноразовым).

CTR должен никогда, никогда повторно использовать пару nonce + Key. Это может полностью разрушить шифрование. Это основная причина избегать CTR, если вы не знаете, что делаете. Это трудно использовать правильно и имеет ужасные режимы отказа. (Тот факт, что WEP теперь считается полностью нарушенным, очень тесно связан с этим вопросом.) Я не говорю, что CTR плох при правильном использовании; Я говорю, что маленькие ошибки катастрофичны.

CBC должен никогда не использовать ключ IV +, но это не так разрушительно. Это основная причина того, что CBC является очень хорошим выбором для неспециалистов. Даже при неправильном использовании он относительно безопасен. Однако повторное использование пары IV + Key создает две основные проблемы:

  • Предлагает первые 16 байтов для расшифровки, а также дополнительные блоки, если два сообщения имеют одинаковый префикс.
  • Идентично шифрует идентичные сообщения (и идентичные префиксы одинаково). Это косвенно приводит к утечке существенной информации о сообщениях.

Стандартная конструкция, хорошо подходящая для неспециалистов, поскольку инструменты легко доступны на многих платформах и относительно просты в использовании, выглядит следующим образом:

Random IV + CBC-ciphertext + HMAC

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

CBC (а также CTR) не обеспечивает аутентификацию сообщения. Это может быть изменено в пути. Если злоумышленник знает текстовое сообщение, в некоторых случаях он может изменить зашифрованное сообщение, чтобы его можно было расшифровать известным способом. Например, если я знаю (или могу догадаться) сообщение «To Bob: $ 100», то можно изменить это сообщение, не зная пароля на «To Eve: $ 100». Аутентификация предотвращает это. Для проверки подлинности CBC используется HMAC (сначала шифрование, затем хеш).

Пример такого формата на практике приведен в формате RNCryptor , включая RNCryptor-js .

Мартен упоминает GCM, и я согласен с тем, что это отличная криптография, но я не согласен с тем, что ее должны использовать неспециалисты. В противодействии он имеет те же опасности, что и CTR. Если используется неправильно, он полностью разваливается (против CBC, который имеет гораздо более гладкую потерю безопасности). Тем не менее, это очень самоуверенная тема, и поклонники GCM не ошибаются. Я просто не согласен с тем, какой должна быть «стандартная лучшая практика для неспециалистов».

Для «Я хочу наилучшую возможную безопасность», вам обязательно нужно привлечь экспертов по безопасности. Выбор правильного режима блокировки является самой простой частью защиты системы, и есть много других подводных камней, которые так же важны.

0 голосов
/ 01 июля 2018
  1. Могу ли я использовать один и тот же пароль несколько раз с CTR и без IV?

Нет, в этом случае CTR будет действовать как временная панель, и вы потеряете большую часть безопасности.

  1. Если я буду использовать CBC, безопасно ли отправлять IV в виде открытого текста вместе с зашифрованным сообщением?

Использование CBC также небезопасно, так как вы можете стать жертвой атак оракула.


Используйте GCM с 12-байтовым случайным IV или - намного лучше - используйте TLS с предварительным общим ключом (PSK).

...