哈希函数,具有以下特征:
1.其输入可以使任意大小的字符串
2.它产生固定大小的输出
3.它能有效的计算,简单的说就是,对于特定的输入字符串,在合理的时间内,我们可以算出哈希函数的输出,对于N位的字符串,其哈希值计算的复杂度为O(N)
要使哈希函数达到密码安全,需要以下特性:
1.碰撞阻力,即无法找到两个输入值,其哈希值是相等的
2.隐秘性,即无法从已知的输出,得到未知的输入
3.谜题友好
安全哈希算法(Secure Hash Algorithm 256, 简称 SHA-256) --- 主要被比特币采用
哈希指针:
一个指向数据存储未知及其位置数据的哈希值的指针,它与普通指针一样可以指向数据存储未知,并且哈希指针还可以明晰某个时间戳下该数据的哈希值的指针.
区块链:
通过哈希指针而不是普通指针构建的一个链表,这样的链表成为区块链.
在普通链表中,每个区块或者节点,既有数据还有指向上一个区块的指针.而在区块链中,指针为哈希指针,每个区块不仅能告诉我们上一个区块的位置,还包含上个区块数据的哈希值.
所以,当区块链中一个数据被改变的时候,其哈希值将发生变化, 导致与下个节点中的哈希指针无法匹配,即会被发现数据发生了改变,这样,我通过根节点(创世区块),便能记住整个区块链的数据,也能验证该区块链的数据是否发生变化.
数字签名:
数字签名即被认为是对纸上手写签名的数字模拟.
数字签名特性:
1.只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效性.
2.签名只与某一特定文件联系,因此签名不能用于表明你同意或支持另一份不同的文件.
数字签名方案由一下三个算法构成:
(sk,pk): = generateKeys(keysize) generateKeys 把 keysize作为输入,来产生一对公钥和私钥.
私钥sk 被安全保存,并用来签名一段消息;公钥pk是人人可以找到的,可以验证签名.
sig: sign(sk,message) 签名过程是 把一段消息和私钥作为一个输入,对于消息输出就是签名.
isValid:= verify(pk,message,sig)验证过程是通过把一段消息和签名消息与公钥作为输入,返回的结果是真,证明签名属实;
网友评论