E11·比特币:一个信任数字化的实例
曾汨: 听众朋友们大家好,欢迎收听《亿聪哲史》第 11 期,我是主播曾汨。
阿剑: 我是主播阿剑。
曾汨: 作为密码学货币的代表,比特币当中用到的密码学一直以来都在不断地被人们学习、研究和讨论。这也是《亿聪哲史》开播以来一直都很想聊的一个主题。今天我们非常高兴可以请来一位做密码学研究的专业人士 Kurt Pan 来和我们一起好好聊一聊比特币上面的密码学。Hello Kurt,请你先和我们的听众朋友们打个招呼,做一下自我介绍吧。
Kurt Pan: 好的,阿剑和曾汨老师好,各位《亿聪哲史》的听众朋友们好。我是 Kurt Pan。我的自我认知是叫做 Crypto Primitive,叫做密码学原始人。我本人是接受过密码学的博士的学术训练,同时我也受到密码朋克的这种草根的自我主权革命的这种意识的感召。我现在就致力于成为一名有着密码学学术背景的新一代密码朋克。
曾汨: 欢迎 Kurt。那么在开始我们今天的聊天之前,我想先请教 Kurt 一个非常基础的问题。就是我们在聊密码学的时候,大家往往会提到密码学原语这个词语。但其实原语在我们日常的语境当中,并不是一个非常常见的词汇。所以我们应该怎么去理解原语在密码学当中的含义呢?
Kurt Pan: 好的好的,又到了我喜欢的咬文嚼字的环节啊。其实这个原语 primitive 这个词我刚才在自我介绍的时候说,我是密码学原始人,原始也是这个词在词典上的本意,对吧?就是原始、简单、基础的意思。这个词在计算机科学中的意思是来自于操作系统,是指由若干条指令组成的程序段,用来实现某个特定的功能,在执行的过程中不可以被中断。那么密码学里的意思其实也差不多,但是就是需要理解的话,还需要结合另外两个词一起来理解。一个是方案,scheme,另外一个是协议,protocol。方案是实例化的原语,而协议是方案以一种安全的方式组合后的结果。而如果对协议封装后只暴露一个 API 去调用的话,那么这个封装后的协议又成了一个新的原语。我举个例子,比如说密钥交换或者说密钥协商吧,它是一个原语,那么椭圆曲线的 Diffie-Hellman 这个 ECDH 它就是一个方案,然后 TLS 它是一个协议,而且是这个协议它是用到了 ECDH 的一个协议。而如果一个程序员他又去基于比如说一个 OpenSSL 这个库来进行二次开发呢,调用相应的 API 的时候呢,那么整个这个 TLS 协议可能又成为他的那个网站或者是他的那个应用架构中的一个底层的密码学原语来使用了。其他的比如说哈希函数啊,数字签名啊,零知识证明啊,这些都是原语,也可以同样的举这样类似的例子,就是相应的有方案,然后他们也可以用在一个更大的协议之中,大概是这个样子。
曾汨: 听起来像积木一样,就是小的积木组合成一个大的积木,然后它们又可以成为构建更大的一个物体的一个基础。
Kurt Pan: 是的,是的,它就是一个一个的密码组件,然后最终组合成一个更大的更安全的密码协议,以及更大的计算机系统。
曾汨: OK,那我们聊回比特币吧。比特币它利用到了哪些密码学原语?在当时中本聪创造出比特币的那个时间点,它为什么会做出这样的选择?
Kurt Pan: 好的,但是在正面回答这个问题之前,让我们先聊一聊,根据这个第一性原理,我们先回到原本的地方,就是说一说这个密码学的本质到底是什么?密码学的本质它是保密通信吗?是信息论吗?是数学吗?或者是计算理论吗?你要说相关吧,这些也都是挺相关的,但是你要论本质的话,我觉得我认为密码学的本质它其实是就是信任的数字化,这样说,就是把信任这个自人类社会形成以来的核心的一个要素在硅基生命的赛博空间里得到复原,达到一种可计算的信任,也有人叫做 trustless,对吧?但是我觉得这个 trustless 还是以一种人类本位来进行思考。我觉得我们应该多站在这个交互式图灵机的角度去思考问题,对吧?这些机器和网络才是我们的孩子,我们的未来。就是从这个角度来看,中本聪当时为比特币这个他心目中的未来的网络账本和支付系统他进行的选择可能会更为明了。首先就是这个数字签名,对吧?我们先想象一个公开的账本,上面是写着一笔笔的交易,比如说 Alice pays Bob one Bitcoin。那么这笔交易到底是不是真的经过了 Alice 本人的大脑外皮层所产生的意识,或者还是说是另外的一个黑客或者是智能体伪造的操作呢?那么数字签名就因为其具有的这种不可伪造性,自然的就成为了在多方、非交互式的网络环境下进行认证,或者叫身份识别的那一个。The 密码学原语。当然,密码学协议中还有不用签名进行认证的,也是认证协议。但那些往往都要求交互或者有其他的限制,就是从数字化信任的这个角度,我们人类社会中的身份认证,这种信任。在比特币或者所有区块链网络中都规约到了一个密码原语的数学性质,就是数字签名的不可伪造性。
这句话听起来简单,现在听起来简单,实际上一点都不简单。比如在 1976 年公钥密码学诞生之前呢,数字签名是很难想象是可以存在的。为什么呢?因为大家都知道在数字世界中对数据进行拷贝是一个人人都可以做,无门槛的事情。面对一个就是互联网上没有人知道你是一条狗的这么一个环境,那么身份呀所有权呀这些上层建筑完全是无从谈起的,是这个公钥密码学给我们建立起了互联网上信任的根基。那还有人就说,那我们想办法不用公钥密码学,比如说用博弈论,或者说叫社会共识,甚至物理世界的暴力监管,来重建赛博空间的信任,行不行?我的回答就是一个简单的不行。你可以用其他东西来做上层建筑,但是数字世界是由比特、由数据、由程序组成的宇宙,对数据和程序的存储和计算是不可能绕开的,而分布式的可信任的去中心化的存储和计算,这就是现代密码学的定义。比如说我们说 don't trust verify, verify 就是这个思考框架,物理世界中的 trust 被数字世界中的签名或证明的 verify 所取代了。那么中本聪在当时为什么做出他的那些选择呢?因为密码学的本质是信任的数字化,那么很自然的中本聪对技术的选择也无疑不体现着他或者他们对这个世界的理解和信任度。比如说他选择椭圆曲线的时候,他选择 secp256k1 而不是 NSA 的标准 secp256r1,这个选择就体现了他对于 NSA 的不信任感。后来包括斯诺登爆料的这些结果来看,他这种不信任其实是很有预见性的。另外他就是对于为什么选择 ECDSA,当时没有选择 Schnorr 签名是因为一些专利上的考虑。另外的选择就是密码学哈希函数嘛。
所谓密码学哈希函数就是一个抗碰撞哈希函数,它要求这个哈希函数很难的找到碰撞。那么我这里想提的一点就是抗碰撞性其实蕴含着单向性,或者在哈希这里叫做抗第一原像,而单向性是保密和隐私最直观的一个体现。那么,这个密码学的这个哈希函数在比特币里至少用在三个地方。第一个是公钥的地址,就是从公钥到地址的那个过程。第二个地方是工作量证明,对吧?你要算一个满足难度条件的哈希值。第三个是 Merkle tree, Merkle tree 它是对于交易打包压缩的一种数据结构,这些是中本聪在比特币上进行的密码学选择。
阿剑: 我在这边插几个问题,首先有一些观众可能不太理解,比如说在密码学哈希函数的语境下,碰撞这个词它意味着什么?什么是碰撞?比如说能不能举个例子?
Kurt Pan: 比如说一个输入 A 和另外一个输入 B,A 和 B 是不同的,但是它们输出的哈希值却是同一个完全一样的哈希输出。一旦出现这种情况,我们就说碰撞发生了。从理论上说,碰撞是一定存在的。为什么?因为输入空间是任意的,而输出空间是固定的。从这个数学上看,碰撞是一定存在的,但是抗碰撞哈希的意思就是说虽然存在,但是很难以现有的计算能力来找到。
阿剑: 这里面其实有蛮多延伸的,你说的就是说它在理论上必然存在,只是说以现在的计算机的计算能力很难去找到它们,因此我们暂时认为这是可以接受的或者说认为它是安全的,是这样吗?
Kurt Pan: 它的设计就是为了很难找到碰撞而存在的。我们在数据结构的课程里可能会学到一般的哈希函数,就是非密码学的哈希函数。它的碰撞可能就很容易找到。就是密码学哈希函数它虽然碰撞依然存在,但是我们专门故意设计的它就很难的找到两个碰撞对。一旦找到就代表这一个方案在密码学上已经不安全了,被攻破。
阿剑: 找到一个就算是攻破了。
Kurt Pan: 对,比如说 SHA-1,那个谷歌在 16 还是 17 年的时候有一篇论文就是找到了 SHA-1 的哈希碰撞,它举的例子就是两个内容不一样的 PDF 文件,然后它的输出的哈希值是一样的,所以 SHA-1 这个函数已经在密码学上不安全。比特币也没有用,对吧?比特币用的是 SHA-256 和另外的一个。
阿剑: 这里面其实有一个比较技术性的问题和一个稍微可能更深刻,可能 Kurt 会更感兴趣的问题,我们先问一个具体一点的,就是中本聪他当时选 SHA-256,以及他当时其实还使用了另外一个就是 RIPEMD-160 是吗?
Kurt Pan: 对,但其实这两个他在结构上看差别不是很大。
阿剑: 我想问的问题是第二种,就是那个 RIPEMD-160,它是仅仅用在那个 P2PKH 从公钥到地址的这样的一种推导当中,被它在脚本当中用作让一个公钥会生成一个哈希值,在这里面为什么它不单纯使用 SHA-256 而使用了两种,包括它当时使用 SHA-256 其实在你看来也是有理由的吗?
Kurt Pan: 我不太清楚这里的理由。因为如果你单纯的使用两次 SHA-256 的话也是可以的。我猜想可能是因为不同的这个结构可能会对于攻击的防止会安全性更高一点。如果你用两次 SHA-256,那你其实是相当于把轮数 double 了,对吧?但你用的算法还是一个算法。只是一个参数更大的一个算法,和你用结构稍微不同的两个算法之间后者的安全性可能会更高一点。我觉得当时可能是这样的考虑吧。
阿剑: 其实这个也差不多是一个公案,因为也有挺多探讨说不太清楚他为什么会,因为像他这种使用两轮哈希的他的这种方法不仅存在于 P2PKH 这种地址当中,而且其实包括计算区块的工作量证明其实也是两次 SHA-256 而不是一次。就是你算的时候你是要连续两次 SHA-256 要最终产生那个哈希值符合难度,那个才是有效的工作量证明。
Kurt Pan: 对,刚才说另外一个它对于椭圆曲线的那个选取,我觉得那个它应该是有一些就是安全性上的考虑的,因为那个 secp256r1 的那个曲线它的那个 SEED 就是 NSA 专门指定的一个那样的 SEED 放在那里,你不知道这个那一串看起来是随机的数,是真的是一个随机数,还是说它背后有一种复杂的后门可以用来被利用的那样一个数。而它那个 K1 这条曲线它和 NIST 没关系,它基本上是社区以及一些密码学家提出的一条曲线。
阿剑: 听说那个 K1 就是它的参数就特别简单是吗?
Kurt Pan: 对,它的那个方程就是 Y 平方等于 X 三次方加一,然后关键是它那个模的那个 P 就是那个素数,那个值是社区提出来的,而不是像 secp256r1 一样是 NSA,应该是 NSA 控制着 NIST,就国家标准局,它选定了这样的一个素数,不知道有没有后门啊。
阿剑: OK,这个时候我要问一个可能有趣的问题,在于 Kurt 你刚刚说密码学它实际上是信任的数字化,我们希望把我们在现实生活中可信的这个东西在数字世界当中复现出来。在这个过程当中,毫无疑问我们会用到密码学,就是一系列的数学上的工具以及计算机的理论。但是你怎么看待一个问题就是当我们要去建构这样的可以被信任的工具或者说可以被信任的对象的时候,同时我们也引入了我们在社会当中信任或者不信任的一些对象去参与它的构造。比如说当我们要构造一种数字签名的方案的时候,比如说同样都是基于椭圆曲线的 ECDSA,这个时候你会有曲线的它的这个参数或者是其他的一些这些选择,而这些选择有时候我们是把这种信任委托给了现实中存在的某个机构,比如说标准局或者是某一个机构,对吧?在这个过程当中似乎在我们创造这样的数字世界的可信对象的时候,我们没有完完全全摆脱或者说好像不能完全撇开我们在现实生活中的这种信任关系,或者是完全隔绝这种信任关系的影响。
Kurt Pan: 我觉得这是一个努力的方向吧,就是我们现在依然在一个早期的探索过程之中,当然这种早期也有一种蛮荒的美感,就是整个这个赛博世界它都是新的,你说这个信任这个关系在人类社会中几千年,至少它是没有数学定义的,对吗?我们通过这些密码学的原语,以及它的安全性来构造系统,它完全可以是有一套数学理论在这个里头,用这种逻辑以及这种宇宙规律的支撑来重新在赛博空间里去真正的形式化定义信任这样的一个东西。这个过程虽然很早期,但是很有意思,对吧?
阿剑: 那我们再回到跟比特币和中本聪相关的问题。那中本聪当时他的这个选择,他的安全假设到现在依然成立吗?你认为哪一些安全假设是最有可能会先被打破的?
Kurt Pan: OK,好的,我还是先给大家先大概说清楚一下,一个假设被攻破被 broken,它是什么意思?就是我先举两个例子,大家来看看这里是否是被 broken。第一个是著名的离散对数。假设有人说他发现了一个亚指数时间的算法,来解决离散对数问题。第二个是关于大整数或者是多项式的乘法。我的假设是不存在比大 O 括号 n 的平方更好的算法。大家可以思考两秒,就是哪一个是被攻破了,哪一个没有被攻破。OK。那答案呢,就是说第一种情况它不算被攻破了。而第二个假设,第二个我们刚才说不存在比 O(n²) 更好的算法那个假设是被攻破了。因为存在一个算法叫做 Karatsuba 算法,它的时间复杂度是大 O,n 上面的次数是 1.58,所以虽然第一个算法所改进的节省的那个绝对的计算量可能比第二个算法要多得多,事实上对于非椭圆曲线的离散对数问题现在已经有了好几种亚指数时间的算法了,但是离散对数假设本身说的是不存在多项式时间的算法来解决这个问题,所以假设本身不会受到亚指数时间的影响。这里的关键词多项式,polynomial,它这里的意思和那个著名的开放性问题 P versus NP 里的那个 class P 是一样的,都是 polynomial。至于第二个那个乘法的例子,也是历史上一个真实的故事啊,就是他老师叫做 Kolmogorov,学生叫做 Karatsuba,大家可以查一下,这两个都是有维基词条的前苏联人,那么比如说 Karatsuba 这个算法不管在现在不管是在哪个子领域的密码学的工程优化里都会遇到,而那个 Kolmogorov 复杂度呢,
它作为一个密码学的核心概念和那个单向函数之间存在的深刻联系也开始逐渐被人们所揭示。我这意思呢就是说,密码学里经常用的是这种 computational,这种计算的假设,这种假设是可以宽泛也可以精确的,但本质呢都是给了一个攻击者算法的一个复杂度的一个下界。那对于宽泛的情况,一般分界线就是多项式时间。有多项式时间的算法就算被攻破。对于更精细的情况,那么成功的攻击者这个算法所需的时间每快一倍这个方案的安全级别就降低一个比特。现在一般认为 80bit 是比较靠谱的底线,更保守的情况会要求 128bit 甚至更高。那么我们再来看一看这个密码学中的假设。我认为这个密码学中的假设可以分为两类。第一类我称之为困难性假设,第二类我称之为模型。那么困难性假设呢又在两个维度上可以进一步划分。第一个维度是信息论意义上的困难还是计算意义上的困难。第二个维度是最坏情况下的困难还是平均意义上的困难。那著名的那个 NP 号的问题,它就是在讨论在计算意义上最坏情况下的困难,对吧?而密码学中的比如说基于数论的这些困难假设呢,比如说大整数分解,素因子分解和椭圆曲线离散对数这些问题,它都是计算意义下平均情况下的困难。这里有个有意思的点,就是说密码学家一直在孜孜以求的一个目标。就是我们能否直接基于 NP 完全问题来构造密码学方案之前有过尝试,比如说背包密码,但都被攻破了。而最近二十多年。比较有希望的一条路径就是格密码。它通过 worst case to average case reduction 这种方式,可以说是逼近于最终解决这个问题的过程中。刚才说第二类困难假设,我称之为模型。
模型则是对这个密码方案所处的场景的一种抽象,以便于分析安全性。比如说比特币里的 honest majority 就是一种模型。再比如说关于哈希函数在密码学里有这个 random oracle model,就是随机预言机模型,它也是一种模型。我们说某个方案是一个安全的某种密码原语,这句话在密码学里可以说得更正式一点,它就是其实是在说如果某个困难性假设成立,在某个模型中,这个方案满足这个密码原语的安全性质,这句话还可以再更 formal 一点,它就是叫做存在一个安全规约 reduction 来完成这件事情。
阿剑: 好的,已经展露出非常困难的密码学的部分了,我们走得有点远了,所以你刚刚给我们介绍一下在密码学,在这种学术的这个语境下,所谓的打破安全假设,或者说一个安全假设是否成立,它的含义是什么,那在你看来,从比特币它的初次诞生,也就是 2009 年到现在,毕竟十多年过去了,那这些相关的密码原语的领域的话,它的研究的推进是否有可能打破现在我们看到的在比特币整个系统当中广泛用到的这些密码原语?
Kurt Pan: 我觉得首先对于 ECDSA 的安全证明,它的严谨性一直是不如 Schnorr 签名的。所以从这个安全证明的角度来看,比特币从这个 ECDSA 往 Schnorr 签名是绝对正确的选择。这一点是毋庸置疑的,因为你通过安全证明你就看,Schnorr 签名的安全证明是非常严谨优美的。而 ECDSA 那个安全证明中有些非常奇葩的假设,比如说把一个肯定不是随机的一个东西,比如说取 X 坐标这个操作,它建模成 random oracle,像这种东西就是 ECDSA 里,安全证明里,它必须要这样它才能证出来,但是这样你的假设就是一种很奇葩的假设。以至于,我认为就是 ECDSA 它只是在 Schnorr 签名的这个专利之下的一种妥协之作。这是关于签名。另外,关于哈希呢,我最近也看到一些,比如说 EUROCRYPT 24 上有一些对于 SHA-256 的碰撞攻击。它已经能做到就是它那个轮数完全轮数的一半的那个情况下它可以找到碰撞了,而且它那个算法是一个经典算法,不是我们后面所要说的那个量子算法,也就是说在密码分析上这些都是有进展,就是我们一般说密码学会分成公钥密码学和对称密码学,研究方向上也是这样分的,而且还有一个维度的区分是对于密码方案的构造以及密码方案的分析和攻击。就是有一些人他设计方案,另外一些人专注于攻击和破解方案。这个在学术上也是有一些划分。
曾汨: 那么其实关于比特币的安全性,有一个长久以来一直被大家提到的话题就是量子计算。经常有人说,如果量子计算上取得突破的话,会导致比特币的安全性受到极大的影响。甚至说比特币从此就完了。那么我这里首先有一个问题就是什么到底什么是量子计算,然后量子计算它的进步会打破哪一些原语上的一些安全假设。有没有相应的一些补救方案?
Kurt Pan: OK, OK,我先说什么是量子计算,我先讲一个故事,就是曾经有个北大的物理教授他面对相对论的民科不堪其扰,于是他在自己的网站上写了这样一句话,说我不和不会解 PDE 的人讨论相对论。就是 PDE 就是偏微分方程。这虽然听起来比较傲慢,对吧?但是我觉得他是其实是对自己时间经历一个很好的一种保护。于是类似的,我这里先说一句暴论,对吧?就是请不要和不懂 unitary transformation 的人谈论量子计算。OK,这使你的精力可以集中在对严肃学术问题的思考,而不是对阴谋论和伪问题无边无际的精力耗费上。其实量子计算的影响远远不只是在比特币了,甚至是在密码学。我举一个理论计算机领域的例子,如果使用的量子计算机可以被建造出来,那么强丘奇 - 图灵论题就会被证伪。那么对于这个量子计算会不会打破比特币的安全性这个问题呢?我这里给出一些简要的结论吧。那就是短期内完全不用担心。就算要担心也不是去担心量子计算所产生的影响。为什么这么说呢?我们先给出基本的结果。现在一般是有讨论量子算法会有两个量子算法。第一个是 Shor 算法。Shor 算法呢,它可以在量子多项式时间内从这个椭圆曲线离散对数问题的公钥以及所有隐藏子群问题,从这些问题的公钥它可以恢复出相应的私钥。另外一个算法是 Grover 算法。它可以对这个求哈希原像的这个算法进行平方级别的加速。对于前者,我查了一些数据,供听众朋友们参考。使用 Shor 算法攻击比特币的 256 位 ECDSA 的密钥大约需要 1500 个逻辑量子比特,而在 2023 年底的 IBM 的通用量子计算机的量子比特数达到了 1000 个。
但是这里是物理量子比特,根据量子纠错码的这个理论,大约 6 个物理的量子比特可以去编码一个逻辑量子比特。也就是说现在公开的这个最前沿的量子计算通用的这个量子计算系统,它能力大约是 150 个逻辑量子比特。请注意一下这里量子比特和比特还是不一样的。比如说一个二量子比特量子系统计算能力并不是一量子比特系统的两倍。这个和经典是不一样,因为这里是有量子叠加和量子纠缠带来的额外能力的。这里我就先不展开说这个量子纠缠,说明这个量子纠缠魅力的一个叫做 EPR 佯谬和这个贝尔实验。大家感兴趣可以去查,爱因斯坦其实是错的,他这个量子纠缠是真实存在,而且是可以被实验验证的。那么叫 ECRYPT II 这个加密标准,他倾向于认为比特币的 256 位 ECDSA 密钥,至少在 2030 年至 2040 年之前都是安全的。但这并非问题的全部,我们结合 Grover 算法来说,平方加速的 Grover 算法会使得要使用更长输出的哈希函数,比如 SHA-256 升级成 SHA-512,这样就可以。另外呢,就还可能会出现用 Grover 算法量子挖矿,对吧,也是算哈希嘛。但这都是密码学方案参数的调整以及一些经济学上的一些考量,它完全达不到这个量子计算进展会导致比特币崩溃的这个结论。以及就是我刚才说的,据我近年来对哈希函数碰撞分析的了解,SHA-2 可能会面对更严重的攻击会来自于经典算法,而非量子算法。再说一点很关键的就是我们知道现在比特币中的地址并不是公钥本身,对吧,而是公钥的哈希。那么如果你这个钱包地址中的比特币从来没有被使用过那么该地址的公钥就不会被人所知晓,其他人所知道的只有钱包地址,
只有在花费这个地址上比特币的时候才会就全网广播这个公钥,对吧?而其他人是无法通过钱包地址算出公钥的,即使可以通过公钥算出私钥,就是 Shor 算法,那些没有暴露过公钥的钱包地址依然是安全。如果你有好的这个比特币的使用习惯的话,你一个钱包地址只使用一次,那么同理你这个新的公钥也是不被人所知晓的,新地址中的比特币也是安全。当然如果你是重复使用一个钱包地址,那么该地址的公钥就会处在暴露状态。那么根据 Shor 算法,你这个地址中的比特币就会面临被窃取的威胁。然后这里我给出一个 2019 年的一个数据。他这里说有将近 500 万个比特币是存放在公钥暴露的地址中的。此外还有将近 177 万个比特币使用的是 P2PK 地址。这是早期的那种公钥是公开的那个地址。其中包括被认为是中本聪的账户。就如果这些比特币不更换地址的话,他们是在量子计算机的攻击范围内的。OK,虽然就是说具体到比特币的场景中量子威胁并不是那么紧迫,我还是是在这里说一下可能的应对措施吧。就是首先是后量子密码学,比如说用一次软分叉去更新进一种新的后量子签名算法,目前比特币社区讨论比较多的是选用这个属于哈希签名的签名,叫 Lamport 签名,及其变体,对吧,当然还有就是基于格的签名,比如说叫 Dilithium 或者 Falcon 签名,这些现在是 NIST 的标准草案。草案里对于这些签名的名称叫做 ML-DSA,我这里严重怀疑我是在所有这个中文播客里第一次提到这个词的,我们可能比较熟悉这个 ECDSA 和 EdDSA,但是它新的标准叫做 ML-DSA, ML 是模格的意思,当然还有比如基于多变量,编码,超级同源,和零知识证明的后量子签名方案。
感兴趣的听众,大家可以查一下关键词 NIST postquantum,就可以得到结果。第二种是量子密码学,后量子密码学对于量子计算算法抵抗是通过新的数学问题的困难性,而量子密码学则是使用量子力学本身的特性导致的困难性。这里我举一个例子,密码学家在最近几年发现量子力学本身,比如说区分两个量子态这个问题本身的困难性,就足以基于此设计出很多密码学方案了。根本就不基于单向函数,而是更弱的量子假设,就可以构造出安全的量子承诺方案。这个方向,我觉得这里有巨大的发展可能性,全新的密码学可能由此会出现。说不定五年以后再看,可能关于说 Shor 算法和 Grover 算法会不会导致比特币崩溃,反而成为了量子计算和密码学关系中最无聊最过时的一笔历史遗迹了。
阿剑: 没准那个时候我们会讨论怎么用一种量子签名或者量子算法让它变得更安全,对吧?
Kurt Pan: 对啊,就完全是基于的假设不是离散对数假设,而是某一种量子假设的签名。
阿剑: 我在这里再追加一点吧,就是现在在我们的听众能够接触到的比特币钱包当中,现在可能大部分钱包都会给你提供 bc1q 开头的被我们称为 P2WPKH 这种单签名的这种地址。那它跟原来大家比较熟悉的一开头的 P2PKH 的地址它的含义是一样的,就是你暴露出来的这个地址实际上是你的公钥的哈希值的编码。那么在这种情况之下你的公钥是没有暴露的。但是如果你使用最新的这种 P2TR 的这种地址的话,那么你暴露出来的就是你的公钥。确切来说是如果用 Taproot 本身的这个术语来说的话,是你的内部公钥加上你的脚本路径默克尔树的哈希值乘以椭圆曲线上的生成元,两个的和,它其实本身也是一个公钥,所以你可以认为这种地址当中公钥也是完整暴露的。这个在之前关于 Taproot 的这个讨论当中,曾经被一部分开发者作为反对 Taproot 这种地址形式的这个理由就在于说,比如说有一天使用的这种量子计算能够出现的话,如果有一天我们能够从公钥当中抽取出私钥的话,那么这些 P2TR 地址是不安全的。的确,有这样的一种意见,当然就像 Kurt 指出的。同样有很多的之前已经产生的地址,已经被存放在这些公钥已经暴露的这种地址当中。我们在这边的一个建议是什么?建议是如果你对这一切觉得不那么安全,不那么放心的话,那么请使用 P2WPKH 或者是 P2WSH。也就是隔离见证给我们带来的单签名的这个地址以及脚本的这个地址,这些地址暴露出来的都仅仅是哈希值,既不是它背后的公钥也不是它背后的脚本,那么这个可能在你看来是如果特别保守的话可以认为这是一种相对安全的形式,但是就像 Kurt 说的,担心这些似乎暂时来看还是属于比较遥远的事情,
所以我们也认为 P2TR 地址也是可以使用的,而且鉴于 P2TR 地址它上面的这些技术依然还在发展,我们有可能能在未来基于 P2TR 地址使用到更加简洁的多签名方案,更加精细的多签名方案,以及拥有其他的这些特性,所以 P2TR 地址依然是一个值得你选择考虑的方案。
曾汨: OK,我还有一些问题想来榨干 Kurt 老师。就是因为我知道 Kurt 老师一直在做密码学相关的研究嘛,那么其实从比特币创造到现在也过去了十几年了,那么这些年里面有哪一些密码学相关的进展值得我们大家来关注呢?从功能性的角度出发,有哪一些密码学相关的进展可以用来改进现有的比特币?这是我想很多人都希望知道的一个问题。
Kurt Pan: 好的,那我说一下我的看法吧。就是除了刚才说的后量子密码学的改进,我还要提一下就是多方密码学的扩展和改进。那么最广义的研究当然就是多方安全计算,SMPC 了。这里会包括比如说 secret sharing,秘密分享,garbled circuit,混淆电路,以及 PSI, PIR,等等等等这些大家自己查的这些词。我还想再强调一类具体的 MPC。那就是安全多方签名。我下面会提到大概七种安全多方签名。时间关系呢,我只会简要的进行说明。首先就是多重签名,聚合签名和门限签名。这个多重签名或者叫多签,它就是两个以上的签名者共同对一个消息来进行签名。这里除了原来用那些脚本语言的实现,现在还有一些比如说 MuSig2 这种基于 Schnorr 签名的无脚本的纯密码学的实现。聚合签名是对多个消息签名对进行压缩聚合的,从而更快的批量验证,而门限签名则是从 n 个签名方中的任意至少 t 个可以来进行签名,ECDSA 门限签名在 17 年以后是有很大的进展的,包括比较有名的两篇是 GG18 和 GG20。Schnorr 的门限签名方案也是有进展,比如说 FROST 和 ROAST 等等。下面说一下群签名、环签名和盲签名。那么群签名它是说一个群组中的任何一个成员都可以代表整个群组进行签名。环签名也是同样的,但是它的群组结构更灵活,就是不需要群管理员,而且群组成员可以自由进出、自由组合。再说一下盲签名。这个盲签名最早是由 David Chaum 在 1983 年的一篇《构造 eCash 这个密码货币系统》的论文中提出的密码原语。Chaum 设想的这个 eCash 货币它需要具有不可伪造性和不可追溯性。
想要不可伪造性,根据我刚才说的很自然的就想到可以用具有不可伪造性的数字签名。那么,想要不可追溯性,也就是说货币发行方不能识别每一个币和持币人身份的关联。这个怎么用密码学实现呢?Chaum 就构想出了一种带有 blindness,就是盲性的签名,也就是盲签名。盲签名实际上是实现了签名者和拥有要签名消息的用户的一种分离。签名者和用户分别拥有这两个安全计算协议的私有输入,分别是 sk 和消息 M。那么协议运行完毕之后,用户不能伪造签名,也就是不知道 sk,这个性质叫做 one-more unforgeability。同时呢,签名者也不知道消息,就是不知道带签名的消息,这个性质就叫做 blindness,盲性。盲签名的应用除了一开始,还在比如说电子投票啊,匿名凭证,以及一些就是 coin shuffling, mixing 的服务中都有所应用。最后是这个适配器签名,adaptor 签名。适配器签名完全就是从区块链场景中出现的一个签名语言。原来好像叫做 scriptless scripts,这个是干什么呢?就是有两方啊,一个是 signer,一个是 adaptor, Signer 的秘密是私钥,Adaptor 的秘密是一个 NP 实例的 witness,就是一个困难问题的解。Signer 可以对一个消息和一个 NP 实例进行预签名,然后 Adaptor 可以用公钥消息预签名以及这个 witness 来把这个预签名给 adapt 成一个完全的签名。一旦拥有这个完全签名之后,Signer 就可以把隐藏的 NP witness 给 extract 出来,就抽取出来。
目前的这个 adaptor 签名,它的构造是可以从 Sigma 协议以及 trapdoor commitment 来构造的。Adaptor 签名在公平交易、原子交换和多跳支付中都有广泛的应用前景。最后再提一嘴零知识证明、全同态加密和不可区分混淆。这三个当然都是密码学界的前沿,对于不懂的人绝对是 black magic。全同态加密其实也是格密码的一部分,因为现在它所依赖的假设都是基于 RLWE 这样的格密码的假设。它曾经被称为密码学的圣杯,十几年以后也终于从这个理论开始,逐步地落地了。而这个不可区分混淆 IO,它被称为密码学皇冠上的明珠,2020 年以来在理论上是有所进步,但离使用上有很大的距离。我打个比方说一下为什么 IO 是密码学的至尊魔戒。因为有了 IO 之后,我们甚至可以去考虑,哪怕是在黑客帝国的 Matrix 中,就是这个整个世界都被模拟的这个人之间,也可以去进行安全的加密。我称之为是缸中之脑密码学,这是一个非常科幻的东西。零知识证明是我最熟悉的,但是我不想在这里展开,我只是在这里只想说明一下零知识证明的地位。我认为零知识证明它本身是和区块链平级的密码学分支,它绝不是区块链的一个子领域,更不仅仅是某一种密码货币二层扩容的解决方案之一。OK,最近也有些在比特币上验证零知识证明的工作,但我觉得二者的结合还只是刚刚开始。
阿剑: 最后我们回到一个相对而言比较轻松的话题。我知道 Kurt 你之前包括现在你在刚刚开场的时候也说其实你是受密码朋克的精神感召的,而且我也知道其实你做了一些关于密码朋克的研究。那我还注意到你最近你的朋友圈里面,你说你淘到了一本很老的书,那本书的名字叫过河卒,然后你说这里面它既有一个中国人的故事,又隐藏着一个密码朋克的故事,那这是一个怎么回事呢?
Kurt Pan: 这一本书它是出版于 2003 年,取决于你怎么定义老,对吧?2003 年距现在大概是 20 年,这本书的作者是戴习为。戴先生他本人是出生于 1947 年,他本科毕业于中国科学技术大学,也和我是校友。最终他曾经是微软技术级别最高的华人高级软件工程师。这本书就是戴先生的自传。他,我觉得是非常完美地写出了一个那一代中国最优秀的青年们是怎么样求学?然后又在大洋彼岸的另一个崭新的世界,创作出一番新的天地的故事。隐藏着一个密码朋克的故事,则是因为我们知道著名的密码朋克戴维正是戴先生的儿子。戴维是比特币白皮书第一篇引用文献的 B-money。以及著名的一个 C++ 密码学开源库叫 Crypto++ 的作者,以及以太币最小的单位 Wei 也是致敬戴维先生。时间有限,我无法过多地去说这本书的内容,最后就让我来读一段书中的节选,让大家一起体验一下密码朋克的精神,并作为本期播客的结尾吧。戴先生写道,和 wd 做了二十几年的铁哥们,D 醒悟到,wd 其实是另一代全新的 IT 人,还在悄悄发展,但或许对未来的 IT 业的走向最终带来变化的又一代 IT 人。与自己的个人电脑一起长大,这些人从小没有为吃穿过于发愁,他们都很努力地学习学课本,更多的是学课本之外他们喜欢的题目。无论在学校还是走进社会,他们都喜欢追求一个舒适和高效的工作环境和平台。他们却又不为世俗所动,仍热衷于沿着自己的兴趣去追求令自己兴奋的各种挑战。但是他们并不打算仿夸父去追赶那永远够不着的太阳,他们更感兴趣的是自己视野内的猎物,从老虎到兔子,一枪一个。在他们眼中,名誉或者地位有一点也不坏,至于更多,那就是别人的事情了。
既然所做的一切都只为忠于自己的感受,那么任何虚假与投机当然也被这个群体所不齿。老一代的英雄比如说盖茨或者什么其他人的成功当然也钦佩,却并非他们的楷模。操纵一个庞大的机构固然可以迎接更大的挑战,可这个机构同样会操纵你。为什么要失去自我而成为一个符号呢?人在江湖,身仍由己,才是他们的理想。wd 他们那个社区的成员们生活在属于自己的似虚也实的网境里,独来独往,又群而乐之,让 D 想起金庸笔下那个游侠的童话世界,他们作为一个群体,对欧美 IT 业的影响在欧美社会中已初见端倪。好,谢谢。
阿剑: 谢谢 Kurt。我原本想到一个问题,你觉得密码朋克是什么呢?或者说密码朋克的精神是什么样的?吸引你的那个地方是什么?
Kurt Pan: 我很确定的一点就是绝大部分密码学家并不是密码朋克,因为就是整个世界上研究密码学的人,包括教授,包括学者,很多很多的专业人员,公司里的专业人员是有很多的,他们可能对某一个密码算法的细节是非常掌握的,很清楚的,但是我觉得他们都不能成为密码朋克,我觉得核心点不在于你对密码学本身有多么深的了解,而在于你想用密码学来做什么。密码朋克们无一例外都是想去解决一个经济的问题,或者是某一种社会协作的问题。其实还就是我最一开始说的,他试图在赛博空间里去重构一种社会信任的这样的一种东西。所以我认为我一开始那种密码学的定义其实是密码朋克眼中的密码学的定义。它并不是一个纯客观的东西,它是有自己的 motivation,有自己的价值观在里头。就是我们想在赛博空间内重建信任,就是寄托了一种我们对新世界的理想和向往在里头。然后这个密码学呢,它刚好就是这个宇宙的运行规则本身。我们认识它,认识更清楚这个宇宙规律呢,就是为了更好地在我们所希望的这个新宇宙中更好地生存。
曾汨: 说得非常好。
Kurt Pan: 谢谢。
曾汨: 好的,那么感谢 Kurt 的精彩分享。相信大家听完今天的播客,应该会对比特币上的密码学多了很多感悟,也能学到不少东西。那么我们下期再见,拜拜。
Kurt Pan: 拜拜。
