周瑜与诸葛亮的交流不能没有“承诺”

出自电视剧《三国演义》

在小说《三国演义》中有这样一节故事:

        瑜邀孔明入帐共饮。瑜曰:“昨吾主遣使来催督进军,瑜未有奇计,愿先生教我。”孔明曰:“亮乃碌碌庸才,安有妙计?”瑜曰:“某昨观曹操水寨,极其严整有法,非等闲可攻。思得一计,不知可否,先生幸为我一决之。”孔明曰:“都督且休言。各自写于手内,看同也不同。” 瑜大喜,教取笔砚来,先自暗写了,却送与孔明。孔明亦暗写了,两个移近坐榻,各出掌中之字,互相观看,皆大笑。原来周瑜掌中字,乃一‘火’字,孔明掌中,亦一‘火’字。瑜曰:“既我两人所见相同,更无疑矣。幸勿漏泄。”孔明曰:“两家公事,岂有漏泄之理?吾料曹操虽两番经我这条计,然必不为备。今都督尽行之可也。”饮罢分散,诸将皆不知其事。

        在赤壁之战前,周瑜和诸葛亮共同商讨对曹战术,双方心里都有了“火攻”的想法,但诸葛亮既想传达给周瑜自己的想法,同时又希望知道对方的想法并测试对方;周瑜也是如此,因此双方在军帐内进行了一次有趣的博弈,当然最后双方都交出了满意的答案,这个故事也被后世津津乐道。不过我们调皮一点,给周瑜和诸葛亮两人设置一些门槛,他们又该如何交流呢?

        由于一些原因,周瑜和诸葛亮不能离开各自的军帐,双方想要交流计略,又希望测试对方的想法,他们有什么方法呢?

        1、装盒法

        诸葛亮将自己的计略写在竹简上装入盒子,周瑜同样将计略装入盒子。双方约定一个时间共同寄出盒子并在对方收到后回信,这样就能在不见面的情况下交流想法了。真的是这样吗?

        由于双方不能直接沟通,需要派遣信使递送物品,然而信使如果被谋反,诸葛亮或者周瑜就可以通过信使提前获取对方的信息,竞争的平衡就被打破了。所以诸葛亮和周瑜要讨论另一种方法。

        2、盖章法

        为了知道盒子有没有被拆封过,周瑜和诸葛亮各自在封口处盖上了印章,还在盒子和内容里写上了寄送时间,只要信件到手后印章完整,时间也没有偏差太多,双方就能确认物品没有被信使提前拆封。为了保证信使不被贿赂,双方甚至选择用信鸽来传递盒子(假设这个信鸽能带上盒子)。然而问题依然存在,由于信鸽传递物品是需要时间的,盒子送到两人手中的时间一定不同步,诸葛亮可以在收到周瑜的信息后再把自己的盒子送出去,那么这一次博弈就不公平,因为诸葛亮提前知道了周瑜的隐秘内容(周瑜同样也做到类似的事情),对此周瑜只能单独派出人员去核对,这无疑提高了博弈的复杂度。如何确保二人在揭晓答案前不让对方知晓任何信息呢?

        在遥远的古代这个问题是无解的,然而随着密码学技术的发展,周瑜和诸葛亮的问题在现代有了一种解决方案——承诺方案Commitment Scheme

        承诺方案是密码学中的一项名词,指代一个“针对双方的互换方案”。在这句话中,双方代表着承诺方(负责发起承诺)和接收方(负责验证承诺),互换方案则包括两个阶段:承诺阶段与公开阶段。为了形象的表达,我们依然以诸葛亮和周瑜的故事作为例子:

        ①为了使用承诺方案,诸葛亮和周瑜事先确定了一项公开的哈希函数,这个哈希函数具备良好的抗碰撞性与单向性,这里我们假设这个函数是SHA3-256(所谓抗碰撞性,就是指对于哈希函数而言,很难找到两个数值x, y满足Hash(x)=Hash(y);所谓单向性,指从x计算Hash(x)很容易而从Hash(x)倒推x很难)。

        ②诸葛亮将自己的信息m(m=“火”)和一个随机的数字r共同进行哈希,得到一个承诺,即Commitment诸=SHA3-256(m,r);周瑜也生成相应的承诺。

        ③诸葛亮先把自己的承诺发给周瑜,周瑜在收到诸葛亮的承诺后,也把自己的承诺发给诸葛亮。由于哈希函数的特性,周瑜和诸葛亮很难根据承诺倒推出原文,确保了信息的不泄露。

        ④当双方都确认收到了承诺后,双方公开自己的相应信息和随机数,由于哈希函数的单向性,周瑜和诸葛亮可以根据公开的信息和随机数计算哈希值,比对之前双方提交的哈希值,如果哈希值相同,说明对方没有作弊;反之如果哈希值不同,说明对方有作弊行为。

        更进一步解释,由于前文提到哈希函数的抗碰撞性和单向性,诸葛亮想要作弊,再收到周瑜的公开信息m’后,就必须找到一个随机数r’,让后提交的承诺值等同于之前提交的承诺值,即SHA3-256(m’,r’)=SHA3-256(m,r),这对于SHA3-256哈希函数来说几乎是不可能的,由于数值过大,诸葛亮在有生之年没有办法计算出相应数值,所以周瑜只需要计算诸葛亮公开信息的哈希值,再比对诸葛亮提交的承诺,就能了解对方有无作弊情况(诸葛亮同理,也能检查周瑜是否作弊)。

        在上面的例子中,周瑜和诸葛亮互为承诺方与接收方,而①、②、③为承诺阶段,④为公开阶段。在密码学中,承诺方案代表着在信息交换阶段双方不用暴露信息内容就能交换信息,对于信息的验证则通过揭露相关因子来达成,故承诺算法经常用于没有第三方作为信用中介,信息又需要在异步传输过程中保密的场景。简单又便宜的承诺方案,避免了信用第三方的风险与使用成本,让其在现代密码学中广泛应用。而对于区块链等去中心化网络,承诺方案更是可以大展手脚了,投票、竞价、匿名交易等等,都有承诺方案发挥的空间。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 登出 /  更改 )

Google photo

您正在使用您的 Google 账号评论。 登出 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 登出 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 登出 /  更改 )

Connecting to %s