不懂技术的产品不是好业务,而加密算法等密码学原理也是最基础的知识之一,也是互联网信息安全的基础。甚至现在很火的区块链,最基础的部分也是基于密码学的。
密码学很难吗?其实不然,认识了我们的女主角Alice和男一号Bob,我们就能轻松掌握密码学基本原理!
1.初识Alice和Bob
首先我们来认识下,为我们讲解密码原理的两位主角——女神“Alice”和型男“Bob”,他俩可以说是密码学中最经典的角色,几乎所有的密码学著作、文章里都能看到他们的身影。
如果没有Alice和Bob,在讲解密码协议原理的时候,大致会描述成这样:
A 需要与某个声称自己是 B 的人进行网络通信。为了确保通信安全,A 必须先验证B的身份真实性(万一声称自己是B的人,是个骗纸,其实他是坏人呢),于是A需要看看B是否知道他们之间约定的接头“暗号”——也就是我们经常提到的通信密码 K。那么A该如何验证K呢?于是,A向B发送了一段随机的数据 X,B 用 密码K 将数据 X 加密后得到 密文数据Y ,并将密文 Y 回传给 A。A再使用密码K对密文Y进行解密,验证是否可以得到数据X。如果解密后可以得到正确的X,则B身份合法。反之,则B不合法。
那么在引入Alice、Bob替代A、B之后,这段描述就变得立体生动起来。
Alice和Bob通过网络通信,但实际上通信链路和环境往往是不安全的。他们的通信内容很可能会被窃听。黑客通过进入一个路由器或聆听一个Wi-Fi通信的无线电信号。这种未经授权的监听被称为窃听。窃听者英文叫Eavesdropper,我们暂时称呼这个黑客窃听者为Eve。Eve不仅会窃听通信内容,还会拦截甚至是篡改Alice给Bob消息,以便从中谋利。
角色设定: 人名 | 角色 ---|--- Alice | 所有协议中的第一个参与者 Bob | 所有协议中的第二个参与者 Eve | 窃听者
2.发送者、接收者和窃听者
场景1: Alice向Bob发送电子邮件
在这个场景中,发出邮件的 Alice 称为 发送者(sender),而收到邮件的 Bob 则称为 接收者(receiver)。 在讲解发送者、接收者的概念时,用邮件这个例子会比较便于理解,但实际上发送者和接收者这两个术语的使用范围并不仅仅局限于邮件。当某个人向另一个人发送信息时,发出 信息的人称为发送者,而收到信息的人称为接收者。另外,被发送的信息有时也统称为消息(message)
场景2: Eve窃听邮件
邮件是通过互联网从Alice的计算机发送到Bob的计算机的。在发送邮件时,邮件会经过许多台计算机和通信设备进行中转,在这个过程中,就存在被恶意窃听者偷看到的可能性。
窃听者 Eve并不一定是人类,有可能是安装在通信设备上的某种窃听器,也可能是安装在邮件软件和邮件服务器上的某些程序。 尽管邮件内容原本应该只有发送者和接收者两个人知道,但如果不采取相应的对策,就存在被第三方知道的风险。
场景3: 邮件做了加密,Eve无法获取邮件明文
为了防止被窃听,Alice运用密码(cryptography)技术,对邮件做了加密,变成密文传输。Bob收到密文,根据约定的“接头暗号”也就是解密密钥,获得邮件明文。而Eve不知道密钥,所以无法解读邮件内容。
3.密码
上述场景中,引入几个概念:
〔明文〕:消息本身。(简体中文)
〔加密〕:用某种方法伪装消息以隐藏真实内容的过程。(类似你把简体中文转成了甲骨文,看到了估计也懵逼了,哈哈)
〔密文〕:加了密的消息。(甲骨文)
〔解密〕:密文转变为明文的过程。(甲骨文又变回了简体中文)
明文用M表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。但涉及计算机时,明文也可以用P表示,是指简单的二进制数据。 明文可被传送或存储,无论在哪种情况,M指待加密的消息。
密文用C表示,它也是二进制数据。加密函数E作用于M得到密文C,用数学公式表示为: E(M)=C. 相反地,解密函数D作用于C产生M D(C)=M.
先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:
D(E(M))=M
因此,大名鼎鼎的“密码”闪亮登场!密码,即密码算法, 也就是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)
如果算法的保密性是基于保持住算法本身的秘密,不被外部获知算法本身,那么这种算法称为“受限制的算法”。
受限制的算法具有历史意义,在早期相当长时间内发挥着作用,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。这就好比地下党组织,有个联络员甩手不干了,那么为了安全起见,这个组织联络暗号也要换掉。
更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。
尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。
现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成: EK(M)=C DK(C)=M. 这些函数具有下面的特性:DK(EK(M))=M. 有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下: EK1(M)=C DK2(C)=M DK2(EK1(M))=M
所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。
(1)对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。
对称算法的加密和解密表示为: EK(M)=C DK(C)=M
Alice和Bob只能事先约定好加密密钥K。如上图,如果K是在信道中传输的,那么很有可能被Eve窃听的。拿到K的Eve是可以获取信息明文的。
对称加密具有几个显著缺点:
1、密钥分发问题:密钥的分发必须建立Alice和Bob使用安全信道的基础上。而实际上通信链路是不安全的,所以直接在信道上传输密钥也是不安全的,尽管这是最方便的方式。
2、密钥数量:就算解决了密钥分发问题,我们还得处理大量的密钥对。假设一个对用户使用一对密钥,N个用户的网络,有N*(N-1)/2对密钥。每个用户要维护N-1个密钥对的安全
3、不具备抗抵赖性:所谓抗抵赖性,就是发送者事后不可能虚假地否认他发送的消息。因为Alice和Bob具有相同的密钥,我们无法确定双方是否具有欺骗行为。如在一个电子商务应用中,Alice下了一个购买电视的订单,改变注意后,她可以声称是Bob自己生成了错误的订单。
常用对称加密算法:AES,DES,3DES
(2)非对称加密(Asymmetric Cryptography)
为了克服对称密钥的这些缺点,diffie-hellman、Merkle提出了一个革命性的设想: 加密消息的人 (即我们的示例中的 Alice) 不需要保证她所拥有的密钥是保密性。这个设想的关键的部分是, Bob接收者只能用秘密密匙解密。为了实现这样的系统, Bob 发布了一个公共加密密钥。与此同时,Bob 还有一个与之匹配的密钥, 用于解密。因此, Bob的钥匙 K 包括两个部分, 一个公共部分, $K_{pub}$, 和一个私有的, $K_{pri}$。
这个机制有点像街角的邮筒,任何人都可以往里面投递邮件,但只有拥有邮箱钥匙$K_{pri}$的邮递员能打开邮筒拿到信件。这个协议用数学表达应该是这样的:
非对称加密(也称公钥算法)为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
非对称加密的安全机制:
1、密钥建立:在不安全信道上建立机密密钥的协议。此类协议的示例包括 Diffie–赫尔曼密钥交换 (DHKE) 或 rsa 密钥传输协议。
2、完整性校验:提供认可和消息完整性的认可可以通过数字签名算法实现, 例如 rsa、dsa 或 ecdsa。
3、鉴别: 我们可以识别使用挑战和响应 pro-tocols 的实体以及数字签名 (例如, 在银行或移动电话中的智能卡之类的应用程序中)。
4、加密:可以使用rsa或elgamal之类的算法来加密消息。
非对称加密也有一个显著的缺点,效率远低于对称加密。所以在使用过程中,通常会结合两者使用。用非对称技术去做密钥建立,用对称加密作数据加密。
在上个例子中,Bob可以解密Alice发送的消息,那Alice怎么处理Bob发送的消息呢?很简单,可以Alice可以把对称密钥K用Bob发送的$K_{pub}$加密, 发送给Bob,Bob拿到后解出K。那么接下来,他们就可以用对称密钥K来处理消息了。过程如图:
常用非对称加密算法:RSA,DSA,ECC
(3) 数字签名
接着上面这个场景,Alice和Bob解决了密钥分发的问题,并拿到了对称密钥K,接下来,他们开始通话(通话内容用K加密):
Alice:Bob,我要买一台电视。有什么优惠活动吗?
Bob:买电视,送一张迪斯尼乐园门票。
Alice:OK
三天后,Alice收到了电视,但没有拿到迪斯尼乐园门票。Alice向Bob投诉。Bob抵赖说:我并没有说过送什么礼物。Alice把Bob告上法庭。作为第三方仲裁者,法官无法判别Bob是否撒了谎。虽然Alice拿出了Bob发送的加密信息作为证据。但Alice也拥有相同的K,完全可以伪造出相同的信息。
那么,如何解决Bob抵赖的问题呢?
上文提到过,非对称加密(公钥加密)的安全机制除了加密功能,还有另外一个很强大的功能:鉴别(数字签名)。
数字签名是当今用途最广泛的密码学工具之一。应用范围包括数字证书、签署电子商务法律合同及软件更新等场景。它也是建立安全通道的重要保障手段之一(后续场景会用到),是 公钥加密算法的重要组成部分。
确定某条信息是特定的人产生的,是非常重要 的。在现实生活中,可以利用手写签名。例如,我们签署一份合同或支票,接受方凭签名向法官证明是我们签署了这个信息。在数字世界中,我们可用公钥算法(非对称)做到这一点。其基本思想是,签名消息的人使用私钥,接收方使用匹配的公钥校验。
如上图:Bob用私钥对消息作了签名,并发送给Alice。Alice可用拿Bob在之前步骤发送的公钥,去验证这个消息和签名。 验证通过之后,Bob就无从抵赖了。
(4) 中间人攻击(Man-in-the-Middle Attack)
进行到这里,我们已经解决了密钥分发、抗抵赖性等问题。但还是遗留一个问题:在第一步中,Alice如何确认收到的公钥是属于Bob,而不是被Eve截取并串改过的?
在上图中,Eve截获了Bob发给Alice的公钥 $K_{pub}$,并替换成自己的公钥$K_{pubEve}$,发给Alice。 Alice拿到了Eve的公钥$K_{pubEve}$,她并不能验证该公钥的真实性,以为这个公钥就是Bob的。这直接导致Eve窃取到了最重要的对称密钥K。Eve凭借K,就可以解密并窃听Alice和Bob后续通话了。
(5) 数字证书(Certificates)
数字证书很好的解决了这个问题。粗略的来讲,数字证书就是把公钥$K_{pub}$绑定到了一个确定的身份上。好吧,这句话有点绕口,你可以这么理解:数字证书是一张含有公钥的身份证。
数字证书通常是第三方数字证书认证机构(Certificate authority,简称CA) 颁发的,包含以下信息:
我们先来看一个证书,有个概念。百度的证书长成这样的:
看完证书之后,我们再以Alice和Bob举例,看Alice是如何完成对Bob的身份验证的。
场景1:Alice要Bob出示身份信息
Bob:Hi,Alice,我是Bob
Alice:我不能确定你是Bob,能出示一下身份证(数字证书)吗?
场景2:Bob去公安局(CA机构),办理身份证(数字证书)
1、公安局(CA机构)会让Bob提供公钥$K_{pubBob}$和一些材料(通常是公司信息、域名等),并作背景调查。
2、公安局(CA机构)拥有公钥$K_{pubPolice}$和私钥$K_{priPolice}$。 用私钥$K_{priPolice}$对Bob公钥及信息签名, 合并后生成Bob在该公安局(CA机构)的数字证书:
$Cert_{Bob} = [(K_{pub},Bob,ID_{Bob}),sig_{K_{pri}} (K_{pub},Bob,ID_{Bob})]$
场景3: Alice验证Bob身份
1、Bob不再直接传递$K_{pub}$给Alice,而是传递$Cert_{Bob}$。
2、公安局(CA机构)的公钥$K_{pubPolice}$是公开的(通常是作为根证书,内置在系统或浏览器内)。 Alice用$K_{pubPolice}$校验证书的签名信息。校验通过后,就可用确认Bob的身份,从证书中获取Bob的公钥$K_{pub}$。完成后续的密钥建立流程。
结尾
到这里,我们已经从理论上初步完成了如何去建立一个安全信道。大家应该对密码学有个大致的了解了。
下一次,我们将聊聊密码学在日常场景的应用。比如:打开百度:https://www.baidu.com 这个过程,发生了什么?
本文由作者@紫气冬来 在PMCAFF社区发布,转载请注明作者及出处。
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有