在前一篇文章
诸位大神的回复给予我很大的帮助,尤其 @ripplerm 对我关心的几个问题给予了解答很阐述,万分感激。
这篇文章继续学习签名部分。
关于验证过程的摘要
首先继续那我摘出来的这段话a signature consists of two numbers, R and S, and you use a private key to generate R and S, and if a mathematical equation using the public key and S gives you R, then the signature is valid.
结合steem,我对此的理解签名逻辑上分为两部分,R和S,用私钥(和摘要)生成
校验的时候,用(公钥,S)带入数学公式,得到R,证明签名合法性。(摘要用不?)
对于我自己备注的摘要用不?
我想了一晚上,技术上没想明白,但是从逻辑上,如果摘要不要,岂不是这个签名可以用在任何信息上了,这不科学,哈哈哈。所以一定是要的。
关于验证签名的合法性
想明白上述问题以后,那么对验证签名的合法性的流程有了更详细的了解。
结合xeroc的文章以及steem的实例
我理解验证签名的过程和生成签名的过程有些类似。
- 拿到带签名的
Transaction
- 去掉签名部分,用剩余部分按照生成签名的流程来生成
摘要(序列化,生成头部,生成摘要)
- 取出签名的
(S、R)
以及Transaction 用户对应的public keys
(公钥 steemd上查询或者用API获取) - 通过
公钥和S算出R
则签名合法,否则异常
代码以及测试
python-graphenelib 以及 python-steem 对签名验证部分进行了很好的封装
xeroc的文末提供一段验证签名的合法性的代码
为此我特意从steemd取了个最新的 transactions
分别用我的公钥以及robin.hood 的公钥去验证
然后,结果如我所料,我的公钥用来验证失败,robin.hood(voter) 的公钥验证通过
This page is synchronized from the post: 继续学习签名部分