Skip to content

maxyotka/gost-crypto

Go Version GOST License KAT Verified

Go Reference Go Report Card Coverage CI Release

gost-crypto

Библиотека криптографических алгоритмов по актуальным российским стандартам ГОСТ для Go.

Нулевые внешние зависимости. Constant-time операции. Обнуление чувствительных данных в памяти. KAT-верификация по RFC и ГОСТ.

Алгоритмы

Пакет Стандарт Описание KAT
gost341112 ГОСТ Р 34.11-2012 Стрибог — хеш-функция (256/512 бит) RFC 6986
gost341215 ГОСТ Р 34.12-2015 Кузнечик (128-бит) и Магма (64-бит) — блочные шифры RFC 7801, RFC 8891
gost341315 ГОСТ Р 34.13-2015 Режимы: ECB, CBC, CFB, CTR, OFB, MAC (m>=n) ГОСТ 34.13 Прил. А
gost341012 ГОСТ Р 34.10-2012 Цифровая подпись — 7 кривых (256+512 бит) RFC 7091
mgm RFC 9058 Multilinear Galois Mode — AEAD RFC 9058
vko RFC 7836 Ключевое согласование (256/512-бит кривые) RFC 7836
kdf R 50.1.113-2016 KDF, HMAC, CMAC, PBKDF2, key wrap

Кривые ГОСТ Р 34.10-2012

Кривая Размер OID
CurveParamSetA() 256 бит id-tc26-gost-3410-2012-256-paramSetA
CurveParamSetB() 256 бит CryptoPro-A
CurveParamSetC() 256 бит CryptoPro-B
CurveParamSetD() 256 бит CryptoPro-C
Curve512ParamSetA() 512 бит id-tc26-gost-3410-2012-512-paramSetA
Curve512ParamSetB() 512 бит id-tc26-gost-3410-2012-512-paramSetB
Curve512ParamSetC() 512 бит id-tc26-gost-3410-2012-512-paramSetC

Установка

go get github.com/maxyotka/gost-crypto

Быстрый старт

Хеширование — Стрибог

import "github.com/maxyotka/gost-crypto/gost341112"

h := gost341112.New256()
h.Write([]byte("Hello, ГОСТ!"))
fmt.Printf("%x\n", h.Sum(nil))

Аутентифицированное шифрование — Кузнечик MGM (RFC 9058)

import (
    "github.com/maxyotka/gost-crypto/gost341215"
    "github.com/maxyotka/gost-crypto/mgm"
)

key := make([]byte, gost341215.KuznechikKeySize)
block, _ := gost341215.NewKuznechik(key)
aead, _ := mgm.NewMGM(block, block.BlockSize())

nonce := make([]byte, aead.NonceSize())
nonce[0] = 0x11 // MSB must be zero per RFC 9058
ciphertext := aead.Seal(nil, nonce, []byte("secret"), []byte("aad"))
plaintext, _ := aead.Open(nil, nonce, ciphertext, []byte("aad"))

Цифровая подпись — ГОСТ Р 34.10-2012

import (
    "crypto/rand"
    "github.com/maxyotka/gost-crypto/gost341012"
    "github.com/maxyotka/gost-crypto/gost341112"
)

curve := gost341012.CurveParamSetA()
priv, pub, _ := gost341012.GenerateKey(curve, rand.Reader)

digest := gost341112.Sum256([]byte("message"))
sig, _ := priv.SignDigest(digest[:], rand.Reader)
ok, _ := pub.VerifyDigest(digest[:], sig)

Ключевое согласование — VKO (RFC 7836)

import "github.com/maxyotka/gost-crypto/vko"

aliceKEK, _ := vko.KEK256(alicePriv, bobPub, ukm)
bobKEK, _ := vko.KEK256(bobPriv, alicePub, ukm)
// aliceKEK == bobKEK

Больше runnable-примеров — на pkg.go.dev.

Производительность

Precomputed S+L таблицы для Кузнечика, zero heap allocations на шифрах.

Алгоритм MB/s Allocs
Кузнечик Encrypt 25 0
Магма Encrypt 60 0
Стрибог-256 8KB 26 1

Режимы шифрования (ГОСТ 34.13-2015)

Все режимы поддерживают параметр m (длина shift register):

  • len(iv) == blockSize — стандартный режим (m=n)
  • len(iv) > blockSize — ГОСТ shift register (m>n)
// Стандартный CBC (m=n)
cbc := gost341315.NewCBCEncrypter(block, iv16)

// ГОСТ CBC с shift register (m=2n)
cbc := gost341315.NewCBCEncrypter(block, iv32)

Структура проекта

gost-crypto/
├── gost341112/     # Стрибог — хеш-функция ГОСТ Р 34.11-2012
├── gost341215/     # Кузнечик + Магма — блочные шифры ГОСТ Р 34.12-2015
├── gost341315/     # Режимы работы ГОСТ Р 34.13-2015
├── gost341012/     # Цифровая подпись ГОСТ Р 34.10-2012 (7 кривых)
├── mgm/            # MGM AEAD (RFC 9058)
├── vko/            # Ключевое согласование VKO (RFC 7836)
├── kdf/            # KDF, HMAC, CMAC, PBKDF2, key wrap
└── internal/       # S-boxes, GF(2^n), constant-time утилиты

Разработка

go test ./...           # все тесты
go test -cover ./...    # покрытие
go test -bench=. ./...  # бенчмарки

Лицензия

Open Source — AGPL-3.0

Для open-source проектов и личного использования: AGPL-3.0.

Если вы используете gost-crypto в своём ПО и распространяете его (включая SaaS) — вы обязаны открыть исходный код своего ПО под AGPL-3.0.

Коммерческая лицензия

Для закрытого коммерческого ПО доступна коммерческая лицензия: подробнее.

Copyright (C) 2026 maxyotka

SPDX-License-Identifier: AGPL-3.0-or-later OR Commercial

About

GOST cryptographic algorithms for Go — Streebog, Kuznyechik, Magma, GOST R 34.10-2012 signatures, MGM AEAD, VKO, KDF. Zero dependencies, constant-time, KAT-verified.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages