Шифрование и расшифрование данных на сервере
Защитите конфиденциальные данные: шифруйте документы на сертификаты получателей и расшифровывайте их закрытым ключом — через простые REST-запросы к КриптоАРМ Server.
Зачем нужно шифрование
Электронная подпись подтверждает, *кто* подписал документ и что он не изменялся. Но она не скрывает содержимое — документ остаётся читаемым для любого, кто его получил. Шифрование закрывает эту задачу:
- Конфиденциальность. Зашифрованные данные может прочитать только тот, чей сертификат указан получателем, — владелец соответствующего закрытого ключа.
- Требования закона. Персональные данные (152-ФЗ), коммерческая и банковская тайна требуют защиты при передаче и хранении.
- Безопасная передача. Файл можно спокойно отправлять по открытым каналам — почте, облаку, файлообменнику: без ключа содержимое недоступно.
- Пара с подписью. Типичный сценарий — сначала подписать, затем зашифровать: юридическая значимость плюс конфиденциальность.
Как это работает
Данные шифруются на открытый ключ из сертификата получателя. Расшифровать их может только владелец закрытого ключа — тот, кому документ адресован. Получателей может быть несколько: один и тот же файл шифруется сразу на всех, и каждый расшифровывает своим ключом.
Шифрование данных
Метод /cipher/encrypt принимает данные и сертификаты получателей, возвращает зашифрованные данные:
curl -X POST https://<host>/cipher/encrypt \
-H "Content-Type: application/json" \
-d '{
"data": "SGVsbG8sIFdvcmxkIQ==",
"certs": ["MIICFTCCAcKgAwIBAgIJQCFliUQmiIAQMA…"],
"alg": "GOST_28147"
}'
Ответ — зашифрованные данные в Base64:
{ "encrypted": "MIIB0wYJKoZIhvcNAQcDoIIB…" }
Файл можно зашифровать напрямую, без упаковки в Base64:
curl -X POST https://<host>/cipher/encrypt-file \
-F "file=@document.docx" \
-F "certs=@recipient.cer" \
-o document.docx.enc
Расшифрование
Для расшифрования сервер использует закрытый ключ, доступный в системе. Если ключ защищён, передайте PIN-код:
curl -X POST https://<host>/cipher/decrypt \
-H "Content-Type: application/json" \
-d '{
"data": "MIIB0wYJKoZIhvcNAQcDoIIB…",
"format": "PEM",
"pin": "******"
}'
Ответ — исходные данные:
{ "decrypted": "SGVsbG8sIFdvcmxkIQ==" }
Для файлов — эндпоинт /cipher/decrypt-file, который возвращает расшифрованный файл напрямую.
Алгоритмы шифрования
Параметр alg выбирает алгоритм. Доступны как российские ГОСТ, так и зарубежные стандарты:
| Алгоритм | Описание |
GOST_28147 |
ГОСТ 28147-89 |
GOST_R3412_2015_M |
ГОСТ Р 34.12-2015 «Магма» |
GOST_R3412_2015_K |
ГОСТ Р 34.12-2015 «Кузнечик» |
AES_256 |
AES с ключом 256 бит |
DES3 |
Triple DES |
Для работы с документами, которые должны оставаться совместимыми с российскими стандартами, выбирайте ГОСТ-алгоритмы.
Сведения о получателях
Не расшифровывая данные, можно узнать, на чьи сертификаты они зашифрованы:
curl -X POST https://<host>/cipher/recipients \
-H "Content-Type: application/json" \
-d '{"data": "MIIB0wYJKoZIhvcNAQcDoIIB…", "format": "PEM"}'
Ответ — список получателей без раскрытия содержимого:
{
"recipients": [
{ "issuerName": "УЦ «КриптоПро»", "serialNumber": "120064ECE135…" }
]
}
Это удобно для журналирования: понять, кому адресован документ, не трогая закрытый ключ.
Заключение
КриптоАРМ Server закрывает весь цикл защиты данных: шифрование на сертификаты получателей, расшифрование закрытым ключом и просмотр списка получателей — отдельными REST-вызовами, на ГОСТ-алгоритмах.
По вопросам интеграции шифрования пишите на support@trusted.ru