Пакет dsa
Обзор
Пакет dsa реализует алгоритм цифровой подписи (Digital Signature Algorithm), как определено в FIPS 186-3.
Операции DSA в этом пакете не реализованы с использованием алгоритмов с постоянным временем выполнения.
Устарело: DSA является устаревшим алгоритмом, и вместо него следует использовать современные альтернативы, такие как Ed25519 (реализованный в пакете crypto/ed25519). Ключи с 1024-битными модулями (параметры L1024N160) криптографически слабы, тогда как более крупные ключи не имеют широкой поддержки. Обратите внимание, что FIPS 186-5 больше не одобряет DSA для генерации подписей.
Указатель
Файлы пакета
dsa.go
Переменные
ErrInvalidPublicKey возникает, когда открытый ключ не может быть использован данным кодом. Стандарт FIPS довольно строг в отношении формата ключей DSA, но другой код может быть менее строгим. Таким образом, при использовании ключей, которые могли быть сгенерированы другим кодом, эту ошибку необходимо обрабатывать.
var ErrInvalidPublicKey = errors.New("crypto/dsa: invalid public key") func GenerateKey
func GenerateKey(priv *PrivateKey, rand io.Reader) error
GenerateKey генерирует пару из открытого и закрытого ключей. Параметры PrivateKey уже должны быть валидными (см. GenerateParameters).
func GenerateParameters
func GenerateParameters(params *Parameters, rand io.Reader, sizes ParameterSizes) error
GenerateParameters помещает случайный валидный набор параметров DSA в params. Выполнение этой функции может занять много секунд даже на быстрых машинах.
func Sign
func Sign(random io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)
Sign подписывает хеш произвольной длины (который должен быть результатом хеширования большего сообщения) с использованием закрытого ключа priv. Функция возвращает подпись в виде пары целых чисел. Безопасность закрытого ключа зависит от энтропии rand.
Обратите внимание, что раздел 4.6 FIPS 186-3 указывает, что хеш должен быть усечен до длины подгруппы в байтах. Данная функция не выполняет это усечение самостоятельно.
Начиная с Go 1.26 всегда используется безопасный источник случайных байт, а Reader игнорируется, если не установлено значение GODEBUG=cryptocustomrand=1. Этот параметр будет удален в будущих выпусках Go. Вместо него используйте testing/cryptotest.SetGlobalRandom.
Имейте в виду, что вызов Sign с контролируемым злоумышленником ключом PrivateKey может потребовать произвольного количества ресурсов процессора.
func Verify
func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool
Verify проверяет подпись в r, s для hash с использованием открытого ключа pub. Она сообщает, действительна ли подпись.
Обратите внимание, что раздел 4.6 FIPS 186-3 указывает, что хеш должен быть усечен до длины подгруппы в байтах. Данная функция не выполняет это усечение самостоятельно.
type ParameterSizes
ParameterSizes — это перечисление допустимых битовых длин простых чисел в наборе параметров DSA. См. FIPS 186-3, раздел 4.2.
type ParameterSizes int
const (
L1024N160 ParameterSizes = iota
L2048N224
L2048N256
L3072N256
) type Parameters
Parameters представляет параметры домена для ключа. Эти параметры могут использоваться совместно несколькими ключами. Битовая длина Q должна быть кратна 8.
type Parameters struct {
P, Q, G *big.Int
}
type PrivateKey
PrivateKey представляет закрытый ключ DSA.
type PrivateKey struct {
PublicKey
X *big.Int
}
type PublicKey
PublicKey представляет открытый ключ DSA.
type PublicKey struct {
Parameters
Y *big.Int
}
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/dsa/