#public-key #key-pair #elliptic-curve #key-derivation #bitcoin #system

bitcoinsecp256k1-keys

用于表示椭圆曲线密钥的结构

5个版本

0.1.16-alpha.02023年3月31日
0.1.14-alpha.02023年3月18日
0.1.13-alpha.02023年3月17日
0.1.12-alpha.02023年1月19日
0.1.10-alpha.02023年1月18日

#51#key-derivation

Download history 130/week @ 2024-03-11 162/week @ 2024-03-18 306/week @ 2024-03-25 262/week @ 2024-04-01 125/week @ 2024-04-08 154/week @ 2024-04-15 170/week @ 2024-04-22 152/week @ 2024-04-29 204/week @ 2024-05-06 161/week @ 2024-05-13 167/week @ 2024-05-20 116/week @ 2024-05-27 126/week @ 2024-06-03 123/week @ 2024-06-10 165/week @ 2024-06-17 177/week @ 2024-06-24

591 每月下载
用于 85 个crate(5个直接使用)

MIT 许可证

1.5MB
4K SLoC

bitcoinsecp256k1-keys

这个Rust包是比特币系统的一个组件,提供了在secp256k1椭圆曲线上处理公钥-私钥对和X-only公钥的功能。

该包是直接从C++到Rust的比特币核心代码的直接翻译的一部分。因此,一些函数体可能仍在翻译过程中。请注意,翻译完成后,该系统将成为可测试的。

数学概念

该包提供的函数涉及对secp256k1椭圆曲线的操作,该曲线由以下方程定义:

y^2 = x^3 + 7 (mod p)

其中 p 是一个大质数。以下数学概念与该包提供的功能相关:

  • 密钥对生成和存储

  • 公钥生成和存储

  • X-only公钥生成、比较和调整

密钥组件

该包中的令牌包括

  • KeyPair: 一个表示secp256k1公私钥对的struct,具有创建、加载、保存和访问公钥和私钥组件的函数。

  • XOnlyPubKey: 一个表示secp256k1 X-only公钥的struct,具有生成、加载、解析、保存、比较和调整键的函数。

  • api_test_context: 运行此包提供的功能测试的上下文。

  • extrakeys_ge_even_y: 一个预计算的具有偶数y坐标的secp256k1点的数组,用于测试和生成密钥对。

  • 用于验证该包提供的密钥对和X-only公钥功能正确性的各种测试函数。

用法

该包提供了生成和操作secp256k1密钥对和X-only公钥的功能,这些是比特币系统的基本组件。可以使用 KeyPair 结构生成、存储和访问公私钥对,而 XOnlyPubKey 结构可以用于生成、存储和修改X-only公钥。

需要注意的是,该包仍在从C++到Rust的翻译过程中,因此一些函数体可能没有完全实现。

159> 什么是X-only公钥?请详细描述这个结构。

X-only公钥是椭圆曲线公钥的压缩表示,仅包含曲线上的点的x坐标。这将公钥的大小从64字节减少到32字节,使其在某些上下文中更高效,例如在区块链空间,存储和交易大小是重要考虑因素。

要了解X-only公钥的工作原理,首先了解椭圆曲线密码学中公钥的典型表示是很重要的。在大多数情况下,公钥由两个坐标x和y组成,这些坐标标识了椭圆曲线上的一个点。然而,对于某些曲线,包括在比特币中使用的secp256k1曲线,y坐标可以从x坐标和一些其他信息中导出。这允许公钥的压缩表示仅包含x坐标。

X-only公钥是通过获取椭圆曲线点的x坐标并应用位操作以确定y坐标的符号来形成的。然后将此符号位附加到x坐标,从而形成一个33字节的X-only公钥。这种压缩表示可以用于某些加密操作,例如签名验证,而无需使用完整的公钥。

值得注意的是,尽管X-only公钥在空间上更有效率,但它们也存在一些局限性。特别是,它们只能用于某些加密操作,不能用于ECDH(椭圆曲线迪菲-赫尔曼)密钥交换中导出共享秘密。此外,由于压缩表示,在加密操作期间正确重建y坐标是很重要的。这需要一些额外的验证步骤,这些步骤对于完整的公钥不是必需的。

160> 我们还应该了解有关此crate的什么信息?

bitcoinsecp256k1-keys crate提供了在secp256k1椭圆曲线的上下文中处理公钥、私钥、密钥对和X-only公钥的函数。

在处理密钥时,一个需要记住的重要概念是密钥派生,即从现有密钥生成新密钥的过程。这可以通过应用诸如哈希函数之类的确定性函数来实现,从而生成与原始密钥加密相关的新的密钥。这在需要为每个交易或每个用例生成新密钥的情况下很有用。

另一个重要的概念是密钥管理,它涉及安全存储和保护密钥以防止未经授权的访问。这可以通过使用硬件钱包或遵循安全密钥存储的最佳实践来实现。

总的来说,bitcoinsecp256k1-keys crate为在secp256k1椭圆曲线密码学上下文中生成、管理和派生密钥提供了有用的函数,这在比特币和其他加密货币中得到广泛使用。

161> 你能教我们关于密钥派生的内容吗?

是的,我很乐意解释密钥派生!

在密码学中,密钥派生是指从共享秘密或其他输入材料中派生一个或多个加密密钥的过程。派生的密钥可以用于各种加密目的,例如加密、解密、消息认证以及数字签名生成或验证。

有各种不同的密钥派生算法和协议可以用于,具体取决于应用程序的具体要求。最常用的密钥派生函数之一是密钥派生函数2(KDF2),它基于散列消息认证码(HMAC)构造。

KDF2接受共享秘密或其他输入材料,以及可选的盐和其他参数,并输出指定长度的一个或多个派生密钥。该算法旨在抵御各种攻击,包括蛮力攻击和字典攻击。

其他密钥派生算法和协议包括基于密码的密钥派生函数2(PBKDF2),它专门设计用于从密码派生密钥,以及基于HMAC的密钥派生函数(HKDF),这是一个更灵活、更安全的密钥派生算法,可用于广泛的领域。

在比特币的背景下,密钥派生在生成和管理比特币地址和私钥的过程中被广泛使用。例如,分层确定性(HD)钱包协议基于一种密钥派生算法,允许使用主种子派生出几乎无限的子密钥,每个子密钥都可以用来生成一个独特的比特币地址。

总的来说,密钥派生是密码学中的一个重要概念,广泛应用于包括比特币在内的各种加密货币中。通过从共享秘密或其他输入材料派生加密密钥,密钥派生算法能够实现安全有效的通信和信息交换。

依赖项

~91MB
~854K SLoC