一场椭圆曲线的寻根问祖之旅 | FISCO BCOS密码学探究

2023-11-22 14:10

本文主要是介绍一场椭圆曲线的寻根问祖之旅 | FISCO BCOS密码学探究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文介绍密码学中常见的椭圆曲线以及他们之间的关系,介绍不同标准体系的命名规则,尝试描述椭圆曲线之间的家族演义关系。文章试图讲清椭圆曲线相关概念和功能,不涉及复杂的数学证明和推理,欢迎感兴趣的同学阅读。笔者主要参考Wikipedia和相关组织网站的信息进行整理,不排除出现纰漏的可能,欢迎专家批评指正。

一个可能你没关心过的问题

在《一个数字引发的探索——ECDSA解析》(加链接)中提到一个椭圆曲线secp256k1,它有一些特性,可以快速计算出recoveryID。

这个secp256k1为什么如此命名?

不怕各位笑话,我在弄清楚它之前,经常拼写错,写成sec256pk1,seck256p1等😅

咬文嚼字secp256k1

搞清楚secp256k1的命名含义其实很简单,搜索引擎可以快速为你定位到答案,它出自一个密码协议标准,每一个字母和数字都代表着特定含义,我们来逐一解析。

(1)密码协议标准

第一部分是「sec」,sec是Standards for Efficient Cryptography 的简称,是SECG发布的一种密码学协议标准。

SECG发布的「SEC 1」和「SEC 2」两个关于椭圆曲线的协议标准,在「SEC 2」中有详细说明secp256k1以及其他曲线的参数定义。

除了「sec」,还有众多其他关于椭圆曲线的协议标准,从「SafeCurve」中可以看到有下列不同类型的标准。

「SafeCurve」此处较久没有更新,有些标准已经更新了多次,例如NIST关于数字签名的标准 FIPS 186目前在用的是第四版,第五版也在起草中了,从「NIST」官网中可见。

NIST是美国的国家标准技术研究所(National Institute of Standards and Technology),因此,NIST的标准也是美国标准。

「NIST FIPS 186-4」标准中定义了若干椭圆曲线标准,例如NIST P-256、NIST P-384等,其中开头NIST也代表密码协议标准的名字。后续描述都是围绕这两个标准来解析。

(2)有限域

第二部分是「p」,p表示该椭圆曲线是基于素数有限域Fp。有限域是离散数学中的概念,此处不做展开,简单来说,它是一个由有限数量元素组成的集合,元素之间可以进行加法和乘法计算,具备一些独特的属性。

密码学中使用椭圆曲线都是基于有限域的,除了素数有限域Fp之外,还有另一种特征为2的有限域F2m (因输入格式问题,全文2m应为2的m次方,下同),Fp的大小(元素个数)为p,F2m的大小为2m。

基于Fp的椭圆曲线为:

基于F2m的椭圆曲线为:

在「SEC 2」中还定义了sect163k1、sect163r1等曲线,其中,t表示的是该曲线基于F2m。在「NIST FIPS 186-4」中定了P-256、B-163等曲线,P-表示基于Fp,B-表示基于F2m。

(3)有限域大小

每个椭圆曲线E都有若干关键参数,包括阶为n的基点G和系数h等,其中,n为一个大素数,n*h为椭圆曲线上点的数量。为了计算效率考虑,h通常设置为1、2或4。

通俗地讲,如果椭圆曲线上的点数量越多,那么这条椭圆曲线的安全度就越高,因此n的取值是影响曲线安全的关键。

椭圆曲线又都是基于有限域的,曲线上的点都是有限域中的元素,因此,有限域大小决定了曲线安全度。

第三部分「256」就是有限域大小的表现形式,还有更多其他如192、224、384等,在「NIST FIPS 186-4」中有个表格展现了Fp 和F2m两个域的各种不同大小配置。

SEC标准在这块的设置和NIST标准类似,我们会看到p系列的曲线有p192、p224、p256(secp256k1就是其中一种)、p384和p521,t/B系列有t163/B-163、t233/B-233等。

(4)Koblitz Curve

第四部分「k」表示该曲线是Koblitz Curve,从「SEC 2」中可以看到还有此处标记为r的曲线(如secp256r1),r表示该曲线是伪随机曲线Pesudo-Random Curve。

Koblitz Curve命名源自数学家「Neal Koblitz」,它是一种特殊的曲线,它的一些参数是精心挑选设置的。Koblitz Curve具有自同态的性质,可以通过优化大幅提升计算效率。

相比之下,Pesudo-Random Curve的对应参数是通过随机种子计算出来的,有标准的检验算法可以检测所有参数是随机种子产生而来。

对应「(2)有限域」中的两个椭圆曲线,Koblitz Curve分别简化为

例如,secp256k1对应的曲线b=7,即曲线表示为

在「NIST FIPS 186-4」中Koblitz Curve曲线以「K-」标记开头,分别有K-163、K-233等。

(5)末位标记

到了第五部分「1」,这是代表在前4个条件下提供了多种推荐参数设置,在SEC标准中大部分该位都是1,即只提供一种推荐参数,sect163r2是一个例外。

下面把SEC和NIST两个标准推荐的曲线分别列一下,二者有较大部分是相同的参数设置。

SEC

NIST

secp192r1

P-192

secp224r1

P-224

secp256r1

P-256

secp384r1

P-384

secp521r1

P-521

secp192k1

secp224k1

secp256k1

sect163k1

K-163

sect163r1

sect163r2

B-163

sect233k1

K-233

sect233r1

B-233

sect239k1

sect283k1

K-283

sect283r1

B-283

sect409k1

K-409

sect409r1

B-409

sect571k1

K-571

sect571r1

B-571

上述表格中,同一行中SEC和NIST都出现的,两个曲线虽然名字不同,但参数完全相同,也就是说其实一样的。

橙色底纹的几个SEC曲线没有对应的NIST曲线,因此SEC标准包含的曲线比NIST多一些,本文开头提到的secp256k1就是SEC单独存在的。

说到这里,不得不提一个正经八卦。据说,NIST推荐的Pesudo-Random Curve,也就是P和B系列,并没有公布随机数挑选规则,外界存在一种疑虑,可能NSA(美国国家安全局)掌握了后门,能够轻易破解这些密码协议。有兴趣的同学可以搜索「Dual_EC_DRBG后门」,更大的八卦是据说中本聪选择secp256k1作为比特币签名算法的曲线,而没有选择更常用的secp256r1,也是因为这个潜藏的风险。

椭圆曲线族谱

调研发现,「Standard curve database」记录了比「SafeCurve」更为详细的标准和曲线,感觉这可以算是椭圆曲线族谱了。翻阅该网站记录的所有曲线,发现绝大部分还是基于「(2)有限域」中的曲线,推荐的参数不同而已。

但是,在「other」中存在几种例外,E-222采用Edward Curve,Curve25519采用Montgomery Curve,Ed448采用Twisted Edward Curve。

Edward Curve是什么?Montgomery Curve又是怎样的?Edward与Twisted Edward Curve又有什么关系?

上述问题再一次触碰到我的知识盲区,所以接下来只好以截图为主,内容源自Wikipedia,如果觉得看着有点晕,可直接跳过看结论。

「Edward Curve」定义如下:

「Montgomery Curve」定义如下:

「Twisted Edward Curve」定义如下:

「Curve25519」定义如下:

「Ed25519」的定义如下:

根据Wikipedia,大概可以整理出这么几个信息:

  1. Edward Curve是Twisted Edward Curve中的一种
  2. Twisted Edward Curve和Montgomery Curve可以互相转换
  3. Edward Curve和Montgomery Curve这两种曲线都具有特殊属性,例如能够为计算加速
  4. Curve25519是一种曲线,Ed25519是一种签名算法
  5. Curve25519又是精选的Montgomery Curve,具有更高的计算效率
  6. Curve25519和Ed25519采用的曲线是一致的,一个是Montgomery表现形式,一个是Twisted Edward Curve表现形式
  7. 25519的取名来自于该曲线的有限域参数p=2255-19

在阅读Wikipedia的过程中发现一个名字「Weierstrass equation」,原来它才是这些曲线的鼻祖,在一个域k上的任何一个平面曲线,都可以表示成Weierstrass equation。

不难发现,前面提到过的各个公式都是Weierstrass equation的一种演化版本(Twisted Edward Curve看起来不是,但是它可以转换到Montgomery Curve,本质上也一样)

到此,为椭圆曲线寻根问到祖,并且从「STD」也获知了椭圆曲线家族的族谱。「STD」中罗列了多个其他标准,例如Brainpool曲线系列、BN曲线系列、MNT曲线系列等,这些系列的背后都代表了一种独特的曲线生成哲学,或是为了提供可验证的随机数,或是为了提供满足Paring的特性,或是为了提高抗攻击的能力等等,每一份精心选择的参数都是一群数学家们巧夺天工的设计。

后话

古有拆文解字,参透汉字玄机,道破人生天机;

而今咬文嚼字,摸清椭圆原理,揭开曲线家谱。

始于名字,解码secp256k1,厘清标准;

终于名字,问祖weierstrass,致敬大神。

通过了解椭圆曲线之间的内在关系,对其设计有了更多一点的理解。知道的更多了,不知道的也更多了,那些特殊曲线的数学原理是什么?为什么具有更高的计算效率?性能能提升多少?…

又是一个深夜,拥抱最新的收获,夹杂更多的困惑。电脑中正好在播放“把太细的神经割掉,会不会比较睡得着…“

参考资料

SEC1:SEC2:https://www.secg.org/sec1-v2.pdf

SEC2:https://www.secg.org/sec2-v2.pdf

NIST:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf

STD:Home | Standard curve database

SafeCurves:https://safecurves.cr.yp.to

Koblitz Curves:https://link.springer.com/content/pdf/10.1007%2F3-540-46766-1_22.pdf

Weierstrass Equation:LMFDB - Weierstrass equation or model (reviewed)

Montgomery Curve wiki:https://en.wikipedia.org/wiki/Montgomery_curve

Twisted Edward Curve wiki:https://en.wikipedia.org/wiki/Twisted_Edwards_curve

Edward Curve wiki:https://en.wikipedia.org/wiki/Twisted_Edwards_curve

ECDSA wiki:https://en.wikipedia.org/wiki/EdDSA#Ed25519

Curve25519 wiki:https://en.wikipedia.org/wiki/Curve25519

Curve25519 paper:http://cr.yp.to/ecdh/curve25519-20060209.pdf

Ed25519 paper:http://ed25519.cr.yp.to/ed25519-20110926.pdf

了解更多干货内容,请关注FISCO BCOS开源社区公众号,访问FISCO BCOS代码仓库可下载项目所有源代码:https://github.com/FISCO-BCOS/FISCO-BCOS,欢迎点击页面右上角star收藏,获取最新版本。

这篇关于一场椭圆曲线的寻根问祖之旅 | FISCO BCOS密码学探究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410693

相关文章

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

Matlab中BaseZoom()函数实现曲线和图片的局部放大

BaseZoom工具下载链接: 链接:https://pan.baidu.com/s/1yItVSinh6vU4ImlbZW6Deg?pwd=9dyl 提取码:9dyl 下载完之后将工具包放置合适的路径下,并在matlab中“设置路径”中添加相应的路径; 注:可以先运行如下图片中的语句,看看是否报错;如果报如下错误,说明matlab未安装“Image Processing Toolbox”工

HTML5将会带来一场Web革命

一个不起眼的对网页的标记机制为何有这么大的影响? HTML5 引起的广泛关注是否仅仅是一时的科技狂热? 总之,为什么计算机专家需要关心这个呢?   AD:2013云计算架构师峰会课程资料下载   面向万维网(WWW)的软件开发人员认为新的 HTML5 规范正在革新现有 Web 系统的呈现、工作、使用方式。他们说 HTML5 简化了程序员的工作,使访问多种多样的设备和应用程序更加方便,并且提

密码学读书笔记小结

密码学是保证消息的私密性和完整性以及消息认证的基础。加密算法的选择和密钥的管理是安全机制的效率、性能和可用性的关键。 公钥加密算法: 分发密钥比较容易,但是对大数据量的加密性能较差密钥加密算法: 更适合大批的加密任务混合型加密协议: 例如TLS,先用公钥加密建立一个安全通道,然后使用通道交换密钥,并将此密钥用于后续数据交换。 对分布式系统攻击的分类: 窃听: 未经授权获得消息副本伪装: 在未

(4)SVG-path中的椭圆弧A(绝对)或a(相对)

1、概念 表示经过起始点(即上一条命令的结束点),到结束点之间画一段椭圆弧 2、7个参数 rx,ry,x-axis-rotation,large-arc-flag,sweep-flag,x,y (1)和(2)rx,ry rx:椭圆的x轴半径(即水平半径) ry:椭圆的y轴半径(即垂直半径) 这两个参数好理解,就是椭圆的两条对称轴半径,相等即为圆 也可以写比例,写比例时默认用符合条件