公钥真是公开的吗?

Originally published at: https://alphawallet.com/cn/公钥真是公开的吗?/
本文翻译自《Are public keys really public?》,译者:Peace@零识区块链


一般来讲,一旦和PKI(公钥基础设施)打上交道,就拥有了软件工程师,技术支持员,专业组织和商务人员的重重保护。尽管PKI号称公钥基础设施,也的确存在于基础设施中,但却是一种与外界隔绝的密钥。

区块链基于数字签名,这点是PKI的核心。比特币的兴起带来了许多PKI复议和重新申请的使用案例。作为区块链架构师,我被一遍遍要求解释PKI,也由此精炼了一套解释的艺术。这篇文章用最简短的篇幅和最精炼的语言完成了对PKI的解析。第一次接触PKI的时候,我才不到13岁,我们一见如故,也因此让我在甘肃省图书馆一泡就是数月。尽管如此,我更想用寥寥数分钟来诠释PKI。

科普PKI

本文旨在让PKI浅显易懂。尽管我的日常工作是围绕着区块链展开的,但为了让读者更清晰地理解PKI,本文将不含盖区块链的内容。

仅有密码还不够

密码作为针对已知和受信方的验证工具非常有效。下面是一个简单的例子:

-保险公司:您是我们的用户吗?

-用户:是的,这是我的密码。

事情就这么简单。

当需要验证第三方是,密码就没用了。

-第三方:你是某保险公司用户吗?

-用户:是的

-第三方:请证明。

-用户:这是我的密码。

-第三方:(登入中) 密码正确,可以。

-第三方:脑子中在想:既然我也可以登录你的账户,我就能冒用你的身份了…

如果这时你在想“单点登录”,暂且打住。我现在没有空理会“单点登录”,我会另找时候好好解释。

密码的缺陷还不仅如此,比如同一密码是在不同场合重复使用的。当你需要登录的网站被入侵了,你不仅需要改掉该网站的密码,同时还要改掉使用同一密码的其他网站的密码。

最后,密码在验证过程中大量使用,注意是验证不是授权,两者有本质区别。

-银行:我们将受理您的退款申请,首先需要您的密码。

-用户:dogBreath#231!

-银行:好的。是您本人的操作。根据我们的记录,该笔付款是经您授权的。

-用户:我没有授权。

-银行:您昨天登录了我们的网上银行。

-用户:是的

-银行:然后您点击了“授权支付”。

-用户:我没有!

-银行:您的确点击了。

-用户:证据呢?

-银行:计算机显示您的确做了该项操作。

-用户:你的计算机怎么显示还不是你说了算!那是你的计算机!

该案例中,密码无法让银行提供授权证明。


1) PKI运行原理:数字签名

首先,你通过计算机获取一个私钥和一个公钥。你不需要也不可以接受别人给你私钥,因为别人给你的私钥是他们的而不是你的。

然后,你把公钥给其他人。哪天你要发送给那人信息时,只需附上签名,就能证明这条信息的确来自于你本人。

签名:= 签上(信息, 私钥)【:= 意味着‘由某人获取’.】

然后接收方可以验证:验证(信息, 签名, 公钥)

回复将会是真的或假的,意味着签名的合法与否。

你可能会问:“何必那么麻烦?如果Alice写一封邮件给同事Bob,即使不用复杂的数字签名,Bob也知道时Alice寄邮件给他,因为Bob的收件箱里标记着这封邮件来自Alice。

Bob的自信来自他对收件箱的信任。数字签名是证明信息本身,无论该信息存储在何处。如果Bob把邮件从邮箱里复制到U盘里,拿着U盘给Carol看,Carol很可能不会相信是Alice写的该封邮件。有了数字签名,Alice的信息就是Alice的,并与Bob和他的邮箱的可信度无关。

“有什么大不了的。”我听见你在嘀咕:“好像收件箱还不够好似的。”信任信息本身的确是件重要的事。试想你从邮局收到一张支票,你需要这是一张有签名的支票吗?是的。即使邮政局说这张支票是寄件人本人给的,你需要有签名吗?没错,你仍然需要支票上的签名。很显然,这就是数字签名这么重要的原因。

Image credit:Wikipedia Commons

2) PKI运行原理:权威

上一章节里,Alice创建了私钥和公钥,她想写封邮件给Bob,并附上了签名。然而,她没法和Bob见面,所以Bob需要Alice的公钥来鉴别签名的真伪。

Alice可以通过电子邮件把公钥寄给Bob。为了确保邮件的真实性,她可以对邮件进行签名。但Bob一开始并没有Alice的公钥,他要如何鉴别这封邮件的真伪呢?

Alice和Bob需要一个中间人Carlos,Carlos深得Alice 和Bob的信任,并且两人知道Carlo的公钥,如果Carlos发送给他们任何信息,他们可以用公钥鉴别Carlos数字签名的真伪。

操作如下:

第一步,Alice 拜访Carlos。Carlos签了如下信息:

carlos签名 :=签了(“我与Alice会面,她告诉我她的公钥是0xd1fc.”,Carlos公钥)

第二步,Alice写了信息给Bob,并签了名。

Alice签名 := 签了(“Bob, 我们可以联系吗?”,0xd1fc)

第三步,Alice将信息整合打包发送给了Bob:

Bob, 我们能联系吗? 我是Alice,附上Carlos的证明。

Alice 签名e

Carlos 写道:

我与Alice会面,她告诉我她的公钥是0xd1fc

carlos_签名

Alice 的任务完成了,接下来到Bob了,要看到信息,要做两件事:

  1. 验证 (“我与Alice会面,她告诉我她的公钥是0xd1fc”, carlos签名e,carlos公钥)

  2. 验证(“Bob, 我们能联系吗? 我是Alice,附上Carlos的证明”, alice_签名, 0xd1fc)

第一步Bob通过查看Carlos的签名得知了Alice的公钥是0xd1fc。由于Bob信任Carlos,他签的任何信息Bob均相信,也更让Bob相信Alice的公钥是 0xd1fc.。

第二步用Carlos处确认到的公钥检查Alice的签名,也更让Bob相信是通过Alice公钥加密的真实信息。

由此,Bob 认定信息是来自Alice的。

按照约定俗尘的说法,我们称Carlos为“权威”。“权威”最早用于20世纪80年代,如今已经过时并切不够确切。如果PKI被比作法庭,那么Carlos就是目击证人,他并没有任何权威,摇摆的空间也仅限于撒谎或者不撒谎而已。权威一次将Carlos认作为法官,其实不然。权威的最初含义是可信力,同样不然。比如,中国互联网权威机构CNNIC在2015年公钥事件上并没有给出实情。(该组织势力庞大,所以在第一次否认撒谎失败后,将罪责推给了合作方,一家埃及企业。)

如果是我发明的PKI,我会给他们起名叫作“公证人”或者“见证人”。

Carlos被叫做权威的后果是,他所签名的信息(我与Alice会面,她告诉我她的公钥是0xd1fc)。

Image Credit:ssd.eff.org

3) PKI工作原理:验证真伪

PKI提供可信的数字签名,用以两种用途,授权和验证。

授权很好理解:

“我,Alice,授权支付”

alice_签名

相反,用户被授权而不是授权的应用则更为广泛。这与科技无关,而关乎社会结构中的惯性,组织的授权需求总是先于个人授权的需求得到满足。

至于验证真伪,是这么回事:

首先,得有一个被认证人,也就是用户验证的对象。比方说Alice要向Victor证明自己是Alice,也就是被验证人。

Victor:如果你是Alice,你就能以Alice的名义签名。

Alice: 当然。

“我是Alice.”

alice_签名

Victor: 等等。真的Alice可能对另一个被认证人Veronicau做了同样的事情,而你恰巧在场,你复制了她的签名。

Alice: 那么你要我怎么证明?

Victor: 这样签:“亲爱的Victor, 我是Alice。”

Alice: 给你,现在你一定相信我了。

“亲爱的Victor, 我是Alice。”

alice_签名

这样的事情通常发生在VISA和MasterCard等支付通道。当你刷信用卡付款时,POS机发出一个挑战信息,就像“亲爱的Victor,我是Alice。”事实上发送任何内容的挑战信息都可以,因为Victor的目的是确保Alice不可能在他发送挑战信息之前预先准备信息。因此,POS机使用随机且不可预料的内容发信息。现实中,POS机发出的一些信息很好预测,这是一种安全风险,是由墨尔本安全专家PeterFillmore最早发现。

总结PKI是一种基本的的信任机制。如不探究PKI的运行原因,而仅要理解PKI的工作原理还是很简单的,对普通人来说一小时以内就能搞定,不需要大学学历和数学背景,我本人就不具备任何大学学历。然而要弄明白签名机制或者Sign()签名公式并不容易,好在对于大多数使用PKI的人,像法律工作者和区块链倡导者完全无须接触得那么深入。

补充阅读

PKI(Public Key Infrastructure)翻译过来就是公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI 技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。

PKI 既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为 PKI。

PKI是一个标准,它包括一些基本的组件,不同的组件提供不同的服务,主要由一下几个组件组成:

认证中心 CA(证书签发):CA 机构,又称为证书授证 (Certificate Authority) 中心,是 PKI 的”核心”,即数字证书的申请及签发机关,CA 必须具备权威性的特征,它负责管理 PKI 结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA 还要负责用户证书的黑名单登记和黑名单发布。

X.500目录服务器(证书保存):X.500目录服务器用于”发布”用户的证书和黑名单信息,用户可通过标准的 LDAP 协议查询自己或其他人的证书和下载黑名单信息。

具有高强度密码算法(SSL)的安全 WWW 服务器(即配置了 HTTPS 的apache):Secure socket layer(SSL)协议最初由 Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。

Web(安全通信平台):Web 有 Web Client 端和 Web Server 端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的 SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。

自开发安全应用系统:自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。

纵观供应链金融行业,目前有很多的痛点,比如:信息不对称、信息无法传递、清算繁琐等等。而区块链对供应链金融的这些痛点,有着明显的优势:

首先,统一凭证:在应用区块链之后,各个参与方共同创建并维护一份各个环节都认同的凭证,保障数据真实和共享。其次,信任传递:各个节点都是参与方,其数据不可篡改、不可抵赖。该数据可以传递下去。最后,清算快速:区块链交易能够瞬时结算,使结算几乎实时完成,降低清算的复杂程度。

PKI与区块链的结合点涉及实名认证、数字证书颁发、电子签章(签名)、司法存证和证据保全等,应用的CFCA相关产品有网络身份平台、RA系统、电子签章、电子存证系统等。