Spec-Zone.ru › Go

Пакет hkdf

  • import "crypto/hkdf"
  • Обзор
  • Указатель
  • Примеры

Обзор

Пакет hkdf реализует функцию формирования ключа HKDF (HMAC-based Extract-and-Expand Key Derivation Function), определенную в RFC 5869.

HKDF — это криптографическая функция формирования ключа (KDF), предназначенная для расширения ограниченного исходного ключевого материала в один или несколько криптографически стойких секретных ключей.

Пример (Использование)

Пример использования, расширяющий один мастер-секрет в три других криптографически безопасных ключа.

Код:

// Underlying hash function for HMAC.
hash := sha256.New
keyLen := hash().Size() / 2

// Cryptographically secure master secret.
secret := []byte{0x00, 0x01, 0x02, 0x03} // i.e. NOT this.

// Non-secret salt, optional (can be nil).
// Recommended: hash-length random value.
salt := make([]byte, hash().Size())
if _, err := rand.Read(salt); err != nil {
    panic(err)
}

// Non-secret context info, optional (can be nil).
info := "hkdf example"

// Generate three 128-bit derived keys.
var keys [][]byte
for i := range 3 {
    key, err := hkdf.Key(hash, secret, salt, info+strconv.Itoa(i), keyLen)
    if err != nil {
        panic(err)
    }
    keys = append(keys, key)
}

for i := range keys {
    fmt.Printf("Key #%d: %v\n", i+1, !bytes.Equal(keys[i], make([]byte, 16)))
}

Вывод:

Key #1: true
Key #2: true
Key #3: true

Указатель

  • func Expand[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLength int) ([]byte, error)
  • func Extract[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error)
  • func Key[Hash hash.Hash](h func() Hash, secret, salt []byte, info string, keyLength int) ([]byte, error)

Примеры

Пакет (Использование)

Файлы пакета

hkdf.go

func Expand 1.24

func Expand[H hash.Hash](h func() H, pseudorandomKey []byte, info string, keyLength int) ([]byte, error)

Expand формирует ключ из заданной хеш-функции, ключа и необязательной контекстной информации info, возвращая []byte длиной keyLength, который можно использовать в качестве криптографического ключа. Шаг извлечения (extraction) пропускается.

Ключ должен быть предварительно сгенерирован с помощью Extract либо представлять собой равномерно случайный или псевдослучайный криптографически стойкий ключ. См. RFC 5869, раздел 3.3. В большинстве типичных сценариев предпочтительнее использовать Key.

func Extract 1.24

func Extract[H hash.Hash](h func() H, secret, salt []byte) ([]byte, error)

Extract генерирует псевдослучайный ключ для использования с Expand из входного секрета и необязательной независимой соли.

Используйте эту функцию только в том случае, если вам необходимо повторно использовать извлеченный ключ для нескольких вызовов Expand с различными значениями контекста. В большинстве типичных сценариев, включая генерацию нескольких ключей, предпочтительнее использовать Key.

func Key 1.24

func Key[Hash hash.Hash](h func() Hash, secret, salt []byte, info string, keyLength int) ([]byte, error)

Key формирует ключ из заданной хеш-функции, секрета, соли и контекстной информации info, возвращая []byte длиной keyLength, который можно использовать в качестве криптографического ключа. Параметры salt и info могут быть nil.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/hkdf/

Spec-Zone.ru

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