签名:计算机与真实世界的映射----算法(程序)
数字签名我们在理解这个概念的时候只需要注意签名两个字就可以了,他的本质仍然是签名,数字是一个修饰,就是用数字的方法实现现实世界的签名;
现实世界的签名成功需要达成目的需要两个条件:
1,只有你可以制作你自己的签名,但任何看到他的人都可以验证其有效性,
2,我们希望签名只与某一特定文件发生联系,因此该签名不能用于表明你同意或支持另一份不同的文件。
概括起来就是三个属性:
验证有效性,
签名唯一性,
签名文件排他性,
这三个属性针对的对象分别是:
签名者,
文件,
非签名者。
【题外话:这个事例给我一个视角就是如何通过数学方式实现一个现实问题,社会活动中抽象出活动的本质,在本质活动抽象出数学公式,也就是抽象出一个签名活动中对象然后找出对象在活动中的本质是为具体事务的抽象化。】
算法途径的映射
而对于数字签名方案的数学实现也是通过三个算法来实现分别对应这签名者,签名的文件与签名者,签名者、文件与非签名者
三个算法分别对应三个算法:
(sk,pk):=generateKeys(keysize)
sig:=sign(sk,message)
isValid:=verify(pk,message,sig)
不可伪造性游戏中我认为关键是sig(sk,message)是否具有靠谱或者是具备某些特性或特征
同时对于签名有效性的两个条件分别是:
1,尝试次数可以是一个密钥大小的多项式函数,但是不能更多
2,当且仅当他成功伪造的机会非常小:小到我们可以假设在实践中从不会发生
实践中的考量:
1,很多签名算法是随机的,因此我们需要随机性的良好来源
2,实际问题是关于信息的大小,我们是对信息的哈希值进行签署
比特币使用的是椭圆曲线数字签名算法(ECDSA)是DSA算法利用了椭圆曲线的升级版本,在这个算法中要求随机性良好来源至关重要,ECDSA要求generateKeys和sign这两个算法都是随机性良好。
这些算法都是一种程序
身份= 地址=哈希值(pk)
通过一个程序使用同样一个随机性性来源生成两个相同的256位密钥,这个概率如此之低,在现实中可以忽略不计
现实与理论的唯一的关键点或者是不可控点就是良好的随机来源。
虽然你一个人可以生成无数个pk但是,身份隐秘,行为发表的声明无法隐秘,在行为的连续性上发现其相似性进而找到与现实世界的映射关系,这也就不存在隐秘了。