1. 首页 > 区块百科  > 私钥生成公钥的例子?钱包 私钥

私钥生成公钥的例子?钱包 私钥

广告 X
OK欧意app

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

私钥生成公钥的例子?

私钥生成公钥的过程使用了一种非对称加密算法,例如RSA算法。首先,随机生成两个大素数p和q,然后计算它们的乘积n=p*q,并求出欧拉函数φ(n)=(p-1)*(q-1)。

接着选择一个小于φ(n)且与φ(n)互质的整数e作为公钥,计算出它的逆元d作为私钥。最终,公钥就是由n和e组成的,私钥就是由n和d组成的。当需要加密消息时,使用公钥对消息进行加密,只有使用私钥才能解密。

这种加密方式具有较高的安全性,因为破解私钥需要计算大素数的乘积,是一个非常困难的问题。

SignforMSOffice是怎么解决数字签名问题?

如果把密码学里的数字签名看成有两个输入一个输出的函数
,那么私钥是x,被签名的消息是y, 得出来的签名z是跟x,y同时绑定的,注意是“

同时

”。
所以,用同样的私钥给不同的文件/消息签名,得出来的签名是不同的。
如果f()内部在每次执行签名的时候还会产生一个

随机数

的话,那么这个随机数通常也会直接或者间接成为z的一部分,这样的话,即使文件相同,在不同时间进行的签名也会不同。
否则,签名就很容易被伪造到另一份文件上了。不仅仅是实用的椭圆曲线签名算法有这个性质,其他的签名算法,比如实用的RSA或者ElGamal签名,也有这个性质。
放在人的身上,就可以理解为,即使是你自己用同一支笔给文件签名,签在两份文件上的签名也并不是完完全全相同。(当然,人签名的情况其实更复杂)
=============分割线===============
下面补充回答怎么验签
拿“教科书式RSA签名”来做个例子吧。(评论里不能用latex公式,我就搬到答案里了)
签名用的是一对钥匙(d,e)。N是两个大素数的乘积。
其中d是私钥,签名者用d来签名。e是接收方用来验证签名的钥匙,也就是公钥。
e、d两者满足

产生签名 Sign(m, d):


对于消息m (任意正整数), 签名是

验证签名 Verify(m, )


计算
如果签名的确是用d签在m上的,则有
(第二个等号来自

欧拉定理 (数论)

和 上面提到的d*e性质)
满足这个条件就是合法的签名了。
否则,签名无效。

这个签名的(有限的)安全性来自于当N足够大的时候,并且e和d差不多大的时候,无法在多项式时间内,从公开的信息e和N算出没公开的签名密钥d。
实际应用中,m可能和一组随机量组合,并且hash(比如使用SHA-3),然后再签名签在这个hash值上。安全性基于从公钥计算私钥的复杂性,以及hash对碰撞的抵抗性。

椭圆曲线主要是提供了更难计算离散对数问题的群和对Bilinear Map的支持,这个比较复杂,没法几百个字就说清楚。原则上来说,

验证

一个签名,就是用一个函数把公钥、消息、签名当输入(注意,私钥在这里没有直接出现),计算一个特定的“等于”关系。

到此,以上就是小编对于钱包私钥例子的问题就介绍到这了,希望介绍关于钱包私钥例子的2点解答对大家有用。