first commit
This commit is contained in:
60
app/Services/Crypto/GostCipher.php
Normal file
60
app/Services/Crypto/GostCipher.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Crypto;
|
||||
|
||||
use RuntimeException;
|
||||
|
||||
/**
|
||||
* ЗАГЛУШКА драйвера шифрования по ГОСТ Р 34.12-2015 («Кузнечик»/«Магма»).
|
||||
*
|
||||
* Мера ФСТЭК/ФСБ: ЗИС.16, приказ ФСБ №378 — применение сертифицированных СКЗИ.
|
||||
*
|
||||
* Для государственных ИСПДн встроенный AES не является сертифицированным СКЗИ.
|
||||
* Реальная реализация должна вызывать внешний криптопровайдер (КриптоПро CSP,
|
||||
* VipNet) — например через CLI `csptest`, расширение PHP с поддержкой ГОСТ или
|
||||
* gRPC/REST-шлюз к СКЗИ. Здесь намеренно оставлен каркас, чтобы:
|
||||
* - не создавать ложного ощущения сертифицированной защиты;
|
||||
* - дать понятную точку интеграции при аттестации.
|
||||
*
|
||||
* Чтобы активировать: SECURITY_PDN_CIPHER_DRIVER=gost и реализовать методы.
|
||||
*/
|
||||
class GostCipher implements PdnCipher
|
||||
{
|
||||
/**
|
||||
* @param array{binary:?string,container:?string} $config
|
||||
*/
|
||||
public function __construct(private readonly array $config) {}
|
||||
|
||||
public function encrypt(string $plaintext): string
|
||||
{
|
||||
throw new RuntimeException(
|
||||
'Драйвер ГОСТ не реализован. Подключите сертифицированное СКЗИ '
|
||||
.'(КриптоПро CSP / VipNet) в App\Services\Crypto\GostCipher. '
|
||||
.'См. docs/security/crypto-gost.md.'
|
||||
);
|
||||
}
|
||||
|
||||
public function decrypt(string $ciphertext): string
|
||||
{
|
||||
throw new RuntimeException(
|
||||
'Драйвер ГОСТ не реализован. Подключите сертифицированное СКЗИ '
|
||||
.'(КриптоПро CSP / VipNet) в App\Services\Crypto\GostCipher.'
|
||||
);
|
||||
}
|
||||
|
||||
public function algorithm(): string
|
||||
{
|
||||
return 'GOST-R-34.12-2015';
|
||||
}
|
||||
|
||||
/**
|
||||
* Настроено ли внешнее СКЗИ (путь к бинарю и контейнер ключа).
|
||||
* Используйте в health-check перед включением драйвера gost.
|
||||
*/
|
||||
public function isAvailable(): bool
|
||||
{
|
||||
return ! empty($this->config['binary'])
|
||||
&& ! empty($this->config['container'])
|
||||
&& is_executable((string) $this->config['binary']);
|
||||
}
|
||||
}
|
||||
31
app/Services/Crypto/LaravelAesCipher.php
Normal file
31
app/Services/Crypto/LaravelAesCipher.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Crypto;
|
||||
|
||||
use Illuminate\Contracts\Encryption\Encrypter;
|
||||
|
||||
/**
|
||||
* Драйвер шифрования на встроенном шифраторе Laravel (AES-256-GCM).
|
||||
*
|
||||
* Применяется по умолчанию. Для государственных ИС, требующих
|
||||
* сертифицированные СКЗИ, замените на {@see GostCipher}.
|
||||
*/
|
||||
class LaravelAesCipher implements PdnCipher
|
||||
{
|
||||
public function __construct(private readonly Encrypter $encrypter) {}
|
||||
|
||||
public function encrypt(string $plaintext): string
|
||||
{
|
||||
return $this->encrypter->encryptString($plaintext);
|
||||
}
|
||||
|
||||
public function decrypt(string $ciphertext): string
|
||||
{
|
||||
return $this->encrypter->decryptString($ciphertext);
|
||||
}
|
||||
|
||||
public function algorithm(): string
|
||||
{
|
||||
return 'AES-256-GCM';
|
||||
}
|
||||
}
|
||||
28
app/Services/Crypto/PdnCipher.php
Normal file
28
app/Services/Crypto/PdnCipher.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Crypto;
|
||||
|
||||
/**
|
||||
* Контракт криптографического драйвера для защиты персональных данных.
|
||||
*
|
||||
* Мера ФСТЭК: ЗНИ (защита носителей информации), ОЦЛ.2.
|
||||
* Абстракция позволяет менять реализацию (AES Laravel ↔ ГОСТ/КриптоПро)
|
||||
* без изменения моделей и бизнес-логики (мера ЗИС.16).
|
||||
*/
|
||||
interface PdnCipher
|
||||
{
|
||||
/**
|
||||
* Зашифровать значение.
|
||||
*/
|
||||
public function encrypt(string $plaintext): string;
|
||||
|
||||
/**
|
||||
* Расшифровать значение.
|
||||
*/
|
||||
public function decrypt(string $ciphertext): string;
|
||||
|
||||
/**
|
||||
* Идентификатор алгоритма (для аудита и маркировки).
|
||||
*/
|
||||
public function algorithm(): string;
|
||||
}
|
||||
Reference in New Issue
Block a user