Skip to content

🔐 Асимметричное шифрование: Продвинутый уровень

🧠 Основы асимметричного шифрования

Асимметричное шифрование (шифрование с открытым ключом) — это метод криптографии, при котором используются два ключа:

  • Открытый ключ (public key) — доступен всем, используется для шифрования данных или проверки подписи.
  • Закрытый ключ (private key) — хранится у владельца, используется для расшифрования или формирования подписи.

Преимущества:

  • Не требует предварительного обмена секретным ключом.
  • Позволяет реализовать цифровую подпись и установить неотказуемость.
  • Обеспечивает конфиденциальность и целостность данных.

🔐 Математические основы

Асимметричные алгоритмы строятся на сложных математических задачах:

Алгоритм Основная задача
RSA Факторизация больших чисел
ElGamal / DSA / ECDSA Дискретный логарифм в конечной группе
ГОСТ Р 34.10-2012 Эллиптические кривые и дискретный логарифм

⚠️ RSA считается уязвимым при недостаточной длине ключа. Рекомендуется использовать не менее 2048 бит, лучше — 3072 или 4096.


📏 Российские стандарты: ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012

✅ ГОСТ Р 34.10-2012

  • Название: "Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи".
  • Поддерживает два размера модуля:
  • mod_len = 512 бит (ключ 256 бит, эллиптическая кривая)
  • mod_len = 1024 бит (ключ 512 бит, кривая повышенной стойкости)

✅ ГОСТ Р 34.11-2012

  • Хэш-функция "Стрибог" (GOST R 34.11-2012).
  • Выходной хэш: 256 или 512 бит.
  • Используется перед формированием подписи.

🔁 Как работает процесс подписи и верификации

1. Формирование подписи (на примере ГОСТ Р 34.10-2012):

Документ → Хэшируется (Стрибог) → Получаем H(D)
H(D) + Закрытый ключ → Формируется подпись (r, s)

Пример кода (Python + библиотека gostcrypto):

from gostcrypto.gostsignature import GOSTSignature
from gostcrypto.utils import read_file

data = read_file('document.xml')
signer = GOSTSignature('gost_3410_2012_256', private_key='privkey.pem')
signature = signer.sign(data)
with open('signature.bin', 'wb') as f:
    f.write(signature)

2. Проверка подписи:

Документ → Хэшируется → Получаем H(D)
Подпись + Открытый ключ → Проверяется соответствие H(D)

Пример кода:

verifier = GOSTSignature('gost_3410_2012_256', public_key='pubkey.pem')
result = verifier.verify(data, signature)
print("Подпись корректна:", result)

📦 Форматы представления открытых и закрытых ключей

Формат Описание
PEM Base64 с заголовками (-----BEGIN PRIVATE KEY-----)
DER Бинарный формат
PKCS#8 Стандарт хранения приватных ключей, может быть зашифрован
X.509 Формат сертификатов с публичным ключом
ГОСТ Ключевой контейнер В Windows — .keystore, в КриптоПро — через CSP

🛡️ Управление ключами

🔑 Хранение закрытого ключа:

  • eToken / Rutoken / USB-токены — аппаратное хранение.
  • HSM (Hardware Security Module) — для масштабных систем.
  • Файловое хранилище (PEM/DER) — только в тестовой среде.

🔒 Защита:

  • Шифрование приватного ключа паролем.
  • Использование TPM-чипов для привязки к устройству.
  • Отключение возможности экспорта закрытого ключа.

📜 Цепочка доверия и сертификаты

📌 Сертификат X.509 содержит:

  • Открытый ключ владельца
  • Имя владельца (Subject DN)
  • Имя выдавшего центра (Issuer DN)
  • Срок действия
  • Цифровую подпись УЦ

🔄 Цепочка проверки:

Сертификат пользователя → Сертификат промежуточного УЦ → Корневой сертификат УЦ

Инструменты:

openssl x509 -in cert.pem -text -noout   # Посмотреть содержимое
openssl verify -CAfile root.crt cert.pem # Проверить цепочку

🔍 OCSP / CRL — проверка статуса сертификата

Метод Описание
OCSP Онлайн-запрос к серверу статуса сертификатов
CRL Список отозванных сертификатов, скачивается периодически

Пример запроса OCSP:

openssl ocsp -issuer issuer.crt -cert user.crt -url http://ocsp.example.com

💻 Интеграция с реальными системами

Пример: Подпись XML-документа в ЕГАИС

  • Формат: XMLDSig
  • Алгоритм: ГОСТ Р 34.10-2012
  • Хэш: ГОСТ Р 34.11-2012 (Стрибог)
  • Подпись внедряется внутрь XML-документа

Пример структуры:

<ds:Signature>
  <ds:SignedInfo>
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    <ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
    ...
  </ds:SignedInfo>
  <ds:SignatureValue>...</ds:SignatureValue>
</ds:Signature>

🧪 Тестирование и отладка

Инструменты:

  • КриптоПро CSP / CryptoARM
  • OpenSSL с engine ГОСТ
  • Bouncy Castle (Java/.NET)
  • DSS / OpenDSS
  • XMLSec

Полезные команды OpenSSL:

# Генерация ключевой пары ГОСТ
openssl genpkey -algorithm GOST2012_256 -out private.key

# Создание CSR
openssl req -new -key private.key -out request.csr

# Самоподписанный сертификат
openssl req -x509 -days 365 -key private.key -in request.csr -out cert.pem

🚀 Перспективы и тренды

  • Постквантовая криптография: подготовка к переходу на алгоритмы, устойчивые к атакам на квантовом компьютере.
  • FIDO2/WebAuthn: связка биометрии и асимметричного шифрования.
  • Threshold signatures (TSS): разделение ответственности за подпись между несколькими сторонами.
  • Облачные подписывающие сервисы (Cloud Signing Services): удаленная подпись без хранения ключей локально.