图片来源:Ark of the Covenant - crystalinks
前言:
1976 年出生的 DH 密钥交换是密码学史上的里程碑事件,标志着非对称加密时代的到来,随后的三十年里,相继诞生了 RSA 和椭圆曲线等加密算法、HTTP 和 BitTorrent 协议、以及 B-money 和 BitGold 等加密货币的探索。
没有这些探索和技术铺垫,就不会有今天的比特币与区块链。饮水思源,今天的密码学科普文尝试以趣味的方式让大家理解 DH 密钥交换的原理。
正文:
背景:在古老的王国 C,老国王去世后留下来两个儿子。
大王子性格心狠手辣,住在王城;
小王子则心地善良,住在郊外的庄园之中。
大王子担心小王子来到皇城与他争夺王位,于是心想,干脆一不做二不休......
城堡里的厨师 Bob 是小王子的心腹,小王子派出信使 Alice 前来与他传递消息。
但 Bob 并不知道谁才是真正的 Alice 而非假装的敌人,于是他们约定:通过同样颜色的帽子来确定可信身份。
那么问题来了:如何在危机重重的皇宫传递帽子的颜色呢?
正当小王子一筹莫展之时,智囊团的 DH 先生,给出了解决方案。
DH 先生:殿下莫慌,臣有一计!可以在皇宫这种不安全的公开信道上实现帽子颜色的秘密交换。
小王子:喔?这么厉害?速速呈上!
DH 先生:殿下你看,城堡和庄园的旗帜是可以遥遥相见的,我们可以充分利用这一点
首先,他们各自选择一个只有自己知道的颜色,我们称为秘密颜色。Alice 选择橘红色而 Bob 选择绿色,这个颜色只能记在心里不能透露给任何人。
Alice 和 Bob 分别确认秘密颜色
第二步,Alice 请庄园的升旗手升起黄色的旗帜,也就是公开颜色,所有人都看得见,Bob 看到后。他们两个都将其与自己秘密选择的颜色相混合。
所以这个时候,Alice 得到了橘黄色(黄色+橘红色=橘黄色),而 Bob 得到了蓝色(黄色+绿色=蓝色)。
Alice 和 Bob 融合颜色
第三步,他们分别在王城和庄园将得到的橘黄色和蓝色旗帜挂起,再将对方颜色与自己的秘密颜色混合。
最后,Alice 和 Bob 都会得到相同的颜色——墨绿色(双方都是:黄色+橘红色+绿色=墨绿色)。于是他们就有了其他人都不知道的颜色作为暗号,可以成功地确认彼此的身份,并继续交换信息。
公开交换之后继续与自己的秘密颜色融合
小王子:嗯,办法倒是不错,不过这绿帽子。。。也太奇怪了吧,如果每次都带着颜色如此清奇的帽子,很容易被注意到吧。
DH 先生:殿下说的没错,所以这样的密钥交换需要经常实施。
小王子:那大王子要是派人假扮其中之一,在心里想个秘密的颜色,在第三步中把旗帜的颜色改成自己融合的结果,岂不是会窃取我们的信息?
DH 先生:殿下英明!这个 bug 我们称为中间人攻击,所以 Alice 和 Bob 还需要出示您的签名来进行身份认证。
小王子:嗯,不错不错,你这个方法就叫做 DH 密钥交换吧。
以上是 DH 密钥交换的简单应用,真实场景下的 DH 密钥交换会复杂的多,以下是
硬
核
广
告
时
间
传统的密钥交换一般会用 CA(Certification Authority)来确保密钥交换安全运行,它在 HTTPS 中的作用主要是作为一个中介,防止中间人攻击。打开 Mac 并搜索“钥匙串访问”就会看到你的 CA,大致是这个样子:
浏览器或操作系统会把常见的 CA 的公钥放在预先存起来,然后在访问使用 HTTPS 的网站的时候通过相应的根证书进行验证。
但这样的 CA 依旧存在安全隐患,如果你能够掌控一个 CA,就可以悄无声息的实现中间人攻击,比如 google 就曾经决定在 Chrome 删除赛门铁克的根证书。
CQL 则采取了自己搭建的去中心化通信 DH-RPC,使用 DHT 来进行命名和密钥交换,从而在整个系统中删除 CA 认证过程。
CovenantSQL 所有的通信都建立在 DH-RPC 之上,包括:
拜占庭容错共识协议 Kayak
Consistent Secure DHT
数据库 API
机器指标信息监控 API
区块同步
DH-RPC 具体实现过程请访问以下链接,或直接点击阅读原文。
https://zhuanlan.zhihu.com/p/43888213


-----FOLLOW US AND GET MORE-----
更多讨论在 CovenantSQL 读者群
欢迎添加小编微信

阅读原文快速开始 CovenantSQL