Spec-Zone.ru › Go

Пакет ecdh

  • import "crypto/ecdh"
  • Обзор
  • Указатель

Обзор

Пакет ecdh реализует протокол Диффи — Хеллмана на эллиптических кривых для кривых NIST и Curve25519.

Указатель

  • type Curve
  • func P256() Curve
  • func P384() Curve
  • func P521() Curve
  • func X25519() Curve
  • type KeyExchanger
  • type PrivateKey
  • func (k *PrivateKey) Bytes() []byte
  • func (k *PrivateKey) Curve() Curve
  • func (k *PrivateKey) ECDH(remote *PublicKey) ([]byte, error)
  • func (k *PrivateKey) Equal(x crypto.PrivateKey) bool
  • func (k *PrivateKey) Public() crypto.PublicKey
  • func (k *PrivateKey) PublicKey() *PublicKey
  • type PublicKey
  • func (k *PublicKey) Bytes() []byte
  • func (k *PublicKey) Curve() Curve
  • func (k *PublicKey) Equal(x crypto.PublicKey) bool

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API