DAY 20-数位签章-ECDSA

「你拿的是我的信用卡...」


ECDSA 是运用了椭圆曲线密码学所达成的数位签章演算法,
而比特币区块链与以太坊区块链使用的就是ECDSA。

ECDSA的算法和DSA非常类似。

密钥建立

  1. 选择要使用的椭圆曲线
  2. 选取基点 A ,order为 q
  3. 选择小於 q 的随机整数 d
  4. 算出B = dA

其中,椭圆曲线的参数和A、B是公钥,d 则是私钥。

签章

  1. 选择临时密钥https://chart.googleapis.com/chart?cht=tx&chl=k_E ,此临时密钥只能使用一次,否则私钥有泄漏的可能
  2. 计算 https://chart.googleapis.com/chart?cht=tx&chl=R%3Dk_EA
  3. 计算 https://chart.googleapis.com/chart?cht=tx&chl=s%20%3D%20(h(x)%2Bd%20*r)k_E%5E%7B-1%7D%20mod%20%20q mod q,其中 h(x) 是杂凑函数,此则凑函数的输出必须大於 q 。

验章

  1. 计算 https://chart.googleapis.com/chart?cht=tx&chl=w%20%3Ds%5E%7B-1%7D mod q.
  2. 计算 https://chart.googleapis.com/chart?cht=tx&chl=u_1%20%3D%20w*h(x) mod q
  3. 计算 https://chart.googleapis.com/chart?cht=tx&chl=u_2%20%3Dw*%20r mod q.
  4. 计算 https://chart.googleapis.com/chart?cht=tx&chl=P%20%3D%20u_1%20A%2Bu_2%20B

若P点的 x 座标和R的x座标相等,则确认是由本人所签署。

ECDSA演算法中的 q 不必非常大,
160-256位元即可和1024-3072的RSA 拥有相同的安全等级,
也因此运算上更快一些。

在区块链上,交易进行的过程中需要进行数位签章,
也就是当你要把一笔资金转给另外一个人时,
就需要将这笔交易内容经过数位签章,
之後进行验章的步骤,才能正式成立。(当然中间还有很多过程啦


以上介绍了数位签章的三种算法,
RSA、DSA、ECDSA
也讲完了三个椭圆曲线的延伸,
ECC、ECDH、ECDSA(准确来说应该是两种)

图片来源:
https://medium.com/cryptoadvance/ecdsa-is-not-that-bad-two-party-signing-without-schnorr-or-bls-1941806ec36f
https://wizardforcel.gitbooks.io/practical-cryptography-for-developers-book/content/digital-signatures.html


<<:  爬虫怎麽爬 从零开始的爬虫自学 DAY18 python网路爬虫开爬-1网页抓取

>>:  Day-18 EditText

[Day28]程序菜鸟自学C++资料结构演算法 – 基数排序法(Radix sort)

前言:甚麽是基数排序法?在我刚刚接触这个名词的时候心中满是问号,有很多排序法看到名称或许就能猜出是怎...

Day 04: 函式、错误处理

「关於函式的首要准则,就是要简短。第二项准则,就是要比第一项的简短函式还要更简短。这是一个我无法证...

Day4 - 建立Android模拟器

身为一个没有Android手机的用户 当要测试程序时,又借不到Android手机,怎麽办呢?? An...

Day 9 - Event

Event 表示在 DOM 物件上所发生的事件,例如 click点击滑鼠 dblclick滑鼠连点两...

[想试试看JavaScript ] 事件物件

事件物件 事件物件很常跟事件处理一起配着使用 浏览器会主动收集和事件有关系的资讯,并制造出 Even...