私钥生成公钥的例子?钱包 私钥
更新时间:2024-01-19 07:40:37 •阅读 0
私钥生成公钥的例子?
私钥生成公钥的过程使用了一种非对称加密算法,例如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点解答对大家有用。