| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> libsecp256k1比特币密码算法开源库(五) -> 正文阅读 |
|
[区块链]libsecp256k1比特币密码算法开源库(五) |
2021SC@SDUSC ECDSA原理本文我会讲解如何使用椭圆曲线secp256k1通过私钥生成公钥、进行数字签名和签名验证,同时说明在签名过程中要注意的随机数k。 secp256k1的参数前面提到,我们要合理选取椭圆曲线的两个参数a和b的取值,生成元P点的选取,以及选一个足够大的素数p,让椭圆曲线这个群足够大,并让生成元P经过多次几何加法运算生成的循环子群足够大,大到可以遍历椭圆曲线群内全部的点。在secp256k1的标准定义中,生成元是G,所以在下文中我们改用G描述。 在secp256k1中,定义a=0,b=7,也就是说在secp256k1中椭圆曲线方程就是y^2 = x^3 + 7 ,当然在有限域中我们应该写作y^2 =( x^3 + 7 ) mod p。 上文中椭圆曲线参数数据来自: https://en.bitcoin.it/wiki/Secp256k1. 公钥生成首先在说签名之前先来说如何根据私钥生成公钥。其中私钥就是{1,2,3……,n-1}中的随机的一个值,这个n就是上文椭圆曲线的秩n,可见私钥可以选择的空间还是非常大的。那么公钥就是通过私钥生成的,生成的方法就是标量乘法,用nG得到的椭圆曲线上的一个点就是公钥。由于这个循环群遍布群的所有点,因此私钥和公钥其实就是一一对应的,唯一的私钥确定公钥,公钥又同时对应一个私钥。 最后我们给私钥和公钥给出符号表示: 签名签名就是使用私钥对要签名的文件进行签名。所以这里要签名的一方需要准备两个量:发送方本人的私钥和要签名的文件。签名要经过六步,下面开始: 第一步,在{1,2,3……,n-1}中取一个随机数k。这里的n就是椭圆曲线的秩,也就是椭圆曲线中点的个数,因此随机数k就是一个二进制256位的数字。 签名验证签名验证就是验证签名是否正确,防止有人伪造签名,如果签名验证通过,那么至少可以证明发出这个文件的确实就是正确的发送方而不是什么别的人。 在说验签之前先需要梳理一下目前我们的已知量,因为签名是本人签名,而验签是所有人都可以验证,所以有些东西是只有我们本人知道的,有些东西可以让任何人都知道。目前我们有签名生成过程中的一些中间量如r、s、z,其中r和s构成了数字签名,z是对数据的哈希结果,在区块链比特币中通常称z为哈希数字摘要,这三个量都是公开的。此外还要椭圆曲线的两个参数a和b,大素数p,循环群生成元G,椭圆曲线群的秩n,secp256k1是个公开的算法,我都可以在网上找到这些参数,那这些参数也就是公开的。此外还有公钥HA也是公开的,在“公钥生成”部分我也说过根据公钥要花几亿年才能求出私钥。此外还有一个随机数k,下一个目录会讲 验签的过程一共有四步: k最后你可能会发现一个问题,签名过程中我用到了一个随机数k,在验证签名的时候我没有用到它。那么这个k是不是可以随意公开或者消息签名时多次使用呢?答案是k既不能泄露,也不能相同。历史上也有许多使用相同k导致泄密的前车之鉴。 首先先说为什么k不能泄露。 然后再来说说为什么k不能重复使用。 不过好在上面我们推导关键步骤还是基于相同私钥,也就说两个人碰巧用了相同的k(不过这概率还是很低,毕竟k取值是{1,2,3……,n-1}中的一个,而n又无比巨大),由于使用不同的私钥因而还是无法攻破他们各自的私钥,因此只要是一个私钥就别用相同的k就行了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 3:22:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |