nats-io/nkeys
GitHub: nats-io/nkeys
nkeys 是一个基于 Ed25519 的 Go 语言公钥签名库,专为 NATS 生态系统提供实体身份验证和密钥格式化管理能力。
Stars: 165 | Forks: 42
# NKEYS
[](https://www.apache.org/licenses/LICENSE-2.0)
[](https://goreportcard.com/report/github.com/nats-io/nkeys)
[](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/573f8b0acda16a948c25320585c9ac6426828ca8f41bbe076a22c0dd7ec53cd5.svg)
[](https://godoc.org/github.com/nats-io/nkeys)
[](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工具, 密码学, 手动系统调用, 数字签名, 文档结构分析, 日志审计