ecdsa JAVA 私钥推导公钥_ECDSA(椭圆曲线数字签名算法)

ECDSA(Elliptic Curve Digital Signature Algorithm)

一、学习背景--数字签名

在现实工作和生活中,我们使用签名的方式表达对一份文件的认可,其他人可以识别出你的签名并且无法伪造你的签名。数字签名就是对显示签名的一种电子实现,它不仅可以完全达到现实签名的特点,甚至能够做的更好。

常用的数字签名算法有RSA(Rivest-Shamir-Adleman Scheme)、DSS(Digital Signature Standard)等。比特币使用ECDSA来生成账户的公私钥以及对交易和区块进行验证。

二、简单说一下数字签名的工作原理

1.Alice(密码学中常用A到Z开头的人名代替甲乙丙丁等,字母越靠后出现频率越低)生成一对密钥,一个是sk(signing key),是非公开的;另一个是vk(verification key),是公开的。

这一对密钥同时生成,并且在数学上是相互关联的,同时,根据vk无法推测出关于sk的任何信息。

2.数字签名算法接收两个输出:信息M和sk,生成一个数字签名Sm

3.验证函数接收信息M、Sm以及vk作为输入,,返回结果是yes或者no。这一步的目的是为了验证你看到的针对信息M的数字签名确实是由Alice的sk来签发的,用于确认信息与签名是否相符。

与手写签名不同,手写签名基本都是相似的,但是数字签名却受输入影响很大。对输入轻微的改变都会产生一个完全不同的数字签名。一般不会对信息直接进行数字签名,而是对信息的哈希值进行签名。由加密哈希函数的无碰撞性可知,这样和对原信息进行签名一样安全。

899077117ff8?utm_campaign=hugo

以md5加密算法为例

三、ECDSA算法

写在开头:为什么使用ECDSA算法?

两个优点

1.在已知公钥的情况下,无法推导出该公钥对应的私钥。

2.可以通过某些方法来证明某人拥有一个公钥所对应的私钥,而此过程不会暴露关于私钥的任何信息。

证明将在后面给出。

在数学上,任何满足以下方程的点所形成的曲线称为随机椭圆曲线:

math?formula=y%5E2%3Dx%5E3%2Bax%2Bb并且

math?formula=4a%5E3%2B27b%5E2%E2%89%A00,a和b可以为任意值。下面展示几个随机椭圆函数的示例:

899077117ff8?utm_campaign=hugo

y^2 =x^3−x+1

899077117ff8?utm_campaign=hugo

y^2=x^3-1

从图中可以看出,随机椭圆曲线都是关于x轴对称的。

ECDSA算法通过随机椭圆曲线方程的性质产生密钥,有很多的实现方案。其中比特币、以太坊以及其他一些的区块链项目使用的标准为secp256k1,它的公式为:曲线如下图:

899077117ff8?utm_campaign=hugo

secp256k1的曲线图

1.点的加法

在了解如何通过基于secp256k1椭圆曲线的ECDSA算法生成公私钥之前,我们需要了解在随机椭圆曲线里,点的加法是如何实现的。

首先定义椭圆曲线上点的加法。设椭圆曲线上有两点,A和B点,那么作过这两点的直线与该曲线相交于第三点(C点),然后关于X轴对称得到D点,则D为这两个点的和,记作D=A+BD=A+BD=A+B。很明显,D点也在该曲线上。所以椭圆曲线上两点之和也是曲线上的点。

899077117ff8?utm_campaign=hugo

加法图示

特例:

1.如果两点重合,则做该点的切线,与曲线相交点的对称点为和,即A+A=C

如图:

899077117ff8?utm_campaign=hugo

两点为同一点

2.如果两点关于X轴对称,定义A+B=0

2.点的乘法

有了加法以后,乘法实现是不过是进行多次加法运算。有了一个基准点P以后,我们可以对其进行乘法运算,最后可以得到曲线上的另外一个点。

设PPP是椭圆曲线上的一个点,那么正整数kkk乘以点PPP的结果由下面的式子定义,注意式子中的加法是上面提到的椭圆曲线上点的加法:

math?formula=1%E2%88%97P%3DP

math?formula=2%E2%88%97P%3DP%2BP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值