DAY 19-数位签章- DSA

「快点签名啦。」


今天要来介绍数位签章。
首先澄清一点,数位签章是以数学运算的方式进行的签章,「签章」只是模拟签章的行为与功能的词。
我们刷卡消费时在电子版上签的那个东西并不叫数位签章。

数位签章是靠公钥密码学来实现的,我们之前讲过他的原理,
用私钥加密,用公钥解密。
而我们要做到的就是可以让人确认资讯来源、确认是否被修改。
而另一方面,数位签章的签署人无法否认所为,因为只有他可以签出这样的数位签章。

那麽今天就来实际说一下怎麽操作。

RSA数位签章

RSA的数位签章非常简单,就是直接将RSA的算法颠倒过来,用私钥加密用公钥解密。
这里就不再赘述。

DSA(digital signature algorithm)

这里指的DSA是数位签章演算法,
不是 Driving Safety Alerting 也不是 Democratic Socialists of America,
我室友修的资料结构与演算法那也叫 DSA。

我要讲的是一种数位签章的演算法。

密钥建立

  1. 选定一个1024位元的质数 p

  2. 找一个160位元的 q 整除 ( p-1 )

  3. 寻找一个整数 https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha 使得 https://chart.googleapis.com/chart?cht=tx&chl=ord(%5Calpha)%3Dq

    方法是寻找https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha%3Da%5E%7B%5Cfrac%7Bp-1%7D%7Bq%7D%7D%5Cneq1(mod%20p)

    这里会用到费马小定理跟循环群的概念

  4. 再选择一个 d 介於0跟q之间。

  5. 计算https://chart.googleapis.com/chart?cht=tx&chl=%5Cbeta%3D%5Calpha%5Ed%20%20mod%20q

经过上面的运算就建立好了密钥,

其中公钥是(p, q, https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha, https://chart.googleapis.com/chart?cht=tx&chl=%5Cbeta),私钥是 d。

签章

  1. 临时密钥(ephemeral key)https://chart.googleapis.com/chart?cht=tx&chl=k_E 介於 0 到 q 之间。
  2. 计算 https://chart.googleapis.com/chart?cht=tx&chl=r%3D(%5Calpha%5E%7Bk_E%7D(mod%20p))(mod%20q)
  3. 计算https://chart.googleapis.com/chart?cht=tx&chl=s%3D(SHA(x)%2Bdr)k_E%5E%7B-1%7D%20mod%20%20%20q ,其中 x 是要签章的讯息。

这里的SHA( ) 就是杂凑函数,我们签章的对象是讯息的杂凑值,这样可避免过长的结果。

於是签章的结果就是( r, s ),总共有320位元。

验章

  1. 计算https://chart.googleapis.com/chart?cht=tx&chl=w%3Ds%5E%7B-1%7Dmod%20q

  2. https://chart.googleapis.com/chart?cht=tx&chl=u_1%3DwSHA(x)%20%20m*od%20q

  3. https://chart.googleapis.com/chart?cht=tx&chl=u_2%3Dw*r%20(mod%20q)

  4. https://chart.googleapis.com/chart?cht=tx&chl=v%3D(%5Calpha%5E%7Bu_1%7D*%5Cbeta%5E%7Bu_2%7D)%20(mod%20q)

如过运算结果 v 跟 r 相同,那就确认是本人所签署。
今天先介绍DSA演算法,算法相较於之前都较复杂一些,
有兴趣的读者可以试着证明 DSA 的正确性。


明天我们将来看看由bitcoin所使用的数位签章方法,ECDSA,椭圆曲线数位签章。

图片来源:
https://twitter.com/maj33dullah/status/1401605392195522566
https://memegenerator.net/instance/58480943/correction-guy-stop-look-at-my-beautiful-e-signature


<<:  Day 17 - [语料库模型] 05-实体对应

>>:  Day16 Let's ODOO: Report

#4 - The Global Object &Function Expressions

今天来讲讲两个之後会用到的两个小观念: The Global Object &Function Ex...

机器学习:深度学习

随着理论的成熟,丛集运算能力的提升,深度神经网路模型逐渐发挥了巨大的影响力。 神经元模型 来自於对动...

Debian10安装iRedMail v1.2.1详细教程

iRedMail简介 iRedMail是基于开源的postfix、dovecot、openldap...

[day13] 设定gunicorn Logging

使用gunicorn作为HTTP Server的时候,必须手动指派gunicorn的logger作为...

[Day 5] 阿嬷都看得懂的 HTML 标签怎麽写

阿嬷都看得懂的 HTML 标签怎麽写 前两天我们提到前端工程师的 3 种语言:HTML、CSS,还有...