@@ -4,68 +4,113 @@ import { ArticleSection } from "../../../../components/ArticleSection/ArticleSec
44
55![ Solana 上的 Secp256r1] ( /graphics/course-banners/secp256r1-on-solana.png )
66
7+ Secp256r1 是现代密码学中最广泛采用的椭圆曲线之一,支持从 TLS 连接到硬件安全密钥的各种应用。这条曲线构成了无数应用中数字安全的基础。
8+
9+ 由 [ Orion] ( https://x.com/BasedOrion_ ) 在 [ SIMD 75] ( https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0075-precompile-for-secp256r1-sigverify.md ) 中提出的 secp256r1 预编译功能门控,在 Solana 的区块 800 上被激活。
10+
711<ArticleSection name = " 什么是 Secp256r1" id = " what-is-secp256r1" level = " h2" />
812
9- Secp256r1,也被称为 P-256 或 prime256v1,是由高效密码学标准组 (SECG) 定义并被 NIST 采纳为推荐椭圆曲线之一的椭圆曲线。
13+ 我们所熟知的 secp256r1 曲线由高效密码学标准组织(SECG)在 2000 年代初期标准化。它的命名规则告诉了我们关于它的一切:
14+ - ` sec ` :高效密码学标准
15+ - ` p ` :曲线定义在一个素数域上
16+ - ` 256 ` :素数模数大约为 2^256
17+ - ` r ` :随机曲线(与 Koblitz 曲线相对)
18+ - ` 1 ` :此类别中的第一条曲线
19+
20+ Secp256r1 后来被 NIST 采用为 P-256,并成为 FIPS 186-2 的一部分。SECG 和 NIST 的双重标准化赋予了这条曲线广泛的合法性,并促使其被众多协议和应用采用——使其成为全球生产系统中最经受考验的曲线之一。
21+
22+ <ArticleSection name = " 数学基础" id = " mathematical-foundations" level = " h2" />
23+
24+ ### 素数域与有限算术
25+
26+ 要理解 secp256r1,我们首先需要掌握在有限域中工作的概念。与普通算术中数字可以无限增长不同,椭圆曲线密码学在一个有限的数学空间中运作。
27+
28+ 该曲线在素数域 𝔽p 上运作,其中:` p = 2^256 - 2^224 + 2^192 + 2^96 - 1 ` 。
29+
30+ 这不仅仅是任意的 256 位素数;它被称为伪梅森素数。梅森素数的形式为 ` 2^n - 1 ` ,这允许使用位移和减法而非昂贵的除法操作来实现极快的模约简。伪梅森素数将这一概念扩展到“接近”2 的幂的数字,在保持计算优势的同时增加了额外的安全属性。
31+
32+ 对于 secp256r1 的素数,我们可以将其重写为:` p = 2^256 - c ` ,其中 ` c = 2^224 - 2^192 - 2^96 + 1 `
33+
34+ 这种结构意味着,当我们需要对数字 ` mod p ` 进行约简时(这在椭圆曲线操作中经常发生),可以使用快速约简算法,而不是缓慢的通用除法。
35+
36+ > 这使得 secp256r1 的操作比使用任意素数的曲线快得多:对于像 TLS 握手和硬件安全模块这样的性能关键型应用,这是一个至关重要的优势。
1037
11- 它是现代密码学应用中最广泛使用的椭圆曲线,支持从 TLS 连接到硬件安全密钥的各种应用。
38+ ### 椭圆曲线方程
1239
13- 该曲线通过 256 位密钥大小提供大约 128 位的安全强度,与 RSA 相比显著更高效,同时提供等效的安全性。
40+ Secp256r1 遵循椭圆曲线的短 Weierstrass 形式: ` y² = x³ + ax + b (mod p) `
1441
15- 其数学特性结合广泛的硬件优化,使其成为椭圆曲线密码学的事实标准。
42+ 对于 secp256r1,其参数为:
43+ - ` a = -3 ` (或等价于 p-3)
44+ - ` b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b `
1645
17- ### 为什么它如此占主导地位?
46+ > ` a = -3 ` 并不是一个任意数字,而是能够显著优化点加法和倍点操作,减少所需的域乘法次数。
1847
19- Secp256r1 通过早期标准化、普遍的硬件支持和监管批准实现了主导地位。
48+ 每个椭圆曲线加密系统都需要一个具有已知阶的生成点 G。对于 secp256r1:
2049
21- 与可能在数学上更优的新曲线不同,secp256r1 代表了密码强度、实现效率和生态系统兼容性之间的最佳平衡,这是现实世界系统所需的。
50+ ```
51+ G = (Gx, Gy) where:
52+ Gx = 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
53+ Gy = 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5
54+ ```
2255
23- 此外,其特定的数学结构允许高度优化的实现,从智能手机安全元件到高性能服务器都能高效运行 。
56+ > 这些值是通过“可验证的随机”过程生成的,以确保没有隐藏的后门。如果曲线设计者可以随意选择参数,他们可能会选择包含只有他们知道的秘密数学关系的参数,从而创建后门,危及使用该曲线的所有系统 。
2457
25- < ArticleSection name = " 它是如何工作的? " id = " how-does-it-work " level = " h2 " />
58+ ### 曲线阶与安全级别
2659
27- Secp256r1 定义了一条数学曲线,其形式为 < code >y< sup >2</ sup > = x< sup >3</ sup > - 3x + b</ code >。这形成了一个具有特殊数学特性的椭圆形状。该曲线上有且仅有 < code >2< sup >256</ sup ></ code > 个有效点,这是一个天文数字。
60+ ** 曲线阶 (n) ** 表示椭圆曲线上点的总数,包括无穷远点: ` n = 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 `
2861
29- 该曲线上的每个点由两个坐标 (x, y) 定义,其数学结构确保某些操作可以高效执行,而其他操作则在计算上难以实现 。
62+ 曲线阶决定了私钥空间的大小,并直接影响安全性。尽管被称为“256 位”,但 secp256r1 实际上提供大约 128 位的安全性,而不是 256 位。这是因为针对椭圆曲线离散对数问题的已知最佳攻击的复杂度大约为 ` √n ` ,这意味着阶为 ` ~2^256 ` 的曲线提供 ` ~2^128 ` 的安全性 。
3063
31- ### 生成密钥
64+ ** 余因子 (h)** 为 1,这意味着 secp256r1 是一个素数阶曲线。这一点很重要,因为:
65+ - 每个非单位点的阶都是相同的 n
66+ - 不存在小子群攻击的可能性
67+ - 实现更加简化,因为我们不需要担心低阶点的问题
3268
33- 该过程从选择一个在 1 和 2< sup >256</ sup > 之间的加密安全随机数开始,这个随机数将成为您的私钥。
69+ ### 标量域
3470
35- 系统随后选择曲线上的一个预定起点,称为生成点,它作为一个所有人都认可的通用参考点 。
71+ 虽然曲线本身定义在坐标域 𝔽p 上,但私钥存在于另一个数学空间:标量域 𝔽n,其中 n 是曲线的阶 。
3672
37- 通过一种称为标量乘法的特殊数学运算,您的私钥数字被用来从这个生成点“导航”到曲线上的一个新的、唯一的位置。
73+ ```
74+ Private key ∈ [1, n-1]
75+ Public key = private_key × G (scalar multiplication)
76+ ```
3877
39- 这个目标点成为您的公钥,可以安全地与任何需要验证您数字签名的人共享。
78+ 这种区分至关重要,因为:
79+ - 私钥是标量(整数 ` mod n ` )
80+ - 曲线坐标是域元素(整数 ` mod p ` )
81+ - 它们有不同的模数:` n ≠ p `
4082
41- > 这是安全的,因为该操作具有非对称性。虽然从生成点到您的公钥的路径可以通过您的私钥轻松计算,但逆向推导几乎是不可能的 。
83+ 在生成私钥时,我们从 ` [1, n-1] ` 中均匀采样,而不是从 ` [1, p-1] ` 中采样。这确保了每个私钥都对应一个有效的标量乘法操作,并防止某些数学攻击 。
4284
43- ### 签名
85+ < ArticleSection name = " 为什么 Secp256r1 占主导地位 " id = " why-secp256r1-dominates " level = " h2 " />
4486
45- 当您想创建一个数字签名时,过程从将您的消息通过一个加密哈希函数(通常是 SHA-256)开始,该函数会生成一个固定大小的数字表示,作为您的消息内容的唯一指纹 。
87+ 尽管存在像 Curve25519 这样可能更优的曲线,secp256r1 通过早期标准化、监管批准和广泛的硬件优化实现了普遍采用 。
4688
47- 签名算法随后将此消息哈希值与您的私钥以及一个随机生成的数值(称为随机数 nonce)结合起来,生成两个数学值,传统上标记为 ` r ` 和 ` s ` 。这些值与您的私钥和特定的消息内容密切相关,创建了一个只有您才能生成的加密证明 。
89+ 与可能在数学上更优的新曲线不同,secp256r1 代表了现实系统所需的密码强度、实现效率和生态系统兼容性的最佳平衡 。
4890
49- > 随机数 nonce 在此过程中起着关键的安全作用。它确保即使对同一消息进行两次签名,也会生成不同的签名值,从而防止各种加密攻击。然而,这种随机性必须是真正不可预测的且从不重复使用,因为随机数的任何泄露都可能导致攻击者恢复私钥 。
91+ 一旦硬件制造商、操作系统和安全标准都聚焦于 secp256r1,切换成本就变得难以承受 。
5092
51- ### 验证
93+ 我们探讨的特定数学属性(伪梅森素数、a = -3 优化和可验证参数生成)使得从智能手机安全元件到高性能服务器的实现都得到了高度优化。
5294
53- 验证过程展示了椭圆曲线密码学中优雅的不对称性。任何人都可以使用您的公钥、原始消息和签名值(r, s),并执行一系列数学运算,只有在签名由拥有相应私钥的人创建时,这些运算才会产生有效结果 。
95+ 这种硬件生态系统效应创造了一个自我强化的采用循环 。
5496
55- 验证者会计算若干中间值,并在曲线上执行额外的标量乘法运算,最终得出一个点。如果签名是可信的,该点应符合签名的特定属性。
97+ < ArticleSection name = " Solana 上的 Secp256r1 " id = " secp256r1-on-solana " level = " h2 " />
5698
57- 这一验证过程无需了解私钥,却能提供关于签名真实性的数学确定性 。
99+ Solana通过其内置的预编译功能提供对secp256r1签名验证的原生支持,该功能由 [ Orion ] ( https://x.com/BasedOrion_ ) 通过 [ SIMD-0075 ] ( https://github.com/solana-foundation/solana-improvement-documents/pull/75 ) 引入 。
58100
59- < ArticleSection name = " Secp256r1 on Solana " id = " secp256r1-on-solana " level = " h2 " />
101+ 这一预编译功能使得在Solana上实现现代认证方法(如通行密钥)成为可能,因为secp256r1是WebAuthn和通行密钥实现所使用的相同椭圆曲线。
60102
61- Solana 通过其内置的预编译功能提供对 Secp256r1 签名验证的原生支持,该功能由 [ Orion ] ( https://x.com/BasedOrion_ ) 在 [ SIMD-0075 ] ( https://github.com/solana-foundation/solana-improvement-documents/pull/75 ) 中引入 。
103+ 我们详细介绍的数学特性,特别是优化的域算术和标准化参数,使得secp256r1成为硬件安全模块和支持这些认证系统的安全隔离区的通用选择 。
62104
63- 这是在 Solana 上实现现代认证方法(如通行密钥)的关键一步,因为 Secp256r1 是 WebAuthn 和通行密钥实现所使用的相同椭圆曲线。有了这一支持,我们终于可以结合现代认证方法和 PDA 来管理用户操作。
105+ ### 架起Web2与Web3认证的桥梁
64106
65- ### Web3 认证挑战
107+ 传统钱包的注册流程因助记词的复杂性导致60-80%的用户流失率。用户必须记住12-24个随机单词,永久安全地存储它们,并避免钓鱼攻击——这对主流用户来说是一个不可能完成的任务。
66108
67- Web3 对助记词的依赖构成了普及的根本障碍。传统钱包的注册流程因助记词导致 60-80% 的用户流失率 。
109+ 现代认证方法(如通行密钥)通过将私钥移入专用的安全硬件中,消除了人为错误 。
68110
69- 问题在于助记词要求不完美的人类实现完美的安全性。用户必须记住 12-24 个随机单词,永远安全地存储它们,并且永不成为网络钓鱼的受害者;这对主流用户来说是一个不可能的标准。
111+ 然而,这些系统选择标准化使用secp256r1是因为我们探讨的特定数学和实现优势:
112+ - ** 硬件兼容性:** 伪梅森素数使得在受限的安全元件环境中实现高效
113+ - ** 法规合规性:** NIST标准化允许其用于政府和企业的安全需求
114+ - ** 跨平台一致性:** 可验证的随机参数确保相同的曲线在所有硬件制造商中表现一致
70115
71- 解决方案可能是现代认证方法,例如通行密钥,它通过将私钥移入专用的安全硬件来消除人为错误。然而,要在 Solana 上支持这些方法,我们需要合适的密码学原语 。
116+ 通过对secp256r1的原生支持,Solana开发者现在可以构建利用现有硬件安全基础设施的应用程序,从而通过熟悉的认证方法实现无缝注册,同时保持这一曲线特定数学特性的安全保障的重要性 。
0 commit comments