ed25519

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 7, 2024 License: MIT Imports: 4 Imported by: 1

README

Ed25519

Edwards-curve Digital Signature Algorithm (EdDSA) - это схема цифровой подписи, использующая вариант схемы Шнора, основанной на эллиптической кривой Эдвардса.

Она спроектирована так, чтобы быть быстрее по сравнению с существующей схемой цифровой подписи без ущерба для её безопасности. Она была разработана Дэниелом Бернштейном младшим, Нильсом Дуйфом, Таней Ланге, Питером Швабе и Бо-Инь Яном к 2011 году.

Ed25519 - эта схема подписи EdDSA использующая SHA-512 и Curve25519.

Curve25519 - это криптографическая эллиптическая кривая, обеспечивающая 128-битное шифрование при размере ключа 256 бит, предназначена для использования со схемой согласования ключей Диффи — Хеллмана (ECDH).

Одна из самых быстрых кривых, при этом не защищена патентами. Эталонная программная реализация находится в общественном достоянии.

ECDH (Elliptic Curve Diffie-Hellman / Протокол Ди́ффи-Хе́ллмана на эллиптических кривых) - криптографический протокол, позволяющий двум сторонам, имеющим пары public и private ключи на эллиптических кривых, получить общий секретный ключ, используя незащищённый от прослушивания канал связи.

Алгоритм работы

  • Есть два пользователя Alice и Bob
  • Каждый на своей стороне генерирует пары public и private ключей
  • Alice отправляет public ключ Bob'у, а Bob отправляет свой public ключ Alice
  • Имея public ключ от Bob'а и свой private ключ Alice генерирует общий секретный ключ
  • Имея public ключ от Alice и свой private ключ Bob генерирует общий секретный ключ
  • В результате секретный ключ Alice будет идентичным ключу Bob'а
  • Далее, Alice и Bob могут шифровать и дешифровать сообщения используя полученный секретный ключ

Функции пакета, структуры и их методы

Функции пакета

func GenerateKeyPair() (pub domain.PublicKey, priv domain.PrivateKey, err error)

Функция генерирует пару public и private ключей Ed25519.

func GenerateSharedKey(pub domain.PublicKey, priv domain.PrivateKey) (shared domain.SharedKey, err error)

Функция генерирует секретный ключ на базе public и private ключей.

Структуры и их методы

type PublicKey ed25519.PublicKey

Структура содержит в себе Ed25519 public ключ.

func (pub PublicKey) ToBytes() (bs []byte, err error)

Метод конвертирует ключ в PKIX ASN.1 DER форму.

PKIX - это сертификатная компания инфраструктуры, выдающая сертификаты на основе новейших стандартов Internet X.509.

ASN.1 (Abstract Syntax Notation One) - в области телекоммуникаций и компьютерных сетей язык для описания абстрактного синтаксиса данных.

DER (Distinguished Encoding Rules) - однозначное кодирование данных используя особые правила:

  • для кодирования данных с известной длиной количество октетов (восемь двоичных разрядов) длины должно быть наименьшим
  • кодирование простых типов данных (STRING, OCTET STRING и BIT ARRAY) всегда примитивное
func (pub PublicKey) ToPEMBlock() (pem PEMBlock, err error)

Метод конвертирует ключ в PEM block.

PEM (Privacy-Enhanced Mail / Почта с повышенной секретностью) является стандартом Интернета для гарантирования безопасности электронной почты в Интернете. Этот стандарт одобрен советом по архитектуре Интернета (Internet Architecture Board, IAB). Впервые был разработан под руководством Группы приватности и безопасности Internet Resources Task Force (IRTF) в 1993 году, далее разработка была передана в PEM Working Group (IETF). Фактически, протоколы PEM созданы для шифрования, проверки подлинности, проверки целостности и администрирования ключей. В конечном итоге протоколы описываются в RFC 7468.

func (pub PublicKey) ToPublicCurve() (pubCurve PublicCurve, err error)

Метод конвертирует ключ к криптографической эллиптической кривой Curve25519.


type PrivateKey ed25519.PrivateKey

Структура содержит в себе Ed25519 private ключ.

func (priv PrivateKey) ToBytes() (bs []byte, err error)

Метод конвертирует ключ в PKCS, ASN.1 DER форму.

PKCS (Public Key Cryptography Standards) - это спецификации для ускорения разработки криптографии с открытым ключом.

ASN.1 (Abstract Syntax Notation One) - в области телекоммуникаций и компьютерных сетей язык для описания абстрактного синтаксиса данных.

DER (Distinguished Encoding Rules) - однозначное кодирование данных используя особые правила:

  • для кодирования данных с известной длиной количество октетов (восемь двоичных разрядов) длины должно быть наименьшим
  • кодирование простых типов данных (STRING, OCTET STRING и BIT ARRAY) всегда примитивное
func (priv PrivateKey) ToPEMBlock() (pem PEMBlock, err error)

Метод конвертирует ключ в PEM block.

PEM (Privacy-Enhanced Mail / Почта с повышенной секретностью) является стандартом Интернета для гарантирования безопасности электронной почты в Интернете. Этот стандарт одобрен советом по архитектуре Интернета (Internet Architecture Board, IAB). Впервые был разработан под руководством Группы приватности и безопасности Internet Resources Task Force (IRTF) в 1993 году, далее разработка была передана в PEM Working Group (IETF). Фактически, протоколы PEM созданы для шифрования, проверки подлинности, проверки целостности и администрирования ключей. В конечном итоге протоколы описываются в RFC 7468.

func (priv PrivateKey) ToPrivateCurve() (privCurve PrivateCurve, err error)

Метод конвертирует ключ к криптографической эллиптической кривой Curve25519.


type PEMBlock pem.Block

Структура содержит в себе PEM блок.

PEM (Privacy-Enhanced Mail / Почта с повышенной секретностью) является стандартом Интернета для гарантирования безопасности электронной почты в Интернете. Этот стандарт одобрен советом по архитектуре Интернета (Internet Architecture Board, IAB). Впервые был разработан под руководством Группы приватности и безопасности Internet Resources Task Force (IRTF) в 1993 году, далее разработка была передана в PEM Working Group (IETF). Фактически, протоколы PEM созданы для шифрования, проверки подлинности, проверки целостности и администрирования ключей. В конечном итоге протоколы описываются в RFC 7468.

func (pb *PEMBlock) ToPublicKey() (pub PublicKey, err error)

Метод конвертирует PEM block в public ключ.

func (pb *PEMBlock) ToPrivateKey() (priv PrivateKey, err error)

Метод конвертирует PEM block в private ключ.

func (pb *PEMBlock) ToBytes() (bs []byte)

Метод конвертирует PEM block байтовую последовательность.

func (pb *PEMBlock) Save(filePath string) (err error)

Метод сохраняет PEM block в файл.

func (pb *PEMBlock) FromBytes(bs []byte) (err error)

Метод загружает PEM block из байтовой последовательности.


type SharedKey []byte

Структура содержит секретный ключ

func (shared SharedKey) Sign() (sign string, err error)

Метод генерирует 6 символьный признак, который используется сторонами для идентификации используемого секретного ключа без его потери.

Пример использования

func main() {
    var (
        pub  domain.PublicKey
        priv domain.PrivateKey
    )
    
    pub, priv, err = ed25519.GenerateKeyPair()
    if err != nil {
        panic(err)
    }
    
    var shared domain.SharedKey
    
    shared, err = ed25519.GenerateSharedKey(pub, priv)
    if err != nil {
        panic(err)
    }
    
    fmt.Println(shared)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateKeyPair

func GenerateKeyPair() (pub domain.PublicKey, priv domain.PrivateKey, err error)

func GenerateSharedKey

func GenerateSharedKey(pub domain.PublicKey, priv domain.PrivateKey) (shared domain.SharedKey, err error)

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL