Files
laravel-gost-template/docs/security/crypto-gost.md
2026-06-24 17:20:43 +09:00

3.5 KiB
Raw Permalink Blame History

Криптографическая защита ПДн по ГОСТ (ФСБ №378)

Зачем

Встроенный в Laravel шифратор использует AES-256-GCM — это надёжный международный алгоритм, но он не является сертифицированным в России СКЗИ. Для государственных ИСПДн и при выполнении требований приказа ФСБ России №378 криптографическая защита ПДн должна выполняться сертифицированными СКЗИ, реализующими ГОСТ Р 34.12-2015 («Кузнечик»/«Магма») и ГОСТ Р 34.13-2015.

Архитектура шаблона

Шифрование изолировано за интерфейсом App\Services\Crypto\PdnCipher:

  • LaravelAesCipher — реализация по умолчанию (AES-256-GCM);
  • GostCipherзаглушка с точкой интеграции сертифицированного СКЗИ.

Драйвер выбирается параметром SECURITY_PDN_CIPHER_DRIVER (laravel | gost) в config/security.php. Модели не зависят от конкретного алгоритма — они используют трейт HasPdnEncryption, который обращается к PdnCipher.

Как подключить КриптоПро CSP / VipNet

  1. Установите СКЗИ на сервер (КриптоПро CSP с действующей лицензией, или ПАК).
  2. Создайте ключевой контейнер и задайте параметры в .env:
    SECURITY_PDN_CIPHER_DRIVER=gost
    SECURITY_GOST_BINARY=/opt/cprocsp/bin/amd64/csptest
    SECURITY_GOST_CONTAINER="\\\\.\\HDIMAGE\\pdn-key"
    
  3. Реализуйте методы encrypt() / decrypt() в App\Services\Crypto\GostCipher. Возможные способы интеграции:
    • вызов CLI КриптоПро (csptest, cryptcp) через Symfony\Component\Process;
    • PHP-расширение с поддержкой ГОСТ (engine gost для OpenSSL, при наличии);
    • gRPC/REST-шлюз к выделенному криптосервису (HSM/КриптоПро DSS).

Обязательные требования к реализации

  • Ключи СКЗИ хранятся в защищённом носителе/контейнере, не в .env и не в БД.
  • Разделение ключей: ключ ПДн ≠ APP_KEYAUDIT_HMAC_KEYSECURITY_PSEUDONYM_KEY.
  • Перешифрование при компрометации/смене ключа — предусмотрите миграционную команду (artisan) для перешифровки полей.
  • Используйте GostCipher::isAvailable() в health-check перед включением драйвера.
  • Применение конкретного СКЗИ должно соответствовать его формуляру и классу КС.

Важное предупреждение

Не оставляйте SECURITY_PDN_CIPHER_DRIVER=gost с нереализованным GostCipher — методы выбрасывают исключение, что прервёт работу с ПДн. Это сделано намеренно, чтобы исключить ложное ощущение сертифицированной защиты.