Интеграция УКЭП/КЭП
Юридически значимая подпись операций через квалифицированную электронную подпись
Интеграция УКЭП/КЭП
Платформа Манитон реализует двухуровневую модель подписания, где УКЭП подтверждает волю участника, а EVM-подпись обеспечивает техническое исполнение в блокчейне.
Концепция
Статусы реализации
📋 Детальный план реализации: TODO-UKEP-INTEGRATION.md
Что уже реализовано
| Компонент | Статус | Описание |
|---|---|---|
| EVM-подписание (Technical layer) | ✅ DONE | Web3Signer + Besu, приватные ключи в HSM |
| Базовая поддержка подписей | ✅ DONE | Поля signature/signed_at в protobuf (IssuanceDecision) |
| Аудит-лог инфраструктура | ✅ DONE | Hash-chains, WORM storage, protobuf контракты |
| Доменная модель подписи | ✅ DONE | IssuanceDecision.isSigned() в cfa-core |
В разработке
| Компонент | Статус | Описание |
|---|---|---|
| Protobuf контракты УКЭП | 🔴 TODO | SignedOrder, X509Certificate, DigitalSignature |
| Signing Service | 🔴 TODO | Микросервис обработки подписанных поручений |
| GOST Signer | 🔴 TODO | Инфраструктура ГОСТ Р 34.10-2012 (КриптоПро DSS) |
| Certificate Verification | 🔴 TODO | Проверка цепочки доверия, CRL/OCSP |
| МЧД Integration | 🔴 TODO | Интеграция с реестром ФНС (m4d.nalog.gov.ru) |
| УКЭП Audit Log | 🔴 TODO | UkepAuditEntry (operation_id ↔ cert ↔ txHash) |
| Client UI (КриптоПро plugin) | 🔴 TODO | Подписание поручений в браузере |
Текущая реализация
EVM-подписание (уже работает)
У нас уже развернут технический уровень подписания:
- Web3Signer:
infra/k8s/components/dlt/web3signer.yaml - Client:
apps/services/cfa-core/src/infrastructure/clients/besu/web3-signer.client.ts - Архитектура: Приватные ключи хранятся в HSM, приложение работает только через KeyID
- Контракты: CFA-RUB развернут на Besu (0xd7429156dd4f5aafcd86dc4a3b76302318cb3b0d)
Базовая поддержка подписей
Protobuf (packages/contracts/proto/maniton/instruments/v1/instruments.proto):
message IssuanceDecision {
// ...
string signature = 23; // УКЭП подпись
google.protobuf.Timestamp signed_at = 24;
}Доменная модель (apps/services/cfa-core/src/domains/cfa/domain/value-objects/issuance-decision.vo.ts):
class IssuanceDecision {
isSigned(): boolean {
return this.signature !== null && this.signedAt !== null;
}
}Аудит-система
- Hash-chains для защиты от подчистки (
audit.proto) - WORM storage готов для фиксации связей
- Неизменяемый аудит-лог описан в
/docs/compliance/logs
Архитектура целевого контура
Последовательность подписания
Структура поручения (Order)
Поручение — это структурированный документ, подписываемый УКЭП:
interface SignedOrder {
// Идентификация
orderId: string; // UUID поручения
operationId: string; // Связь с операцией в ИС
timestamp: Date; // Время формирования
expiresAt: Date; // Срок действия поручения
// Параметры операции
operationType: OperationType;
instrumentId: string;
amount: bigint;
counterpartyAddress?: string;
// Подпись
signature: {
value: string; // Base64 подпись
algorithm: 'GOST3410_2012_256' | 'GOST3410_2012_512';
};
// Сертификат
certificate: {
value: string; // Base64 X.509 сертификат
issuer: string; // DN издателя (УЦ)
subject: string; // DN владельца
serialNumber: string;
validFrom: Date;
validTo: Date;
};
}
enum OperationType {
CFA_ISSUANCE = 'CFA_ISSUANCE',
CFA_REDEMPTION = 'CFA_REDEMPTION',
CFA_TRANSFER = 'CFA_TRANSFER',
INSTRUMENT_ACTIVATION = 'INSTRUMENT_ACTIVATION',
}Машиночитаемая доверенность (МЧД)
МЧД позволяет делегировать полномочия на подписание операций от руководителя к сотруднику.
Flow делегирования
Проверка полномочий
interface MachineReadablePowerOfAttorney {
// Идентификация
mcdId: string;
registryId: string; // ID в реестре ФНС
// Доверитель (руководитель)
principal: {
inn: string;
ogrn: string;
name: string;
certificate: CertificateInfo;
};
// Поверенный (сотрудник)
agent: {
snils: string;
name: string;
};
// Полномочия
powers: PowerCode[]; // Коды полномочий из справочника
validFrom: Date;
validTo: Date;
// Ограничения
restrictions?: {
maxAmount?: bigint;
instrumentTypes?: string[];
operationTypes?: OperationType[];
};
}Хранение и аудит
Что хранится в ИС
| Данные | Хранение | Назначение |
|---|---|---|
| Отпечаток сертификата (fingerprint) | Да | Идентификация подписанта |
| Метаданные проверки | Да | Аудит (время, результат, причина) |
| Связь operation_id ↔ txHash | Да | Трассировка операций |
| Копия сертификата (публичная часть) | Да | Верификация подписи |
| Закрытый ключ УКЭП | ❌ НЕТ | Никогда не хранится |
Аудит-лог связей
interface UkepAuditEntry {
// Идентификаторы
entryId: string;
operationId: string;
orderId: string;
// Сертификат
certificateFingerprint: string; // SHA-256
certificateSubject: string;
certificateIssuer: string;
certificateSerialNumber: string;
// Результат проверки
verificationResult: 'VALID' | 'INVALID' | 'REVOKED' | 'EXPIRED';
verificationTimestamp: Date;
ocspResponse?: string; // Base64 OCSP ответ
// Связь с блокчейном
txHash?: string;
blockNumber?: bigint;
blockTimestamp?: Date;
// Подпись записи (целостность)
entryHash: string;
previousEntryHash: string;
}Требования к УЦ
Для интеграции необходим аккредитованный УЦ с поддержкой:
- ГОСТ Р 34.10-2012 (256/512 бит)
- ГОСТ Р 34.11-2012 (хэширование)
- CRL/OCSP для проверки отзыва
- TSP (Time Stamp Protocol) для фиксации времени
- API интеграции (REST/SOAP)
Кандидаты
| УЦ | API | ГОСТ | МЧД | Примечание |
|---|---|---|---|---|
| СКБ Контур | ✅ | ✅ | ✅ | Лидер рынка ЭДО |
| Калуга Астрал | ✅ | ✅ | ✅ | Фокус на ФНС |
| Тензор (СБИС) | ✅ | ✅ | ✅ | Интеграция с госорганами |
| ФНС (УЦ ФНС) | ✅ | ✅ | ✅ | Для руководителей ЮЛ/ИП |
Интеграция с существующей архитектурой
Связь с Key Management
Roadmap
📋 Детальный план с диаграммами и кодом: TODO-UKEP-INTEGRATION.md
Фаза 1: Контракты и модель (1 неделя)
- Создать
packages/contracts/proto/maniton/signing/v1/signing.proto - Расширить
audit.proto→ добавитьUkepAuditEntry - Запустить
buf generate
Фаза 2: GOST Signer инфраструктура (2-3 недели)
- Выбор решения: КриптоПро DSS vs Custom wrapper
- Развертывание HSM для ГОСТ Р 34.10-2012
- Конфигурация
infra/k8s/components/dlt/cryptopro-dss.yaml - Интеграция с УЦ (СКБ Контур или Калуга Астрал)
Фаза 3: Signing Service (2 недели)
- Создать микросервис
apps/services/signing - Реализовать
ProcessSignedOrderUseCase - Интеграция с Web3Signer (EVM layer)
- Connect RPC gateway
Фаза 4: Certificate Verification (1-2 недели)
- Создать микросервис
apps/services/cert-verification - OCSP/CRL проверка
- Кэширование результатов (Redis)
Фаза 5: МЧД Integration (1 неделя)
- Интеграция с API ФНС (m4d.nalog.gov.ru)
- Проверка полномочий и ограничений
Фаза 6: Client UI (1-2 недели)
- КриптоПро ЭЦП Browser Plugin integration
- UI для подписания поручений
- Тестирование E2E
Итого: 2-3 месяца
Ссылки
- Управление ключами — HSM и подписание транзакций
- Ролевая модель — RBAC и полномочия
- Журналирование — Аудит-лог операций
- Федеральный закон 63-ФЗ — Об электронной подписи