这里总结数字签名机制,数字签名是另外一个密码学原语。当然这里不涉及密码学中的特定的数字签名算法,比如 : RSA,或者ECDSA,这两个算法,留待以后填坑
数字签名特性
类似我们现实中的签名,我们希望他有两个特性:
- 只有本人能签名,但是任何人看到你的签名可以验证这是否是你的签名
- 任何人不可伪造你的签名,不管他看过多少次你的签名。
如上图所见,首先用一种算法,产生一对公钥和私钥,然后用私钥对消息签名,任何人有你的公钥都能够验证是否是你的签名。实际中比如有 RSA(上学期没好好学密码学:( …),ECDSA
不可伪造性(unforgeability)
这个不可伪造性其实是说,比如任何的攻击者,看了很多次你的签名后都不能在另外的从来没签名的消息上模仿,如下图:
实现细节
- 好的随机源: 不光在这里很重要,很多密码学的安全性都依赖与随机数,因此好的随机源是很必要的,然而,这里并没有说什么是好的随机源
- 对消息摘要签名: 由于有时候消息是很长的,所以我们可以用hash 的无冲突性,签名消息摘要而不是消息本身
- 对hash pointer 签名: 那么整个签名会覆盖整个数据结构
实际签名算法
这里留两个坑待补