Rust
Solana 上的 Secp256r1

Solana 上的 Secp256r1

Solana 上的 Secp256r1

Solana 上的 Secp256r1

什么是 Secp256r1

Secp256r1,也被称为 P-256 或 prime256v1,是由高效密码学标准组 (SECG) 定义并被 NIST 采纳为推荐椭圆曲线之一的椭圆曲线。

它是现代密码学应用中最广泛使用的椭圆曲线,支持从 TLS 连接到硬件安全密钥的各种应用。

该曲线通过 256 位密钥大小提供大约 128 位的安全强度,与 RSA 相比显著更高效,同时提供等效的安全性。

其数学特性结合广泛的硬件优化,使其成为椭圆曲线密码学的事实标准。

为什么它如此占主导地位?

Secp256r1 通过早期标准化、普遍的硬件支持和监管批准实现了主导地位。

与可能在数学上更优的新曲线不同,secp256r1 代表了密码强度、实现效率和生态系统兼容性之间的最佳平衡,这是现实世界系统所需的。

此外,其特定的数学结构允许高度优化的实现,从智能手机安全元件到高性能服务器都能高效运行。

它是如何工作的?

Secp256r1 定义了一条数学曲线,其形式为 y2 = x3 - 3x + b。这形成了一个具有特殊数学特性的椭圆形状。该曲线上有且仅有 2256 个有效点,这是一个天文数字。

该曲线上的每个点由两个坐标 (x, y) 定义,其数学结构确保某些操作可以高效执行,而其他操作则在计算上难以实现。

生成密钥

该过程从选择一个在 1 和 2256 之间的加密安全随机数开始,这个随机数将成为您的私钥。

系统随后选择曲线上的一个预定起点,称为生成点,它作为一个所有人都认可的通用参考点。

通过一种称为标量乘法的特殊数学运算,您的私钥数字被用来从这个生成点“导航”到曲线上的一个新的、唯一的位置。

这个目标点成为您的公钥,可以安全地与任何需要验证您数字签名的人共享。

这是安全的,因为该操作具有非对称性。虽然从生成点到您的公钥的路径可以通过您的私钥轻松计算,但逆向推导几乎是不可能的。

签名

当您想创建一个数字签名时,过程从将您的消息通过一个加密哈希函数(通常是 SHA-256)开始,该函数会生成一个固定大小的数字表示,作为您的消息内容的唯一指纹。

签名算法随后将此消息哈希值与您的私钥以及一个随机生成的数值(称为随机数 nonce)结合起来,生成两个数学值,传统上标记为 rs。这些值与您的私钥和特定的消息内容密切相关,创建了一个只有您才能生成的加密证明。

随机数 nonce 在此过程中起着关键的安全作用。它确保即使对同一消息进行两次签名,也会生成不同的签名值,从而防止各种加密攻击。然而,这种随机性必须是真正不可预测的且从不重复使用,因为随机数的任何泄露都可能导致攻击者恢复私钥。

验证

验证过程展示了椭圆曲线密码学中优雅的不对称性。任何人都可以使用您的公钥、原始消息和签名值(r, s),并执行一系列数学运算,只有在签名由拥有相应私钥的人创建时,这些运算才会产生有效结果。

验证者会计算若干中间值,并在曲线上执行额外的标量乘法运算,最终得出一个点。如果签名是可信的,该点应符合签名的特定属性。

这一验证过程无需了解私钥,却能提供关于签名真实性的数学确定性。

Secp256r1 on Solana

Solana 通过其内置的预编译功能提供对 Secp256r1 签名验证的原生支持,该功能由 OrionSIMD-0075 中引入。

这是在 Solana 上实现现代认证方法(如通行密钥)的关键一步,因为 Secp256r1 是 WebAuthn 和通行密钥实现所使用的相同椭圆曲线。有了这一支持,我们终于可以结合现代认证方法和 PDA 来管理用户操作。

Web3 认证挑战

Web3 对助记词的依赖构成了普及的根本障碍。传统钱包的注册流程因助记词导致 60-80% 的用户流失率。

问题在于助记词要求不完美的人类实现完美的安全性。用户必须记住 12-24 个随机单词,永远安全地存储它们,并且永不成为网络钓鱼的受害者;这对主流用户来说是一个不可能的标准。

解决方案可能是现代认证方法,例如通行密钥,它通过将私钥移入专用的安全硬件来消除人为错误。然而,要在 Solana 上支持这些方法,我们需要合适的密码学原语。

Blueshift © 2025Commit: fd080b2