Пакет mlkem
Обзор
Пакет mlkem реализует квантово-устойчивый метод инкапсуляции ключа ML-KEM (ранее известный как Kyber), описанный в NIST FIPS 203.
В большинстве приложений следует использовать набор параметров ML-KEM-768, реализованный в DecapsulationKey768 и EncapsulationKey768.
Пример
Код:
package mlkem_test
import (
"crypto/mlkem"
"log"
)
func Example() {
// Alice generates a new key pair and sends the encapsulation key to Bob.
dk, err := mlkem.GenerateKey768()
if err != nil {
log.Fatal(err)
}
encapsulationKey := dk.EncapsulationKey().Bytes()
// Bob uses the encapsulation key to encapsulate a shared secret, and sends
// back the ciphertext to Alice.
ciphertext := Bob(encapsulationKey)
// Alice decapsulates the shared secret from the ciphertext.
sharedSecret, err := dk.Decapsulate(ciphertext)
if err != nil {
log.Fatal(err)
}
// Alice and Bob now share a secret.
_ = sharedSecret
}
func Bob(encapsulationKey []byte) (ciphertext []byte) {
// Bob encapsulates a shared secret using the encapsulation key.
ek, err := mlkem.NewEncapsulationKey768(encapsulationKey)
if err != nil {
log.Fatal(err)
}
sharedSecret, ciphertext := ek.Encapsulate()
// Alice and Bob now share a secret.
_ = sharedSecret
// Bob sends the ciphertext to Alice.
return ciphertext
}
Указатель
Примеры
Файлы пакета
mlkem.go
Константы
const (
// SharedKeySize is the size of a shared key produced by ML-KEM.
SharedKeySize = 32
// SeedSize is the size of a seed used to generate a decapsulation key.
SeedSize = 64
// CiphertextSize768 is the size of a ciphertext produced by ML-KEM-768.
CiphertextSize768 = 1088
// EncapsulationKeySize768 is the size of an ML-KEM-768 encapsulation key.
EncapsulationKeySize768 = 1184
// CiphertextSize1024 is the size of a ciphertext produced by ML-KEM-1024.
CiphertextSize1024 = 1568
// EncapsulationKeySize1024 is the size of an ML-KEM-1024 encapsulation key.
EncapsulationKeySize1024 = 1568
) тип DecapsulationKey1024 1.24
DecapsulationKey1024 — секретный ключ, используемый для декапсуляции общего ключа из шифротекста. Он содержит различные предварительно вычисленные значения.
type DecapsulationKey1024 struct {
// contains filtered or unexported fields
}
функция GenerateKey1024 1.24
func GenerateKey1024() (*DecapsulationKey1024, error)
GenerateKey1024 генерирует новый ключ декапсуляции, получая случайные байты из безопасного источника. Ключ декапсуляции необходимо хранить в секрете.
функция NewDecapsulationKey1024 1.24
func NewDecapsulationKey1024(seed []byte) (*DecapsulationKey1024, error)
NewDecapsulationKey1024 разворачивает ключ декапсуляции из 64-байтового начального значения в форме "d || z". Начальное значение должно быть равномерно случайным.
функция (*DecapsulationKey1024) Bytes 1.24
func (dk *DecapsulationKey1024) Bytes() []byte
Bytes возвращает ключ декапсуляции в виде 64-байтового начального значения в форме "d || z".
Ключ декапсуляции необходимо хранить в секрете.
функция (*DecapsulationKey1024) Decapsulate 1.24
func (dk *DecapsulationKey1024) Decapsulate(ciphertext []byte) (sharedKey []byte, err error)
Decapsulate генерирует общий ключ из шифротекста и ключа декапсуляции. Если длина шифротекста неверна, Decapsulate возвращает ошибку. Если длина шифротекста верна, но он недействителен по другим причинам, ошибка не возвращается; вместо этого будет создан общий ключ, не совпадающий с ключом отправителя, согласно FIPS 203.
Общий ключ необходимо хранить в секрете.
функция (*DecapsulationKey1024) EncapsulationKey 1.24
func (dk *DecapsulationKey1024) EncapsulationKey() *EncapsulationKey1024
EncapsulationKey возвращает открытый ключ инкапсуляции, необходимый для создания шифротекстов.
функция (*DecapsulationKey1024) Encapsulator 1.26
func (dk *DecapsulationKey1024) Encapsulator() crypto.Encapsulator
Encapsulator возвращает ключ инкапсуляции, как и DecapsulationKey1024.EncapsulationKey.
Он реализует интерфейс crypto.Decapsulator.
тип DecapsulationKey768 1.24
DecapsulationKey768 — секретный ключ, используемый для декапсуляции общего ключа из шифротекста. Он содержит различные предварительно вычисленные значения.
type DecapsulationKey768 struct {
// contains filtered or unexported fields
}
функция GenerateKey768 1.24
func GenerateKey768() (*DecapsulationKey768, error)
GenerateKey768 генерирует новый ключ декапсуляции, получая случайные байты из безопасного источника. Ключ декапсуляции необходимо хранить в секрете.
функция NewDecapsulationKey768 1.24
func NewDecapsulationKey768(seed []byte) (*DecapsulationKey768, error)
NewDecapsulationKey768 разворачивает ключ декапсуляции из 64-байтового начального значения в форме "d || z". Начальное значение должно быть равномерно случайным.
функция (*DecapsulationKey768) Bytes 1.24
func (dk *DecapsulationKey768) Bytes() []byte
Bytes возвращает ключ декапсуляции в виде 64-байтового начального значения в форме "d || z".
Ключ декапсуляции необходимо хранить в секрете.
функция (*DecapsulationKey768) Decapsulate 1.24
func (dk *DecapsulationKey768) Decapsulate(ciphertext []byte) (sharedKey []byte, err error)
Decapsulate генерирует общий ключ из шифротекста и ключа декапсуляции. Если длина шифротекста неверна, Decapsulate возвращает ошибку. Если длина шифротекста верна, но он недействителен по другим причинам, ошибка не возвращается; вместо этого будет создан общий ключ, не совпадающий с ключом отправителя, согласно FIPS 203.
Общий ключ необходимо хранить в секрете.
функция (*DecapsulationKey768) EncapsulationKey 1.24
func (dk *DecapsulationKey768) EncapsulationKey() *EncapsulationKey768
EncapsulationKey возвращает открытый ключ инкапсуляции, необходимый для создания шифротекстов.
функция (*DecapsulationKey768) Encapsulator 1.26
func (dk *DecapsulationKey768) Encapsulator() crypto.Encapsulator
Encapsulator возвращает ключ инкапсуляции, как и DecapsulationKey768.EncapsulationKey.
Он реализует интерфейс crypto.Decapsulator.
тип EncapsulationKey1024 1.24
EncapsulationKey1024 — открытый ключ, используемый для создания шифротекстов, которые декапсулируются соответствующим ключом DecapsulationKey1024.
type EncapsulationKey1024 struct {
// contains filtered or unexported fields
}
функция NewEncapsulationKey1024 1.24
func NewEncapsulationKey1024(encapsulationKey []byte) (*EncapsulationKey1024, error)
NewEncapsulationKey1024 разбирает ключ инкапсуляции из его закодированного представления. Если ключ инкапсуляции недействителен, NewEncapsulationKey1024 возвращает ошибку.
функция (*EncapsulationKey1024) Bytes 1.24
func (ek *EncapsulationKey1024) Bytes() []byte
Bytes возвращает ключ инкапсуляции в виде среза байтов.
функция (*EncapsulationKey1024) Encapsulate 1.24
func (ek *EncapsulationKey1024) Encapsulate() (sharedKey, ciphertext []byte)
Encapsulate генерирует общий ключ и связанный с ним шифротекст на основе ключа инкапсуляции, получая случайные байты из безопасного источника.
Общий ключ необходимо хранить в секрете.
Для тестирования пакет crypto/mlkem/mlkemtest предоставляет детерминированную инкапсуляцию.
тип EncapsulationKey768 1.24
EncapsulationKey768 — открытый ключ, используемый для создания шифротекстов, которые декапсулируются соответствующим ключом DecapsulationKey768.
type EncapsulationKey768 struct {
// contains filtered or unexported fields
}
функция NewEncapsulationKey768 1.24
func NewEncapsulationKey768(encapsulationKey []byte) (*EncapsulationKey768, error)
NewEncapsulationKey768 разбирает ключ инкапсуляции из его закодированного представления. Если ключ инкапсуляции недействителен, NewEncapsulationKey768 возвращает ошибку.
функция (*EncapsulationKey768) Bytes 1.24
func (ek *EncapsulationKey768) Bytes() []byte
Bytes возвращает ключ инкапсуляции в виде среза байтов.
функция (*EncapsulationKey768) Encapsulate 1.24
func (ek *EncapsulationKey768) Encapsulate() (sharedKey, ciphertext []byte)
Encapsulate генерирует общий ключ и связанный с ним шифротекст на основе ключа инкапсуляции, получая случайные байты из безопасного источника.
Общий ключ необходимо хранить в секрете.
Для тестирования пакет crypto/mlkem/mlkemtest предоставляет детерминированную инкапсуляцию.
Подкаталоги
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/mlkem/