Гарантирует ли шифрование целостность? - PullRequest
22 голосов
/ 07 сентября 2010

Можем ли мы предположить, что шифрование гарантирует целостность перед установкой безопасного программирования?

  • Хорошо ли подтвержден мой вопрос?
  • Если нет, то каковы уязвимости, приведите пример?

Ответы [ 3 ]

23 голосов
/ 07 сентября 2010

Нет. Это легко увидеть, если рассматривать одноразовый блокнот , простую (теоретически) идеально защищенную систему.

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

Это очевидный случай, но тот же вывод применим к большинству систем шифрования. Они обеспечивают только конфиденциальность, а не целостность.

Таким образом, вы можете добавить цифровую подпись . Интересно, что при использовании криптографии с открытым ключом недостаточно подписать, затем зашифровать (SE) или зашифровать, а затем подписать (ES). Оба из них уязвимы для атак воспроизведения. Вы должны либо подписать-зашифровать-подписать, либо зашифровать-подписать-зашифровать, чтобы иметь в общем безопасное решение. Эта статья подробно объясняет, почему.

Если вы используете SE, получатель может расшифровать сообщение, а затем повторно зашифровать его другому получателю. Это затем обманывает нового получателя о предполагаемом получателе отправителя.

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

10 голосов
/ 07 сентября 2010

Короче говоря, ответ - нет.Целостность и секретность сообщения различны и требуют разных инструментов.

Давайте рассмотрим простой бросок монеты, и в этом случае мы делаем ставку на результаты.В результате получается простой бул, и я шифрую его с помощью потокового шифра, такого как RC4, который выдает 1 зашифрованный бит, и я отправляю его вам по электронной почте.У вас нет ключа, и я прошу вас отправить мне ответ по электронной почте.

В этом сценарии может произойти несколько атак.

1) Злоумышленник может изменить бит при передаче, если он равен 0, существует 50% вероятность того, что он станет 1, и наоборот.Это связано с тем, что RC4 создает поток prng, который с помощью XOR и обычного текста создает зашифрованный текст, аналогично одноразовому блокноту.

2) Другая возможность состоит в том, что я мог бы предоставить вам другой ключ дляубедитесь, что ваш ответ неверен.Это просто грубая сила, я просто продолжаю пробовать ключи, пока не получу правильное отражение.

Решением является использование блочного шифра CMAC Mode .CMAC - это код аутентификации сообщения, аналогичный hmac, но он использует блочный шифр вместо функции дайджеста сообщения.Секретный ключ (K) - это тот же ключ, который вы используете для шифрования сообщения.Это добавляет n + 1 блоков к зашифрованному тексту.В моем сценарии это предотвращает обе атаки 1 и 2. Злоумышленник не может перевернуть простой бит, потому что обычный текст дополняется, даже если сообщение занимает только 1 бит, я должен передать минимум 1 блок, используя блочный шифр.Дополнительный блок аутентификации не позволяет мне связать ключ в ключе, а также обеспечивает целостность от любого, кто пытается изменить зашифрованный текст при передаче (хотя это будет очень трудно сделать на практике, дополнительный уровень безопасности полезен).

По этим причинам WPA2 использует AES-CMAC.

2 голосов
/ 07 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...