🔐 Асимметричное шифрование: Продвинутый уровень
🧠 Основы асимметричного шифрования
Асимметричное шифрование (шифрование с открытым ключом) — это метод криптографии, при котором используются два ключа:
- Открытый ключ (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): удаленная подпись без хранения ключей локально.