Пакет ecdh
Обзор
Пакет ecdh реализует протокол Диффи — Хеллмана на эллиптических кривых для кривых NIST и Curve25519.
Указатель
Файлы пакета
ecdh.go nist.go x25519.go
type Curve 1.20
type Curve interface {
// GenerateKey generates a random PrivateKey.
//
// Since Go 1.26, a secure source of random bytes is always used, and rand
// is ignored unless GODEBUG=cryptocustomrand=1 is set. This setting will be
// removed in a future Go release. Instead, use [testing/cryptotest.SetGlobalRandom].
GenerateKey(rand io.Reader) (*PrivateKey, error)
// NewPrivateKey checks that key is valid and returns a PrivateKey.
//
// For NIST curves, this follows SEC 1, Version 2.0, Section 2.3.6, which
// amounts to decoding the bytes as a fixed length big endian integer and
// checking that the result is lower than the order of the curve. The zero
// private key is also rejected, as the encoding of the corresponding public
// key would be irregular.
//
// For X25519, this only checks the scalar length.
NewPrivateKey(key []byte) (*PrivateKey, error)
// NewPublicKey checks that key is valid and returns a PublicKey.
//
// For NIST curves, this decodes an uncompressed point according to SEC 1,
// Version 2.0, Section 2.3.4. Compressed encodings and the point at
// infinity are rejected.
//
// For X25519, this only checks the u-coordinate length. Adversarially
// selected public keys can cause ECDH to return an error.
NewPublicKey(key []byte) (*PublicKey, error)
// contains filtered or unexported methods
} func P256 1.20
func P256() Curve
P256 возвращает Curve, реализующую NIST P-256 (FIPS 186-3, раздел D.2.3), также известную как secp256r1 или prime256v1.
Все вызовы этой функции возвращают одно и то же значение, которое можно использовать для проверки равенства и в инструкциях switch.
func P384 1.20
func P384() Curve
P384 возвращает Curve, реализующую NIST P-384 (FIPS 186-3, раздел D.2.4), также известную как secp384r1.
Все вызовы этой функции возвращают одно и то же значение, которое можно использовать для проверки равенства и в инструкциях switch.
func P521 1.20
func P521() Curve
P521 возвращает Curve, реализующую NIST P-521 (FIPS 186-3, раздел D.2.5), также известную как secp521r1.
Все вызовы этой функции возвращают одно и то же значение, которое можно использовать для проверки равенства и в инструкциях switch.
func X25519 1.20
func X25519() Curve
X25519 возвращает Curve, реализующую функцию X25519 на Curve25519 (RFC 7748, раздел 5).
Все вызовы этой функции возвращают одно и то же значение, поэтому его можно использовать для проверки равенства и в инструкциях switch.
type KeyExchanger 1.26
KeyExchanger — это интерфейс для закрытого ключа с непрозрачным представлением, который можно использовать для обмена ключами. Например, для ключа ECDH, хранящегося в аппаратном модуле.
Его реализует PrivateKey.
type KeyExchanger interface {
PublicKey() *PublicKey
Curve() Curve
ECDH(*PublicKey) ([]byte, error)
} type PrivateKey 1.20
PrivateKey — это закрытый ключ ECDH, который обычно хранится в секрете.
Эти ключи можно разобрать с помощью crypto/x509.ParsePKCS8PrivateKey и закодировать с помощью crypto/x509.MarshalPKCS8PrivateKey. Для кривых NIST после разбора их необходимо преобразовать с помощью crypto/ecdsa.PrivateKey.ECDH.
type PrivateKey struct {
// contains filtered or unexported fields
}
func (*PrivateKey) Bytes 1.20
func (k *PrivateKey) Bytes() []byte
Bytes возвращает копию закодированного закрытого ключа.
func (*PrivateKey) Curve 1.20
func (k *PrivateKey) Curve() Curve
func (*PrivateKey) ECDH 1.20
func (k *PrivateKey) ECDH(remote *PublicKey) ([]byte, error)
ECDH выполняет обмен ECDH и возвращает общий секрет. PrivateKey и PublicKey должны использовать одну и ту же кривую.
Для кривых NIST функция выполняет ECDH согласно спецификации SEC 1, версия 2.0, раздел 3.3.1, и возвращает координату x, закодированную согласно SEC 1, версия 2.0, раздел 2.3.5. Результатом никогда не является точка на бесконечности. Это также называется вычислением общего секрета в схеме Ephemeral Unified Model, определённой в NIST SP 800-56A, редакция 3, раздел 6.1.2.2.
Для X25519 функция выполняет ECDH согласно RFC 7748, раздел 6.1. Если результат состоит только из нулей, ECDH возвращает ошибку.
func (*PrivateKey) Equal 1.20
func (k *PrivateKey) Equal(x crypto.PrivateKey) bool
Equal возвращает true, если x представляет тот же закрытый ключ, что и k.
Обратите внимание: эквивалентные закрытые ключи могут иметь разные кодировки. В таком случае эта проверка вернёт false, хотя при использовании в качестве входных данных для [ECDH] они будут вести себя одинаково.
Проверка выполняется за постоянное время, если типы ключей и их кривые совпадают.
func (*PrivateKey) Public 1.20
func (k *PrivateKey) Public() crypto.PublicKey
Public реализует неявный интерфейс всех закрытых ключей стандартной библиотеки. См. документацию к crypto.PrivateKey.
func (*PrivateKey) PublicKey 1.20
func (k *PrivateKey) PublicKey() *PublicKey
type PublicKey 1.20
PublicKey — это открытый ключ ECDH, обычно доля ECDH партнёра, передаваемая по сети.
Эти ключи можно разобрать с помощью crypto/x509.ParsePKIXPublicKey и закодировать с помощью crypto/x509.MarshalPKIXPublicKey. Для кривых NIST после разбора их необходимо преобразовать с помощью crypto/ecdsa.PublicKey.ECDH.
type PublicKey struct {
// contains filtered or unexported fields
}
func (*PublicKey) Bytes 1.20
func (k *PublicKey) Bytes() []byte
Bytes возвращает копию закодированного открытого ключа.
func (*PublicKey) Curve 1.20
func (k *PublicKey) Curve() Curve
func (*PublicKey) Equal 1.20
func (k *PublicKey) Equal(x crypto.PublicKey) bool
Equal возвращает true, если x представляет тот же открытый ключ, что и k.
Обратите внимание: эквивалентные открытые ключи могут иметь разные кодировки. В таком случае эта проверка вернёт false, хотя при использовании в качестве входных данных для ECDH они будут вести себя одинаково.
Проверка выполняется за постоянное время, если типы ключей и их кривые совпадают.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/ecdh/