nats-io/nkeys

GitHub: nats-io/nkeys

nkeys 是一个基于 Ed25519 的 Go 语言公钥签名库,专为 NATS 生态系统提供实体身份验证和密钥格式化管理能力。

Stars: 165 | Forks: 42

# NKEYS [![Apache 2 许可证](https://img.shields.io/badge/License-Apache2-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) [![Go 报告卡](https://goreportcard.com/badge/github.com/nats-io/nkeys)](https://goreportcard.com/report/github.com/nats-io/nkeys) [![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/573f8b0acda16a948c25320585c9ac6426828ca8f41bbe076a22c0dd7ec53cd5.svg)](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/573f8b0acda16a948c25320585c9ac6426828ca8f41bbe076a22c0dd7ec53cd5.svg) [![GoDoc](https://godoc.org/github.com/nats-io/nkeys?status.svg)](https://godoc.org/github.com/nats-io/nkeys) [![覆盖率状态](https://coveralls.io/repos/github/nats-io/nkeys/badge.svg?branch=main&service=github)](https://coveralls.io/github/nats-io/nkeys?branch=main) 一个基于 [Ed25519](https://ed25519.cr.yp.to/) 的公钥签名系统,专为 NATS 生态系统设计。 ## 关于 NATS 生态系统将转向使用 [Ed25519](https://ed25519.cr.yp.to/) 密钥,为账户、用户、服务器和集群等实体提供身份验证、认证和授权。 Ed25519 速度快,并且能够抵抗侧信道攻击。只需生成并安全保存一个种子密钥即可,因为该种子可以同时生成公钥和私钥。 NATS 系统将利用 Ed25519 密钥,这意味着 NATS 系统永远不会存储甚至不会访问任何私钥。身份认证将采用随机的挑战-响应机制。 处理 32 字节和 64 字节的原始密钥可能比较困难。NKEYS 旨在以更加友好的方式格式化密钥,并参考了加密货币(特别是 [Stellar](https://www.stellar.org/))的相关工作。Bitcoin 等其他项目使用了 Base58(或 Base58Check)的形式来编码原始密钥。Stellar 则采用了更传统的 Base32,结合了 CRC16 以及一个版本或前缀字节。NKEYS 使用了类似的格式,其中公钥和私钥的前缀为 1 字节,而种子密钥的前缀为 2 字节。这些前缀的 Base32 编码会生成易于阅读的前缀,例如,'**N**' = 服务器,'**C**' = 集群,'**O**' = 运营者,'**A**' = 账户,以及 '**U**' = 用户。'**P**' 用于表示私钥。对于种子密钥,编码后的第一个前缀是 '**S**',第二个字符代表公钥的类型,例如,“**SU**” 是用户密钥对的种子,“**SA**” 是账户密钥对的种子。 ## 安装 使用 `go` 命令: ``` $ go get github.com/nats-io/nkeys ``` ## nk - 命令行工具 位于 nk [目录](https://github.com/nats-io/nkeys/tree/master/nk)下。 ## 基本 API 用法 ``` // Create a new User KeyPair user, _ := nkeys.CreateUser() // Sign some data with a full key pair user. data := []byte("Hello World") sig, _ := user.Sign(data) // Verify the signature. err = user.Verify(data, sig) // Access the seed, the only thing that needs to be stored and kept safe. // seed = "SUAKYRHVIOREXV7EUZTBHUHL7NUMHPMAS7QMDU3GTIUWEI5LDNOXD43IZY" seed, _ := user.Seed() // Access the public key which can be shared. // publicKey = "UD466L6EBCM3YY5HEGHJANNTN4LSKTSUXTH7RILHCKEQMQHTBNLHJJXT" publicKey, _ := user.PublicKey() // Create a full User who can sign and verify from a private seed. user, _ = nkeys.FromSeed(seed) // Create a User who can only verify signatures via a public key. user, _ = nkeys.FromPublicKey(publicKey) // Create a User KeyPair with our own random data. var rawSeed [32]byte _, err := io.ReadFull(rand.Reader, rawSeed[:]) // Or some other random source. user2, _ := nkeys.FromRawSeed(PrefixByteUser, rawSeed) ``` ## 许可证 除非另有说明,NATS 源文件均依据在 LICENSE 文件中找到的 Apache Version 2.0 许可证分发。
标签:CVE, Ed25519, EVTX分析, Go, NATS, Ruby工具, 密码学, 手动系统调用, 数字签名, 文档结构分析, 日志审计