最近在研究fabric的加密源代码时,发现其默认的加密函数选择的是secp256r1(P256),这是基于go的官方补充包的实现。区别于比特币/以太坊使用的基于C库的实现(S256),好奇之下开始研究者两者之间的区别。
几天前,我在博客上写了关于椭圆曲线 secp256k1及其在比特币中的用法。这条曲线有一个兄弟,secp256r1。注意倒数第二个位置的 “r” 而不是 “k”。两者都在SEC 2中定义:推荐的椭圆曲线域参数。两者都是场 zp 上的椭圆曲线,其中 p 是256位素数(尽管每条曲线有不同的素数)。
sepc256k1中的 “k” 代表 Koblitz,sepc256r1中 的 “r” 代表 随机。Koblitz椭圆曲线具有一些特殊属性,可以更有效地实现组操作。据信存在小的安全权衡,更 “随机” 选择的参数更安全。然而,有些人怀疑随机系数可能已经被选择来提供后门。
两个椭圆曲线的形式为 y² = x³ ax b。在Koblitz曲线中,我们有
代码语言:javascript复制 a = 0
b = 7
在随机的情况下,我们有
代码语言:javascript复制 a = FFFFFFFF 00000001 00000000 00000000 00000000 FFFFFFFF FFFFFFFF FFFFFFFC
b = 5AC635D8 AA3A93E7 B3EBBD55 769886BC 651D06B0 CC53B0F6 3BCE3C3E 27D2604B
您可以在SEC 2报告中找到其余的椭圆曲线参数。有关帮助了解参数的含义以及如何解码它们,请参阅我之前的帖子。
美国国家安全局建议使用随机曲线供政府使用。它也被称为NIST P-256。或者更确切地说,它 确实 推荐P-256作为其密码学建议套件B的一部分。在21015年8月,美国国家安全局表明忧虑,未来量子计算可能会使Suite B方法不安全。据我们所知,量子计算规模可能是数年,甚至数十年。但是,开发高质量的加密方法需要很长时间,因此NSA和NIST正在敦促人们提前思考。(更新:国家安全局建议使用P-384,直到后量子方法成熟为止。)
由于上述原因,比特币选择使用不太受欢迎的Koblitz曲线,即效率和对随机曲线中可能的后门的担忧。比特币之前,secp256k1没有被广泛使用。