Введение в криптографию: симметричное шифрование

Мир компьютерных наук может вселять страх, особенно если пытаться разобраться в нём самостоятельно. Поэтому я решил написать обзор основ криптографии для тех, кто хотел бы в неё углубиться, но не знает, с чего начать. В основу обзора лёг курс криптографии от преподавателя Стэнфордского университета Дэна Бонеха, доступный на Coursera.

Я решил пройти этот курс, так как я блокчейн-разработчик без традиционного образования в области компьютерных наук. В университете я изучал экономику, но затем ушёл в компьютерное программирование. Начав программировать, я стремился «стать ближе к компьютеру» – разобраться, что скрывается под всей той абстракцией, с которой я имел дело, занимаясь веб-разработкой. Переход с веб-программирования на криптовалюту и распределённые системы был безумно увлекательным, в том числе благодаря углублению в криптографию. Однако мне нужен был более прочный фундамент. Поскольку это довольно обширная область, я не пожалел $70, чтобы получать информацию на форуме, который модерируют преподаватели Стэнфордского университета. Но курс можно пройти и бесплатно без проверки заданий преподавателями.

Итак, приступим.

Что такое криптография?

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

  • Защита от перехвата: конфиденциальность данных.
  • Защита от манипуляции данными: целостность информации, что означает, что никто не может изменить отправляемые вами данные, заставив получателя принять искажённые данные за действительные.
  • Конфиденциальность данных достигается с помощью шифрования, которое может принимать две формы: симметричную и асимметричную.

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

    Два типа шифров

    Шифрование обеспечивает конфиденциальность данных и включает две важных составляющих:

  • Секретный ключ: в контексте симметричного шифрования можно предположить, что у наших участников Алисы и Боба есть общий секретный ключ.
  • Шифр: алгоритмы шифрования и дешифрования.
  • Есть два типа симметричных шифров: потоковые и блочные. Для надлежащего понимания этих шифров будет полезно знакомство с битовыми операциями (операциями, выполняемыми над битами), в частности с исключающим «или» (XOR). Если вкратце, то это сложение двух битов, при котором, если они разные (0 и 1), результат равен 1, а если они одинаковые (два нуля или две единицы), результат равен 0. В дальнейшем изложении предполагается, что читатель знает, что такое XOR и что эту операцию принято обозначать знаком ⊕.

    Потоковый шифр

    Потоковый шифр – это такой симметричный шифр, где над открытым (исходным) текстом (в байтовом виде) при шифровании побитово выполняется операция XOR с помощью ключа (также в байтовом виде). Тот же процесс используется для расшифровки. Учитывая характер операции XOR, если мы проделаем её над зашифрованным текстом (шифротекстом) с помощью ключа, получим исходный открытый текст.

    Как устроен потоковый шифр. Источник: Дэн Бонех

    Внимательные читатели, наверное, догадались, что у ключа и открытого текста должно быть что-то общее, причём очень важное. Верно! Ключ и открытый текст должны быть одинаковой длины. Это, конечно, не очень практично.

    Чтобы сделать потоковый шифр более практичным, используются чисел. Генератор псевдослучайных чисел – это детерминированная процедура, которая на основе входа выдаёт более длинный псевдослучайный результат. «Детерминированная» означает, что эта процедура при одинаковом входе всегда выдаёт один и тот же выход (т. е. «abc123» всегда даёт «8474f24e0d72e1b949ffd2…»). Слово «псевдослучайный» означает, что хотя выход на самом деле не случайный (поскольку он детерминирован на основе конкретного входа), он неотличим от настоящей случайной строки. Другими словами, если иметь набор входов и выходов, то невозможно понять, какому выходу соответствует какой вход. Если использовать в качестве входа общий секретный ключ, можно получить более длинный псевдослучайный ключ, с помощью которого будет проведена операция XOR над открытым текстом такой же длины.

    Описанная реализация потокового шифра называется «одноразовый блокнот». Очень важное её свойство заключается в том, что ключ можно использовать только ОДИН РАЗ. Если он используется повторно, безопасность сообщений скомпрометирована.

    Ниже показан слайд из курса. PRG(K) обозначает псевдослучайную последовательность, сгенерированную из нашего общего ключа K. Символ ⊕ обозначает операцию XOR; C – шифротекст; m – сообщение (открытый текст).

    Источник: bitnovosti.com

    Загрузка ...