08.14 进入 区块链,必须知道这些冷门区块链知识

进入 区块链,必须知道这些冷门区块链知识

提到密码,我们“加密”的初衷大多是为了安全。无论社交网络的个人隐私,还是财产持有,凡是人们重视的,少有愿意完全公开透明地暴露于公众之下的。

涉及到金融领域,谈及货币,更是让人无法轻视。货币的天然属性决定了其与安全的密切关联,从金库、保险柜、镖局到ATM和运钞车、存折、银行卡、口令、优盾,无不在证实它的重要性。

进入 区块链,必须知道这些冷门区块链知识

比特币与密码学一体同胞

密码学对比特币而言,不仅仅是一种外在的安全手段,而是生长于比特币体系的一部分,可以很负责任的说,没有密码学的支撑,比特币体系会完全崩塌,因为比特币是自带安全属性的数字货币。也是为什么想了解比特币必须了解密码学。

比特币利用现有密码学成果构建了一个全新的数字货币世界:去中心化、区块链、可编程货币。

现代密码学理论共识遵循的是“柯克霍夫原则”

19世纪,奥古斯特·柯克霍夫提出:密码系统应该就算被所有人知道系统的运作步骤,仍然是安全的

算法是公开的,唯一需要保护的是密钥。举个例子:研制和生产锁与钥的方法和工序透明化,锁可能因为制作漏洞,钥匙没保护好,被复制出多把能够与之匹配的钥匙或暴力解决。

进入 区块链,必须知道这些冷门区块链知识

对称加密与不对称加密

对称加密:对同一份敏感数据,加密解密密钥是相同的。

非对称加密:非对称加密算法需要两个密钥:公开密钥和私有密钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

公钥和私钥不一定只有一个数字,是可以有多个,具体几个数字依赖于非对称加密算法,详见下例。

假设现在明文待加密信息是数字65,首先给出加密公式:c代表加密后数字,(n,e)对应我们的公钥对,m代表明文,≡的意思是同模运算,比如60≡4(mod 7),60对4取模后等于4.计算密文2790,解密公式:d对应私钥的2753,其余字母和加密过程相同,解密运算为:明文数据65.

综上,满足非对称加密的密钥对是存在的,同时我们也做了加解密尝试。

非对称算法通过公私鈅分别加解密方式给信息交换带来了巨大的变化

  • 在不安全的环境中传递敏感信息成为可能。从上文可以知道,公钥是完全公开任意传播的,通过公钥是无法推算出私钥的,私钥是不公开不发送不传播的,仅仅消息接收方知道就可以,其他任何人都不需要知道
  • 多方通信所需密钥数量急剧减少,密钥维护工作变得异常简化。比如N个互不信任且互有通信需求的人,如果使用对称加密算法,则需要 N!/2 个密钥,如果使用非对称加密仅需要 N 个即可
  • 基于非对称加密发展起来的数字签名技术从数学意义上解决了自证身份问题,使得信息接收者可以确认消息发送方身份信息且不可更改
  • 密码学问题对数学问题的依赖空前提高。看似无用的甚至古老的数学难题比如数论、离散对数等在此均能用上。

散列算法

我们使用各种云盘、虚拟存储空间应用的时候一定都有类似的体会,上传一个明明很大的文件,可是速度却非常快,而有时上传一个小得多的文件却似乎进度条要走很久。实际上,云盘类产品对相同文件只会保留一份真实的存储,多个使用相同文件的用户只需“索引”到该存储位置即可。

散列算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的散列值都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的散列值可以检验数据的完整性。一般用于快速查找和加密算法。

本质上,散列算法的目的不是为了“加密”而是为了抽取“数据特征”,你也可以把给定数据的散列值理解为该数据的“指纹信息”,一个可靠的散列算法F需要满足:对于给定的数据M,很容易算出哈希值X=F(M)/哈希值是固定的;根据X无法算出M/算法不可逆;很难找到M和N令F(M)=F(N)/找到成立的等式相当于碰撞,这样的碰撞会使算法本身存在的意义消失,因为每个人身上的DNA不同。

还有,关于二次散列,比特币的工作量证明和密钥编码过程中多次使用了二次哈希,如 SHA256或RIPEMD160(SHA256(K)),这种方式带来的好处是增加了工作量或者在不清楚协议的情况下增加破解难度,从安全性角度并没有显著增加。对于特定的待散列数据和特定的散列算法,可以知道散列值是一定的,这种情况下如果用散列保护敏感数据,那就很容易使用字典攻击反向推算。

数字签名

有了非对称加密和散列算法的准备,下一步就是数字签名了。数字签名是数字世界里用于身份辨识的一种解决方案。附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。

如何验证签名呢?接收方首先使用签名者的公钥对签名值解密即可得到摘要值,然后使用约定的算法对待签名数据进行散列运算后和解密得到的摘要值进行比较即可验证。这里有一个图形化的数字签名过程有助于理解数字签名的整个过程。

可读性编码

可读性编码就是不改变信息内容仅改变内容的表现形式,部分编码方式还加入了容错校验功能,通常是为了保证更好的通信传输。

比如二进制的 1111 对应十进制的 15 这就是一次编码。是用十进制对二进制进行编码,拿到一个编码后的数据,如何知道该数据是使用了哪种形式的编码呢?这个是通过前缀来实现的,如比特币地址的前缀是 0(十六进制是0x00),而对私钥编码时前缀是 128(十六进制是0x80)。


分享到:


相關文章: