Module 4.3

Криптография

В предыдущей части мы обсуждали логирование. В этой части мы дадим базовое введение в связанные понятия криптографии.

Введение в HTTPS

Назначение протокола HTTPS — обеспечить безопасный просмотр веб-страниц. С точки зрения пользователя важно знать, подключается ли он к сайту по небезопасному HTTP-соединению или по защищенному HTTPS-соединению. Разные браузеры показывают это по-разному.

Далее мы посмотрим пример того, как один конкретный браузер показывает такой индикатор. Попробуйте разобраться, как это работает во всех браузерах, которыми вы пользуетесь.

Индикатор протокола HTTPS — маленький замок рядом с URL:

Нажмем на замок, затем на стрелку вправо и перейдем к дополнительной информации. Мы увидим что-то похожее:

Эта вкладка содержит много информации. Мы подробнее рассмотрим несколько странных акронимов, которые появляются в разделе ”Technical details”.

Что означают эти буквы и зачем они нужны?

Базовые понятия

Первое, что может прийти в голову при слове ”криптография”, — это преобразование обычных сообщений в секретные сообщения и обратно.

Это впечатление не ошибочно, но в криптографии есть значительно больше.

Начнем с базовой постановки задачи и определим несколько основных терминов.

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

Шифрование используется для защиты конфиденциальности данных.

Важный строительный блок криптографии — односторонняя функция (one-way function, OWF). OWF — это функция, которая, с одной стороны, может эффективно вычисляться. Это означает, что легко вычислить y = f(x), когда x дано на вход. В этом контексте ”легко” означает, что это можно сделать с помощью любого компьютера. С другой стороны, OWF должно быть трудно обратить. Это означает, что очень сложно найти x, если известны только f и y.

Криптографическая хэш-функция — это специальный тип OWF, такой что

  • выход y всегда имеет фиксированную длину
  • трудно находить коллизии.

Коллизия — это ситуация, когда два разных входа x и x’ дают один и тот же выход: f(x) = f(x’).

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

Поскольку длина входа не ограничена, очевидно, что существует много разных входов с одинаковым выходом. Но важно то, что для функции SHA-256 такие коллизии неизвестны.

Выходы разных вариантов SHA-3 имеют разную длину. Однако вариантов с очень короткой длиной выхода нет.

Q: Почему криптографическая хэш-функция не может иметь выход длиной 3 бита?

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

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

Итог: коды аутентификации сообщений используются для защиты целостности данных.

Один из распространенных методов построения MAC-функции — HMAC. Он строится поверх некоторой хэш-функции, например SHA-256 или SHA-3.

В нашем HTTPS-примере (TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384_256 bit keys,TLS 1.2) используется хэш-функция SHA384.

Loading

Симметричная криптография

Все классические, то есть существующие больше 40 лет, методы шифрования являются симметричными. Это означает, что любой, кто знает функцию и секретный ключ, необходимые для шифрования сообщений, также способен расшифровать сообщения. Иными словами, шифрование и расшифрование находятся в симметричных ролях. Функция шифрования и функция расшифрования имеют очень похожую структуру; иногда они даже могут быть одинаковыми. Ключ, используемый для шифрования, является тем же ключом, который используется для расшифрования, или по крайней мере каждый ключ можно получить из другого с помощью простого преобразования.

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

Симметричные методы шифрования по-прежнему полезны во многих ситуациях и обычно намного быстрее асимметричных. Поэтому симметричное шифрование широко используется, а новые симметричные методы продолжают разрабатываться. One-time pad (OTP) и AES — примеры симметричных схем шифрования.

Один из самых старых методов шифрования — замена каждого вхождения буквы на какую-то другую букву. Такой шифр называется шифром замены. Пример — шифр Цезаря, алгоритм шифрования, в котором шифртекст получается путем сдвига каждой буквы открытого текста на три позиции вперед по алфавиту. Расшифрование выполняется сдвигом каждой буквы шифртекста на три позиции назад.

Loading

One-time pad (OTP) — один из самых простых методов шифрования. Чтобы зашифровать сообщение длиной, скажем, 140 бит, нужен секретный ключ длиной 140 бит. Вы вычисляете XOR каждого бита сообщения с соответствующим битом ключа и получаете 140 бит шифртекста:

C=MK.C = M \oplus K.

Процесс расшифрования точно такой же, как процесс шифрования. Если вы знаете секретный ключ, вы можете расшифровать сообщение, выполнив побитовый XOR шифртекста и ключа:

M=CK.M = C \oplus K.

Это работает, потому что

CK=(MK)K=M(KK)=M0=M.C \oplus K = (M \oplus K) \oplus K = M \oplus (K \oplus K) = M \oplus 0 = M.

Хотя OTP очень прост и быстр, у него есть хорошие свойства безопасности. Мы обсудим их позже.

Единственный недостаток OTP состоит в том, что ключ должен быть такой же длины, как фактическое сообщение с открытым текстом. Кроме того, ключ нельзя использовать более одного раза; отсюда название ”one-time pad”.

Loading

Advanced Encryption Standard (AES) — семейство современных блочных шифров. AES-256 имеет размер ключа 256 бит и преобразует 128-битные блоки открытого текста в 128-битные блоки шифртекста и обратно. Этот алгоритм достаточно быстр даже в программной реализации и считается достаточно безопасным почти для всех применений. Многие современные процессоры предоставляют аппаратную поддержку AES.

Вы дошли до конца этого раздела! Перейти к следующему разделу:

Не забудьте проверить свои баллы в индикаторе в правом нижнем углу материала!