我近期在研究区块链技术,密码学和传统加密技术被反复提及,因此进行了一些回顾。
加密技术
加密方法可以分为两大类。一类是单钥加密(private key cryptography),还有一类叫做双钥加密(public key cryptography)。前者的加密和解密过程都用同一套密码,后者的加密和解密过程用的是两套密码。现行的双钥加密技术中,密钥有两把,一把是公开的公钥,还有一把是不公开的私钥。
双钥加密的原理如下:
a) 公钥和私钥是一一对应的关系,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之亦成立。
b) 所有的(公钥, 私钥)对都是不同的。
c) 用公钥可以解开私钥加密的信息,反之亦成立。
d) 同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的。
与上述原理对应的,在中本聪论文[1]所提到签名及验证详细流程一般涉及以下几个步骤[2],这几个步骤即可由签名者也可由被签署信息的接受者来完成:
(1)用户生成或取得独一无二的加密密码组。
(2)发件人在计算机上准备一个信息(如以电子邮件的形式)。
(3)发件人用安全的哈希函数功能准备好“信息摘要”.数字签名由一个哈希函数结果值生成。该函数值由被签署的信息和一个给定的私人密码生成,并对其而言是独一无二的。为了确保哈希函数值的安全性,应该使通过任意信息和私人密码的组合而产生同样的数字签名的可能性为零。
(4)发件人通过使用私人密码将信息摘要加密。私人密码通过使用一种数学算法被应用在信息摘要文本中。数字签名包含被加密的信息摘要。
(5)发件人将数字签名附在信息之后。
(6)发件人将数字签名和信息(加密或未加密)发送给电子收件人。