Манитон Docs

Интеграция УКЭП/КЭП

Юридически значимая подпись операций через квалифицированную электронную подпись

Интеграция УКЭП/КЭП

Платформа Манитон реализует двухуровневую модель подписания, где УКЭП подтверждает волю участника, а EVM-подпись обеспечивает техническое исполнение в блокчейне.

Концепция

Loading diagram...

Статусы реализации

📋 Детальный план реализации: TODO-UKEP-INTEGRATION.md

Что уже реализовано

КомпонентСтатусОписание
EVM-подписание (Technical layer)✅ DONEWeb3Signer + Besu, приватные ключи в HSM
Базовая поддержка подписей✅ DONEПоля signature/signed_at в protobuf (IssuanceDecision)
Аудит-лог инфраструктура✅ DONEHash-chains, WORM storage, protobuf контракты
Доменная модель подписи✅ DONEIssuanceDecision.isSigned() в cfa-core

В разработке

КомпонентСтатусОписание
Protobuf контракты УКЭП🔴 TODOSignedOrder, 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🔴 TODOUkepAuditEntry (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

Архитектура целевого контура

Последовательность подписания

Loading diagram...

Структура поручения (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 делегирования

Loading diagram...

Проверка полномочий

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

Loading diagram...

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 месяца

Ссылки

On this page