Перейти к содержанию

agate-crypto

Криптоагильность для Agate: подключаемые самоописывающиеся алгоритмы хеширования, подписи и AEAD.

agate-crypto — это общий поддомен (generic subdomain), опубликованный как библиотекане DDD shared kernel. Зависимость от него подобна зависимости от ring или sha2: стабильная техническая возможность, а не разделяемая доменная модель. Внутри он всё равно следует Clean Architecture, чтобы дизайн оставался единообразным с крейтами ограниченных контекстов.

Ответственность

Предоставлять алгоритмы, которые подключаемы и самоописывающиеся: тег алгоритма путешествует вместе с каждым Digest и Signature, так что потребители (в частности, agate-audit) могут проверять материал без внеполосного знания о том, каким алгоритмом он произведён.

  • Хеши: SHA-2, SHA-3 и Streebog (ГОСТ Р 34.11-2012) — за фичефлагами.
  • Подписи: Ed25519 (ГОСТ Р 34.10-2012 в планах).
  • AEAD: AES-GCM, ChaCha20-Poly1305 и ГОСТовые Кузнечик / Магма в режиме MGM — за фичефлагами.

Хеширование и подпись — это чистые стратегии (трейты). Загрузка ключей — это I/O и живёт за портом, вне чистого ядра.

Язык домена

  • Digest, HashAlgo, Hasher — стратегия хеширования и её самоописывающийся вывод.
  • Signature, SignAlgo, Signer, Verifier, KeyId — стратегия подписи.
  • Aead, AeadAlgo, Nonce, Ciphertext, AssociatedData — аутентифицированное шифрование.
  • SecretKey, CryptoError — общие типы значений/ошибок.

Слои

Слой Содержимое
domain Чистый, без зависимостей: самоописывающиеся значения алгоритмов и трейты-стратегии (Hasher, Signer, Verifier, Aead).
application Порты абстрактной фабрики (HasherFactory, SignatureFactory, AeadFactory) и тонкие сценарии над ними.
infrastructure Конкретные бэкенды RustCrypto и фабрики (RustCryptoHasherFactory, RustCryptoSignatureFactory, RustCryptoAeadFactory, CryptoRegistry).

Два основных паттерна — стратегия (трейты алгоритмов) и абстрактная фабрика (разрешение самоописывающегося алгоритма в стратегию).

Криптоагильность и эпохи Меркла

Одно дерево Меркла использует один алгоритм хеширования — эпоху. Переключение алгоритмов начинает новую эпоху, записываемую в подписанную вершину дерева. Поскольку тег алгоритма путешествует с каждым дайджестом, журнал аудита остаётся проверяемым через границы эпох. См. agate-audit.