继续学习签名部分

在前一篇文章

诸位大神的回复给予我很大的帮助,尤其 @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: 继续学习签名部分

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×