撰文:noemi glaeser,a16z crypto撰文:Chris,Techub News在公钥密码学中,一直以来都有一个难题,那就是如何将加密密钥(如公钥)正
撰文:noemi glaeser,a16z crypto
撰文:Chris,Techub News
在公钥密码学中,一直以来都有一个难题,那就是如何将加密密钥(如公钥)正确地与一个具体的身份(比如某个人或组织)关联起来。这个问题的关键在于,要有一种公开且一致的方式来显示身份和公钥之间的关系,这样大家才能放心地使用这些公钥来加密信息。
如果没有这样明确的关系,别人可能无法确定某个公钥到底属于谁,这样就有可能把加密信息发送给错误的人,导致信息泄露或其它严重的后果。在 Web3 中,这个问题依然存在。
对于上述的问题,目前有三种解决方案:Public Key Directory、基于身份的加密(IBE)、和基于注册的加密(RBE)。这三种方法在匿名性、交互性和效率上各有各的优点。例如,IBE 需要强大的信任基础,但在某些情况下,IBE 在匿名性和效率上表现更好。本文旨在探索这三种方法在区块链上的应用,并比较它们的优缺点。
一般来说,将加密密钥与身份信息关联的常用方法是使用公钥基础设施(PKI),其中核心部分是一个公钥目录。在这种方法中,发送信息的人需要与一个受信任的第三方(即维护这个目录的机构,通常是证书颁发机构)进行互动,以便发送加密信息。
然而,在 Web2 的环境中,维护这个公钥目录需要较高的成本以及繁琐的操作。此外,用户还面临着证书颁发机构可能滥用权力的风险。
密码学家提出的一些替代方案,以解决公钥基础设施(PKI)存在的问题。在1984年,Adi Shamir提出了基于身份的加密(IBE),其中一方的标识(例如电话号码、电子邮件或ENS域名)可以直接用作公钥。这种方法消除了维护公钥目录的需要,但引入了一个新的问题:必须依赖一个受信任的第三方(密钥生成器)来生成私钥。
2001年,Dan Boneh 和 Matthew Franklin 提出了第一个实用的IBE构造,但这种技术并未广泛采用,主要是在一些封闭的生态系统中使用,如企业或政府的部署环境。IBE不被广泛使用的原因之一可能是它需要依赖一个强大的信任假设,即信任第三方生成得密钥。
不过,正如本文后续将讨论的,这种信任问题可以通过依赖一个受信任的多方(即一组参与者组成的法定人数)来解决,而区块链技术可以很容易地实现这一点。
优势和劣势
比较这几种加密方案时,需要考虑许多不同的因素,我对此做出两种假设:
用户不会更新或撤销他们的密钥:这意味着在讨论中假设每个用户的密钥都是固定的,不会发生变化。
智能合约不使用任何链下的数据可用性服务(DAS)或 blob 数据:也就是说,假设智能合约完全依赖于链上数据,不涉及链外的数据服务或额外的数据存储。
任何人都可以通过调用智能合约,将一个没有被别人占用的 ID 也就是(id, pk)条目添加到链上目录中。
去中心化的PKI是指通过智能合约来维护一个身份(ID)和其对应公钥的目录。这个目录是公开的,并且不依赖于中心化的第三方。例如,以ENS为例,它维护了一个域名(即身份)与相关元数据的映射关系,包括该域名所解析的地址(从这些地址的交易中可以推导出公钥)。ENS是一个更复杂的系统,不仅记录公钥,还存储了其他元数据。去中心化的 PKI 的功能相对来说更简单:智能合约只需维护一个列表,记录每个身份对应的公钥即可。
当用户想要注册一个身份得时候,首先需要生成一对密钥(公钥和私钥),或者使用已经生成的密钥对,将其身份ID和公钥发送到智能合约(可能还会支付一定费用),智能合约会检查这个ID是否已经被别人注册过。如果没有被占用,智能合约就会将这个ID和公钥添加到目录中。一旦注册完成,任何人都可以通过询问智能合约来获取某个ID对应的公钥,以便加密发送消息给该用户,如果发送者之前已经加密过消息给这个用户,并且已经有了该用户的公钥,就不需要再次向智能合约请求公钥。有了公钥后,发送者可以像平常一样使用它来加密消息,然后将加密后的消息发送给接收者,接收者使用对应的私钥来解密消息,恢复原文。
我们来看看这个方法的优点和缺点: