Стандарты и сертификаты · тема 3
13

Криптография
и сертификаты ключей

Шифрование, хеширование и электронная подпись описаны стандартами, и в России для них есть собственные алгоритмы. В главе разобраны российские криптографические ГОСТы, сертификат открытого ключа X.509, протокол TLS и токен JWT.

Документы
ГОСТ Р 34.10-2012 · ГОСТ Р 34.11-2012 · ГОСТ Р 34.12-2015 · X.509 · RFC 5280 · RFC 8446 · RFC 7519 · 63-ФЗ
Уровень
Средний
Где встречается
HTTPS, электронная подпись, вход в сервис по токену
Зачем это знать
Чтобы читать сертификат сайта и не путать его с сертификатом соответствия

§1Три задачи криптографии

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

ЗадачаРоссийский стандартМеждународный аналог
блочное шифрованиеГОСТ Р 34.12-2015: «Кузнечик», блок 128 бит, и «Магма», блок 64 битаAES
режимы работы шифраГОСТ Р 34.13-2015режимы CBC, CTR, GCM
хеш-функцияГОСТ Р 34.11-2012 «Стрибог», 256 или 512 битSHA-2, SHA-3
электронная подписьГОСТ Р 34.10-2012ECDSA, RSA

§2Где нужны российские алгоритмы

Российские алгоритмы обязательны там, где этого требует закон: в квалифицированной электронной подписи по закону 63-ФЗ и при обмене с государственными системами. Средства, которые их реализуют, проходят сертификацию ФСБ России.

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

§3Сертификат открытого ключа

Сертификат открытого ключа — электронный документ, в котором удостоверяющий центр связывает открытый ключ с владельцем: доменным именем или организацией. Формат сертификата задаёт стандарт X.509, его применение в интернете — RFC 5280.

Сертификат сайта по полям.
Сертификат сайта по полям. Образец окна сведений о сертификате. Браузер показывает такие же поля по нажатию на значок замка.
ПолеЧто сообщает
Кому выдан (Subject)доменное имя, для которого действует сертификат
Кем выдан (Issuer)удостоверяющий центр, подписавший сертификат
Срок действиядаты начала и окончания; после окончания браузер покажет предупреждение
Открытый ключ и алгоритмключ сайта и алгоритм подписи
Альтернативные именавсе доменные имена, на которые распространяется сертификат

Браузер доверяет сертификату сайта, потому что он подписан промежуточным сертификатом, а тот — корневым. Корневые сертификаты заранее установлены в системе. Такая последовательность называется цепочкой доверия.

§4Протокол TLS

TLS шифрует соединение между браузером и сервером и проверяет сертификат сервера. Действующая версия 1.3 описана в RFC 8446.

RFC 8446 «The Transport Layer Security (TLS) Protocol Version 1.3».
RFC 8446 «The Transport Layer Security (TLS) Protocol Version 1.3». Адрес сайта с TLS начинается с https.

§5Токен JWT

JWT — токен, которым сервис подтверждает права клиента. Формат описан в RFC 7519. Токен состоит из трёх частей через точку: заголовок, полезные данные и подпись. Первые две части — это JSON, закодированный в Base64URL.

части токена
eyJhbGciOiJIUzI1NiJ9 . eyJyb2xlIjoiYW5vbiJ9 . подпись

заголовок:        {"alg":"HS256"}
полезные данные:  {"role":"anon"}
прочитать полезные данные токена без ключа
import base64, json

token = 'eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYW5vbiJ9.signature'
header, payload, _ = token.split('.')
pad = lambda s: s + '=' * (-len(s) % 4)
print(json.loads(base64.urlsafe_b64decode(pad(payload))))
# {'role': 'anon'}

Токены начинаются с eyJ, потому что так кодируются первые символы JSON-объекта. Полезные данные не зашифрованы: их прочтёт любой, кто получил токен. Подпись защищает токен только от изменения.

§6Частые ошибки

Путать сертификат сайта с сертификатом соответствияПервый связывает ключ с доменом, второй подтверждает соответствие требованиям.
Считать, что данные в JWT зашифрованыОни только закодированы; секреты в токен не кладут.
Называть хеш шифрованиемПо хешу исходные данные восстановить нельзя, ключа у него нет.
Придумывать собственный алгоритм шифрованияПрименяют стандартные алгоритмы в проверенных библиотеках.
Хранить закрытый ключ в репозиторииКлюч считают раскрытым и выпускают заново.

§7Проверьте себя

  1. Чем шифрование отличается от хеширования и от электронной подписи?
  2. Какие российские стандарты задают блочный шифр, хеш-функцию и электронную подпись?
  3. Какие поля сертификата X.509 показывают, для какого сайта и кем он выдан?
  4. Что такое цепочка доверия и почему браузер доверяет корневому сертификату?
  5. Из каких частей состоит JWT? Можно ли прочитать его полезные данные без ключа?
ГОСТР 34.12-2015 — шифрР 34.11-2012 — хешР 34.10-2012 — подписьсертификация ФСБ
СертификатX.509, RFC 5280Subject, Issuer, сроккорневой → промежуточный → сайт
ПротоколыTLS 1.3 — RFC 8446JWT — RFC 7519eyJ — начало JSONданные JWT не зашифрованы

Справочник «Стандарты и сертификаты» · глава 13Макаров Максим Николаевич

Кадр