1.3 代币安全:密码技术 - JoanJiao/TokenEconomyBook_Chinese GitHub Wiki
密码技术(Cryptography)是在匿名和不受信任的参与者网络中安全管理代币的重要工具。它在提供交易透明度的同时又能维护所有网络参与者的隐私。密码技术被用于可靠地识别所有网络参与者,这也是区块链网络中共识协议的组成部分。
密码技术是在存在第三方的情况下对安全通信的实践和研究,其目的是创建能够抵御窃听、操纵和其他形式攻击的信息系统。虽然密码技术的历史可以追溯到手写文本的出现,但它在计算机时代已经有了显著的发展。密码技术(Cryptography)代表密码学(cryptology)的一个子领域,主要是指将一条信息(明文)转换为无法理解的文本(密文)的加密过程。如果没有相应的密码来解密,密文是不可读的。
密码是最早开发的加密技术之一,用于使用替换密码(其中明文单元被替换为单个字母、字母对或字母三联体)或转置密码(明文单元重新排列为不同且通常非常复杂的顺序)。解密是将不可读的密文转换回原始明文的过程。因此,密码是创建加密和反向解密的一对算法:它的设计方式使加密消息变得容易,但如果你不知道密码则很难反转它。
从历史上看,密码学以各种形式使用,例如埃及石头上的雕刻密文。其他形式的密码可以追溯到萨珊王朝的波斯、古希腊、罗马帝国、印度等。自从第一次世界大战中谜机(enigma machine)(转子密码机,a rotor cipher machine)的发展以及第二次世界大战中计算机的出现,密码学应用和方法已经发生了根本性的变化。经典密码变得多余,因为它们很容易通过简单的“暴力攻击”来猜测——计算机算法运行所有可能的组合,直到它猜出正确的代码。计算机不仅增强了密码分析的可能性,密码分析是指破解加密的过程,它们还使更复杂的密码成为可能。现代密码算法被设计成在时间和金钱方面使用蛮力破解它们是不可行的。然而,这种“计算难度假设”必须考虑计算机处理能力的不断提高。
此外,计算机引入了对任何类型的数字信息进行加密的新形式,而不仅仅是文本片段。随着量子计算机的出现,许多研究人员正在研究密码技术问题与量子物理学之间的关系。一些研究人员和工程师正在开发后量子密码技术(Post-quantum cryptography),他们在设计新算法时已经开始考虑量子计算的潜在影响。在信息时代,密码技术的使用也引发了许多法律问题。一些政府限制或禁止使用密码技术,在某些情况下,甚至将其归类为武器。某些司法管辖区可能允许政府当局强制披露可能与调查相关的文件的加密密钥。此外,在讨论数字时代的人权时,密码技术可能是一个有趣的因素。在机器时代如何保障隐私这一问题正在慢慢成为更广泛的公众主导的讨论,并且在未来几年可能会变得更加显著。在这种情况下,关键问题是通信隐私权或家庭神圣性的宪法权利是否以及如何与加密通信或加密数据路径的权利相对应(了解更多:第 3 部分 - 隐私代币)。
虽然加密电子通信的早期尝试集中在为政府机构的通信提供保密和保护技术,但之后其应用领域已经扩大。在过去几十年间,加密技术已经应用于各种其他领域,例如电子商务、数字支付、数字权限管理、密码管理、消息完整性检查、身份验证、数字签名、交互式证明和安全计算。在区块链网络和其他分布式账本的背景下,密码技术被用于核心协议级别的识别、验证和安全等目的。在公共区块链网络和其他 Web3 技术场景中使用了三个相关的密码构建块:(i) 哈希函数,(ii) 对称加密(symmetric cryptography),和 (iii) 非对称加密(asymmetric cryptography)(公钥密码)。
哈希函数是一种数学算法,可以将任意大小、任何类型的数据(消息)转换为固定大小的数据(哈希值或哈希)。从哈希重新创建原始数据(消息)的唯一方法是尝试所有可能的变化,看看它们是否产生匹配。虽然这在理论上是可行的,但它非常耗时,因此也十分昂贵,这就是为什么它被称为单向函数。哈希函数可用于确保传输数据的完整性和隐私。代表应用包括数字签名、身份验证服务、指纹识别、重复检测、文件的唯一标识或创建校验以检测数据是否损坏。为了体现其弹性,加密哈希函数需要满足某些属性:它们需要被设计得 (i) 易于计算; (ii) 有确定性,意味着相同的消息总是产生相同的哈希; (iii) 以纯粹的蛮力从其哈希值生成消息既耗时又昂贵; (iv) 对原始输入值的微小改动应该会改变哈希值。此外,(v) 不可能找到具有相同哈希值(输出)的两个不同消息(输入)。
对称系统(Symmetric Systems):在公钥密码技术出现之前,两方依靠一个加密密钥,通过秘密会议、密封信封或受信任的信使通过非加密方法交换该密钥。如果你想与某人私下交流,则需要亲自见面并就密钥达成一致。在现代通信世界中,人们需要在一个由许多不受信任的参与者(互联网)组成的网络上进行协调,这样的方法是不可行的。这就是为什么在公共网络中不使用对称加密进行通信的原因。然而,它比非对称加密更快、更有效,因此用于加密大量数据、某些支付应用程序或随机数生成。
非对称系统(Asymmetric Systems),也称为公钥密码术,通过引入两个密钥,一个公钥和一个私钥来解决协调问题。私钥只有所有者知道并且需要保密,而公钥可以提供给任何人。公钥可以广播到网络,这允许网络中的任何人使用公钥将加密消息发送给公钥的“所有者”。此加密消息只能使用接收者的私钥解密。发件人可以将消息与其私钥相结合,以在消息上创建数字签名。现在,任何人都可以用相应的公钥验证签名是否有效。密钥的生成方式取决于所使用的加密算法。非对称系统的代表包括 RSA(Rivest-Shamir-Adleman)和 ECC(椭圆曲线密码技术),它们也用于比特币。非对称密码技术的使用以可扩展的方式增强了不受信任的网络(如 Internet)中的通信安全性。[^1] 以下章节将重点介绍如何在比特币网络和类似的区块链网络中使用密码技术。
比特币网络主要使用哈希和数字签名结合使用公钥加密来保护流经网络的数据的完整性。哈希还用于共识协议“工作量证明”的情境中。比特币使用公钥密码技术,更具体地说,使用椭圆曲线密码技术。请注意,替代区块链网络和其他分布式账本系统可能会使用替代加密工具,而不是下面描述的那些。例如,一些区块链网络使用更多的隐私保护密码技术,例如“Zcash”(零知识证明)^2 和“Monero”(环签名)^3。比特币社区本身目前正在研究更能保护隐私和更具可扩展性的替代加密签名方案,例如“Mimblewimble”(拓展阅读:第 3 部分 - 隐私代币)。
公钥密码技术
比特币网络使用公钥密码技术来创建一个关于用户身份的安全数字参考,其中包含一组密码密钥:一个私钥和一个公钥。关于谁是谁以及谁拥有什么的安全数字参考是 P2P 交易的基础。结合交易,这些密钥可以创建一个数字签名,证明一个人的代币所有权,并允许其使用钱包软件控制代币。类似于手动签署支票,以及在网上银行中使用密码进行身份验证,公钥密码技术被用于验证和签署比特币交易。
公钥是由私钥通过数学方式生成的。虽然从私钥计算公钥很容易,但如果要反过来计算,则需要绝对的蛮力;猜测密钥理论上可行,但成本高得令人望而却步。世界上最强大的超级计算机需要数万亿年才能破解,这几乎是不可能的。这意味着,即使每个人都知道一个人的公钥,也没有人可以从中得出一个人的私钥。使用公钥加密的消息现在可以安全地传递给私钥的所有者,并且只有该私钥的所有者才能解密该消息。这种方法也适用于相反的方式。任何带有私钥的消息都可以用相应的公钥进行验证。
公钥的类似示例是挂锁(padlock)。如果 Bob 想向 Alice 发送一条消息,但又害怕有人拦截并阅读它,他会要求 Alice 将她的挂锁(未上锁)发送给他,并保留她的挂锁钥匙。Bob 现在可以把他的信放在一个小盒子里,然后用 Alice 寄给他的挂锁把它锁上,轻轻一推就可以把它关上。这封信现在可以发送到世界各地而不会被未经授权的人截获。只有拥有挂锁钥匙的 Alice 才能打开这封信。当然,有人可以尝试用纯粹的蛮力打破盒子,而不是使用钥匙。虽然有可能,但难度取决于盒子的弹性和锁的强度。相同的基本原则适用于现代密码技术。
安全算法
公钥密码技术中的关键问题一般围绕着计算难度假设展开:与从私钥派生公钥相比,如何扩大从公钥派生私钥与从私钥派生公钥之间的计算工作量?通过猜测结果来破解加密有多难?猜测私钥需要多长时间?成本会有多高?私钥由一个数字表示,这意味着数字越大,不知道该数字的人就越难猜出该(随机)数字。如果猜测一个随机数需要几十年的时间,则该数字被认为是安全的。但是,每种密码算法都容易受到暴力攻击,即通过尝试所有可能的组合来猜测一个人的私钥,直到找到合适的解决方案。随着计算机变得更快、更高效,人们必须提出更复杂的算法,要么使用更大的数字,要么发明更具弹性的算法。
为确保难以猜出数字,弹性私钥具有最低要求:它必须是 (i) 随机生成的数字;它需要是一个 (ii) 非常大的数字;它必须使用 (iii) 安全算法来生成密钥。随机性很重要,因为我们不希望任何其他人或机器使用相同的密钥,而人类不善于提出随机性。较大的密钥大小允许进一步分布随机性,并且更难用蛮力破解,但计算速度也较慢。由于其复杂性,安全算法需要经过科学证明并针对安全漏洞进行压力测试。应该避免发明自己的算法。当开发 IOTA 网络的团队决定实现自己的哈希函数 Curl 时,这个问题变得很明显。IOTA 是区块链的替代分布式账本解决方案,它声称通过替代共识机制和替代密码技术来解决比特币的可扩展性问题。然而,他们自制的 Curl 函数后来被发现是“不抗碰撞的”。[^4] 自比特币出现以来,比特币网络中使用的加密算法经受住了所有数据篡改的尝试。
如果没有密码技术,在一个互不认识或不信任的参与者网络中就不可能达成分布式共识。随着计算机变得越来越强大并且可以更快地猜测数字,所使用的算法将需要经受住时间考验并满足快速发展的技术标准,以保持当前的安全水平。许多研究人员和开发人员认为,超级计算机,尤其是量子计算机,很快将能够通过暴力破解大多数传统的加密算法。这并不完全正确,取决于密码算法本身。虽然量子计算机在破解哈希方面并没有明显好转,但在椭圆曲线和素数分解方面它们的功能要强大得多。答案很复杂,尚未完全解决。因此,抗量子计算机的密码算法是一个关键任务研究领域。有关此主题的更多详细信息,请参阅本章末尾的参考资料。
哈希
哈希是一种将大量数据转换为难以猜测的短数字的方法。可以将表示可变长度比特序列的文本或图片转换为哈希形式的固定长度比特序列,这些功能都可以确保数据的完整性。比特币网络使用安全哈希算法 (SHA),例如 SHA-256。哈希的一个重要特性是,如果输入数据的一位发生变化,输出就会发生显著变化,这使得检测大型文本文件中的微小变化变得容易。正如你从下面的示例中看到的那样,当我们仅更改一个符号时,[^5] 会生成一个完全不同的哈希值。这一点是基于“雪崩效应”,它有助于轻松保证数据完整性。对哈希进行哈希处理会产生完全不同的字符串。
-
“How to buy Bitcoin?”这句话的哈希: 156aedcfab1d49f73abddd89faf78d9930e4b523ab804026310c973bfa707d37
-
“How to buy Bitcoin”这句话的哈希: 4314d903f04e90e4a5057685243c903fbcfa4f8ec75ec797e1780ed5c891b1bf
-
上面一段哈希值的哈希为: 4c9622e1148ff0b855de50e62999d194039eb2faa9e715cc9d9ef604015aa1fe
译者注:这里有个在线哈希计算器,可以自己试一下。
雪崩效应描述了数学函数的行为,即使输入字符串的微小变化也会导致结果哈希值发生巨大变化。这意味着,如果一个人在数百页的文档中只添加一个单词,甚至是一个逗号,那么该文档的哈希值就会改变。因此,文档的哈希值可以作为文档的加密双胞胎,这就是为什么它通常被称为“数字指纹”。因此,不需要使用发件人的私钥加密整个文档,因为这会消耗时间、带宽和金钱,而可以计算文档的哈希值。
比特币网络中的哈希是以下过程的一部分:(i)编码钱包地址; (ii) 对钱包之间的交易进行编码; (iii) 验证和验证钱包的账户余额; 以及共识机制 (iv) 工作量证明。
钱包和数字签名
区块链钱包是一款存储你的私钥、公钥和区块链地址并与区块链网络通信的软件。该钱包软件可以在计算机或手机(如“Bitcoin Core”、“Electrum”)或专用硬件设备(如“Trezor”、“Ledger”)上运行。 钱包软件允许用户认证和代币管理。使用钱包软件,你可以发送代币并检查发送给你的代币的收据。每次发送比特币代币时,你都需要使用钱包用你的私钥签署交易。随后,你的个人代币余额将在所有账本副本上进行调整,该账本分布在计算机的 P2P 网络中。
首次启动时,比特币钱包会生成一个由私钥和公钥组成的密钥对。第一步,私钥是随机生成的 256 位整数。然后使用椭圆密钥密码技术从私钥推导出公钥。在第二步中,区块链地址从公钥导出,使用与用于导出公钥的加密函数不同类型的加密函数,添加校验和和前缀等元数据。使用不同类型的加密函数来派生地址会增加额外的安全级别:如果第一层安全性,即椭圆密钥密码技术被破坏,那么拥有公钥的人将能够破解私钥。这一点很重要,因为如果量子计算机成为现实,椭圆密钥密码技术特别容易被破解,而在第二层中用于派生地址的哈希不会那么容易受到量子计算机暴力攻击。这意味着,如果某人拥有区块链地址,并且已经破解了椭圆密钥密码技术,那么该人仍然必须通过用于从公钥中获取地址的第二层安全性。这类似于我们用具有不同安全机制(钥匙或数字锁)的两把不同的锁来把自行车锁两次,以提供额外的安全保障。因此,地址充当公钥的数字指纹,但不提供有关此人公钥的任何信息(除非他们发送第一笔交易)。区块链地址与传统金融交易中的银行帐号或人们想要向你发送电子邮件时的电子邮件地址具有类似的功能。
比特币网络和类似区块链网络中的数字签名是使用钱包软件执行的。与手写签名类似,数字签名用于验证你是你所说的那个人。如果实施得当,它们比手写签名更难伪造。数字签名已经使用了几十年,主要用于金融交易、软件许可或合同管理软件。在区块链网络中,数字签名用于身份验证(证明代币的发送者实际上就是发送者)和交易的完整性(即发送的代币数量)。私钥用于签署代币交易。网络中的验证节点使用公钥来验证签名。这样,一个钱包就不能伪装成另一个钱包。这也称为“不可否认性”。实际上,这意味着其他人无法假装控制你的钱包,除非他们拥有你的私钥。
钱包类型和密钥管理
你的私钥必须始终保密,并且不应与其他人共享,除非你想让他们故意访问你的代币。由于从私钥推导出公钥和从公钥推导出地址的两步过程,人们只需要备份私钥即可;其他所有内容都可以使用网络中使用的加密算法从私钥派生。如果你无法访问你的钱包,而且没有备份你的助记词 ^6 或者你的私钥,你将无法访问你的代币,哪怕你的代币仍将存在于网络中。
与流行的看法相反,区块链钱包不存储任何代币。它仅存储与你的区块链地址关联的公私钥对。它还记录涉及钱包公钥的所有交易以及其他一些数据。因此,“钱包”一词具有误导性。“钥匙串”这个词会更合适,因为它充当安全的密钥存储,并作为与区块链网络的通信工具。区块链钱包与包含你家钥匙的钥匙串有更多相似之处。如果你丢失了公寓的钥匙,公寓仍然是你的,但除非你找到钥匙,否则你就无法进入你的公寓;也许你还有一把备用钥匙留给了邻居、朋友或家人,或者可以找一个锁匠来帮你开门。打破你的锁就好像通过暴力攻击来猜测你的私钥。钱包包括两种类型:托管和非托管钱包:
用户控制的钱包使得个人可以控制代币。私钥由用户自行保管和负责,交易直接从用户的设备上签名。 然而,对于用户控制的钱包,在钥匙丢失或被盗的情况下,用户就成了唯一的故障点。
托管钱包是一种由在线交易所提供的托管服务,服务提供商在其服务器上管理一个人的钱包。在大多数情况下,与钱包相关的私钥也由这些中介管理。钱包软件以第三方可以代表用户提交交易的方式复制用户的私钥。因此,许多人更愿意将他们的代币托管在在线交易所,并将密钥管理责任委托给那些受信任的机构。与今天的银行类似,这些代币交易所充当资金的保管人(了解更多:第 3 部分 - 代币交易)。
对于丢失私钥的问题,更自主的解决方案可能是所谓的“社交密钥恢复解决方案”,你可以在其中指定一组受信任的朋友、家人或机构来确认你的身份,并通过多重签名过程来恢复你的私钥。例如,在这种设置中,你可以指定五个受信任的人,以防范你的私钥丢失。可以定义五分之三的人使用他们的私钥签名以恢复你的私钥。这样,你就可以微调你信任的人,而不会让自己成为一个独特的故障点。但是,如果这些人彼此认识,他们可能会串通或者受贿进行串通来针对你。为了实现真正的 P2P 代币经济,人们可以在钱包之间发送和接收代币,而不需要受信任的第三方,我们还需要更好的钱包管理解决方案,以保证个人是其代币的主权者,同时保持高水平的安全性和可用性。一个不太复杂的密钥恢复解决方案是在 Google Drive 等云服务上自动创建备份。虽然这根本不可取,但出于其便利性,这似乎已成为一些代币交易所的趋势,例如“Coinbase”。
在撰写本书时,大多数钱包只允许管理一种代币,或者在某些情况下,管理数量有限的代币。这是因为不同的分布式账本系统在很大程度上是不可互操作的。大多数代币系统都有不同的技术规范,这取决于它们发行的分布式账本的类型,因此需要开发个性化的钱包。多账本兼容的钱包开发起来既费时又昂贵。多账本兼容性也使钱包软件体积变大。钱包设计的另一个方面是钱包(结合底层分布式账本)是否支持交易的共同签名。许多区块链网络,例如以太坊,不支持本地多重签名交易。在以太坊的情况下,你需要通过智能合约来解决这个问题,不过这会受到安全问题的影响。
环签名(Ring signatures)、集体签名和“Shamir 的秘密共享(Shamir’s Secret Sharing)”[^7] 都是需要由区块链网络启用并由钱包软件支持以允许共同签署交易的替代加密算法的代表。共同签名是一项重要功能,它使得你能够将你的代币保管权转移给他人(银行或交易所),实现了资产的集体管理(类似于去中心化自治组织 DAO 对相同资产的集体所有权或集体管理),或者社会密钥恢复。本书的第 3 章和第 4 章将深入探讨代币管理和代币用例的各个方面,其中钱包的作用将变得更加具体。
发送代币
如果 Alice 想向 Bob 发送比特币代币,她将使用钱包软件对自己进行身份验证,指定她想要发送的金额,并指明 Bob 的地址。她的钱包软件将交易广播到网络中的所有计算机。现在,网络中的每台计算机都可以根据网络规则检查交易是否有效。步骤如下:
-
Alice 使用一个钱包软件来管理她的私钥。通过执行标准的数学运算,钱包软件总是可以从私钥中导出她的公钥和地址。
-
如果 Alice 想向 Bob 发送代币,她会使用她的钱包软件创建一个包含所有必要细节的交易,包括她的公钥,Bob 的地址,以及她想要发送的代币数量。然后 Alice 创建此交易的数字签名,即哈希(由她的钱包软件执行)。
-
为了向网络的其他部分证明她是地址的所有者以及代币的所有者,Alice 用她的私钥对哈希进行签名(由她的钱包软件自动执行)。
-
Alice 现在将此交易广播到网络中的任何计算机:她发送明文交易和签名哈希(由她的钱包软件自动执行)。
-
网络中接收交易的任何计算机现在都可以验证交易的有效性。他们可以使用 Alice 的公钥在数学上验证签名的哈希是否真的由她签名。他们可以在她的可读交易上使用哈希操作,并会收到相同的哈希值。
-
在确认所有这些细节后,通过所有网络参与者的共识,经过验证的交易被存储到一个区块中并进行哈希处理。如果网络中的其他计算机验证该区块上的哈希数有效,则该区块将成为更新账本的一部分。这个创建新交易区块的过程受制于共识机制工作量证明(在下一章阅读更多关于工作量证明的信息)。
-
所有网络节点将在创建下一个区块时相应地修改其账本,以便 Bob 现在拥有 Alice 发送给他的资金。该交易成为比特币网络通用状态的一部分,并且是防篡改的。账本上的信息可以更改,但成本高得令人望而却步(在下一章中详细了解它的成本)。
本节概要
密码技术是在第三方存在的情况下对安全通信的实践和研究。其目的是创建能够抵御窃听、操纵和其他形式的攻击的信息系统。
区块链网络中的密码技术允许交互的透明性,同时维护所有网络参与者的隐私。
公钥密码技术用于通过一组密码密钥来证明一个人的身份:一个私钥和一个公钥,它们与交易相结合创建我们的数字签名。这个数字签名证明了我们对代币的所有权,并允许我们通过一个称为“钱包”的软件来控制它们。
与手写签名类似,数字签名用于验证你是你所说的那个人。在比特币和其他区块链中,数字签名是引用特定钱包地址的数学函数,该地址在区块链上管理你的代币。
哈希函数是一种数学算法,它可以接受任何类型的输入,例如字符串、文本文件或图片文件,并将其转化为称为哈希的固定大小的输出字符串。它是一个单向函数,这意味着从哈希重新创建原始输入数据(消息)的唯一方法是尝试所有可能的变化,看看它们是否产生匹配。虽然这是可能的,但它很耗时,因此成本高昂。
章节引用和延伸阅读
-
Alonso, Kurt M.: “门罗币入门:第一版私人数字货币技术指南; 适合初学者、业余爱好者和专家(Zero to Monero: First Edition a technical guide to a private digital currency; for beginners, amateurs, and experts)”, June 26, 2018 (v1.0.0): https://www.getmonero.org/library/Zero-to-Monero-1-0-0.pdf
-
Antonopoulos, Andreas M.: “掌握比特币:对开放区块链进行编程(Mastering Bitcoin: Programming the Open Blockchain)”, O’Reilly, 2017
-
Becket, B.: “密码学概论(Introduction to Cryptology)”, Blackwell Scientific Publications, 1988
-
Ben-Sasson, Eli;Chiesa, Alessandro; Garman, Christina; Green, Matthew; Miers, Ian; Tromer, Eran; Virza, Madars: “Zerocash:来自比特币的去中心化匿名支付(Zerocash: Decentralized Anonymous Payments from Bitcoin)” May 18, 2014 (extended version): http://zerocash-project.org/media/pdf/zerocash-extended-20140518.pdf
-
Ben-Sasson, Eli; Chiesa, Alessandro; Tromer, Eran; Virza, Madars: “冯诺依曼架构的简洁非交互式零知识(Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture)”, February 5, 2019 (updated version): https://eprint.iacr.org/2013/879.pdf
-
Boyle, David: “The Little Money Book”, Alastair Sawday Publishing, 2003
-
Buterin, Vitalik: “比特币不是量子安全的,我们如何在需要时修复它(Bitcoin Is Not Quantum-Safe, And How We Can Fix It When Needed)”: https://bitcoinmagazine.com/articles/bitcoin-is-not-quantum-safe-and-how-we-can-fix-1375242150/
-
Buterin, Vitalik: “区块链隐私(Privacy on the Blockchain)”, January 2016: https://blog.ethereum.org/2016/01/15/privacy-on-the-blockchain/
-
Castryck, Wouter: “ELLIPTIC CURVES ARE QUANTUM DEAD, LONG LIVE ELLIPTIC CURVES”, n COSIC Cryptography Blog, 31/05/2017: https://www.esat.kuleuven.be/cosic/elliptic-curves-are-quantum-dead-long-live-elliptic-curves/
-
Esslinger, Bernhard: “CrypTool 脚本:密码技术、数学等(The CrypTool Script: Cryptography, Mathematics, and More)”, 10th edition, distributed with CrypTool version 1.4.30: https://web.archive.org/web/20110722183013/http://www.cryptool.org/download/CrypToolScript-en.pdf
-
Flannery, Sarah; Flannery, David: “在代码中:一次数学之旅(In Code: A Mathematical Journey)”, Workman Publishing Company, 2001
-
Goldreich, Oded: “密码技术基础(Foundations of Cryptography)” Cambridge University Press, 2001
-
Ito, Joi: “我们对‘没有区块链的加密货币的构建优于比特币’的回应(Our response to ‘A Cryptocurrency Without a Blockchain Has Been Built to Outperform Bitcoin’)”, Dec. 20, 2017: https://www.media.mit.edu/posts/iota-response/
-
Katz, Jonathan; Lindell, Yehuda: “现代密码技术导论(Introduction to Modern Cryptography)”, Chapman & Hall/CRC, Cryptography and Network Security Series, 2nd Edition, 2014
-
Nakamoto, Satoshi: “比特币:一种点对点的电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)”, 2008: https://bitcoin.org/bitcoin.pdf
-
Narula, Neha: “IOTA 中的加密漏洞(Cryptographic vulnerabilities in IOTA)”, September 7, 2017 https://medium.com/@neha/cryptographic-vulnerabilities-in-iota-9a6a9ddc4367
-
Narula, Neha:“IOTA 漏洞报告:Curl 哈希函数的密码分析启用对 IOTA 加密货币的实际签名伪造攻击(IOTA Vulnerability Report: Cryptanalysis of the Curl Hash Function Enabling Practical Signature Forgery Attacks on the IOTA Cryptocurrency)”, 7 September, 2017: https://github.com/mit-dci/tangled-curl/blob/master/vuln-iota.md
-
N.N.: “Bitcoin”, Github repository: https://github.com/bitcoin
-
N.N.: “比特币核心(Bitcoin Core)”, Github repository, https://github.com/bitcoin/bitcoin
-
N.N.: “比特币核心集成(Bitcoin Core Integration)”, Staging tree: https://bitcoincore.org/en/download
-
N.N.: “Mimblewimble协议(Mimblewimble Protocol)”, Github Archives: https://github.com/mimblewimble/grin/blob/master/doc/intro.md
-
N.N.: Monero Research Lab, Technical Resources: https://ww.getmonero.org/resources/research-lab/
-
N.N.: “后量子密码技术(Post-Quantum Cryptography)” Information Technology Laboratory, COMPUTER SECURITY RESOURCE CENTER: https://csrc.nist.gov/projects/post-quantum-cryptography/round-1-submissions
-
Prasanna: “莱特币实施 Mimblewimble(Litecoin To Implement Mimblewimble)”, Altcoin News, February 8, 2019: https://cryptoticker.io/en/litecoin-implement-mimblewimble/
-
Rogaway, Phillip; Bellare, Mihir: “现代密码学导论(Introduction to Modern Cryptography)”, May 11, 2005: http://web.cs.ucdavis.edu/~rogaway/classes/227/spring05/book/main.pdf
-
Schär, Fabian; Berentsen, Aleksander: “比特币、区块链和加密资产:全面介绍(Bitcoin, Blockchain und Kryptoassets: Eine umfassende Einführung)”, Books on Demand, 2017
-
Schor, Lukas: “区块链中的零知识证明(On Zero-Knowledge Proofs in Blockchains)”, Argon Group, March 2018: https://medium.com/@argongroup/on-zero-knowledge-proofs-in-blockchains-14c48cfd1dd1
-
Stallings, William: “密码技术与网络安全:原理与实践(Cryptography and Network Security: Principles and Practice)”, Prentice Hall, 6th ed., 2013
-
Stolbikova, Veronika: “椭圆曲线密码学是否可信? 浅析流行密码系统的安全性(Can Elliptic Curve Cryptography be Trusted? A Brief Analysis of the Security of a Popular Cryptosystem)”, ISACA Journal Volume 3, 2016 https://www.isaca.org/Journal/archives/2016/volume-3/Pages/can-elliptic-curve-cryptoraphy-be-trusted.aspx
-
Tibco, Nelson Petracek: “零知识证明将为区块链做什么(What zero-knowledge proofs will do for blockchain)”, Venturebeat, Dec 16, 2017: https://venturebeat.com/2017/12/16/what-zero-knowledge-proofs-will-do-for-blockchain/
-
Wetzel, Tyler: “了解区块链和加密货币世界的行话(Understanding the Jargon of the Blockchain and Cryptocurrency World)” Medium, Aug 23, 2018: https://medium.com/@twwetzel76/understanding-the-jargon-of-the-blockchain-and-cryptocurrency-world-64b5f431bcd5
-
Wikipedia contributors, "密码技术(Cryptography)," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Cryptography (accessed Jun 10, 2017).
-
Wikipedia contributors, "数字签名(Digital signature)," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Digital_signature (accessed Jun 10, 2017).
-
Wikipedia contributors, "加密哈希函数(Cryptographic hash function)," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Cryptographic_hash_function (accessed Jun 10, 2017).
-
Young, Joseph: “匿名加密货币:为什么爱德华·斯诺登支持零知识证明(Anonymous Cryptocurrencies: Why Edward Snowden Supports Zero-Knowledge Proofs)”, January 2018: https://journal.binarydistrict.com/anonymous-cryptocurrencies-why-edward-snowden-supports-zero-knowledge-proofs/
-
Bitcoin Core: https://bitcoin.org/de/download
-
Electrum: https://electrum.org/
-
Ledger: https://www.ledger.com/
-
Monero: https://getmonero.org/
-
Mimblewimble: https://github.com/mimblewimble/grin/blob/master/doc/intro.md
-
Trezor: https://trezor.io/
-
Zcash: https://z.cash/
脚注
[^1]: 虽然椭圆曲线密码技术提供了与 RSA 相同级别的安全性,但它需要更少的计算量和更小的密钥大小,从而降低了对存储和传输的要求。因此,它允许减少存储和传输要求。
[^4]: 哈希函数接受任意长度的输入并返回看似随机但长度固定的输出。当多个输入解析为相同的输出时,这种冲突可能会导致严重的问题。麻省理工学院和波士顿大学的一组研究人员在 IOTA Curl 函数中发现了这些缺陷。虽然 IOTA 团队修复了上述漏洞,但他们声称这些漏洞是故意引入的,这遭到了开源社区的严厉批评。
[^5]: 可以在这里计算哈希值: https://www.browserling.com/tools/all-hashes
[^7]: Shamir 的秘密共享是一种加密算法,它将秘密(密钥)分成几部分,将秘密的碎片分配给不同的人。要重建秘密,需要添加所有分片。在“阈值”设置中,只需要一定数量的部分即可重建秘密。