X509证书从理论到实践之数字签名理论基础

由于最近在开发单点登录SSO相关系统,所以对证书系统,数字签名以及SAML协议进行了深入的研究,阅读了大量的官方标准文档。希望通过一些列文章把自己学习的知识进行总结并记录,一方面留作备忘,另一方面也能进一步巩固加深记忆。

系列文章计划,该系列文章可以总称为网络信息安全相关标准。

  1. X509证书从理论到实践
    • 数字签名理论基础
    • 数字证书理论基础
    • PKI理论基础
    • X509证书标准详解
    • X509证书Java相关实现
    • X509应用场景介绍
  2. SAML协议从理论到实践
    • SAML协议标准详解
    • SAML与SSO理论基础
    • 使用OpenSAML进行SAML相关开发
    • 开源项目推荐
  3. OAuth协议从理论到实践
  4. OpenID Connect协议从理论到实践

这个系列的文章的逻辑顺序可以这样描述。首先从需要解决的问题开始,在网络环境中,我们希望有些信息不能被篡改,有些信息不能被窃听,有些信息不能被伪造,再这样的目的下,数字签名被引入来防止篡改和伪造。数字证书进一步加强了数字签名的真实性,进而引出公钥基础设施(PKI)来规范管理数字证书。作为证书其标准最为重要,也就是X509标准。有了X509证书,除了刚才提到应用实际上还有很多其他的用户,从而讨论使用场景。其中TSLSAML都是其重要的应用。

关于数字签名其实大家并不陌生,已经有很多文章做过介绍,

比如这篇英文文章用一些简单的图片介绍了数字签名,然后这篇博文对其进行了翻译与拓展。在理解了整体的原理后,该篇文章简要介绍了数字签名中涉及的算法。基本这些文章能够覆盖数字签名的理论知识。本文作为系列的开始,简单的进行总结概括。

非对称加密

非对称加密算法应该算是数字签名以及以后的PKI系统的根基。一切后面谈到的安全机制基本都是建立在非对称加密算法安全基础上。非对称加密很好理解,就是加密和解密所使用的密钥不一样,也就是加密和解密的过程不是对称的。这和传统的对称加解密机制不同。

以下对称加密的案例:

  1. ZIP压缩包加密:我们给文件压缩包加密,输入一个密码,然后拿到压缩包的人只要知道了这个密码就可以解密。
  2. Wifi信号加密,我们在路由配置Wifi密码,然后接入Wifi的人需要输入密码才能连接路由。

在计算机网络中对称加密就有了局限性,也就是 这个对称的密钥如何安全的传输,非对称密钥就是解决这个问题的。

比如ZIP压缩包加密,我们需要通过网络传送给其他人,我们加密的目的就是在传输中担心别人截获,但是我同样需要将密钥传送给这个人,虽然可以将文件和密钥分开发送,但是在如今的黑客技术,很容易获取两者从而拿到明文。

带着这个问题我们开始解释非对称密钥。

非对称密钥分为配对的公钥和私钥,公钥加密后其只有其配对私钥能够解密,反之亦然。在这个基础上我们就可以解决上面提到的密钥传输问题。下面我们通过以下几张图阐述非对称密钥的所解决的问题。

对称密钥系统的漏洞

对称密钥的漏洞

通过上图可以发现,在网络应用中,对称密钥存在很大的漏洞,那就是密钥需要传递给接受者,只要密钥通过网络传输,就存在理论上被截获的危险。所以在网络传输中很少使用对称密钥,即使使用也需要很多加强的技术来确保对称密钥不会被窃取。

非对称密钥系统的改进

非对称密钥系统的改进

非对称密钥的优势就在于加密与解密的密钥不同。所以接受者Alice可以在网上公布她自己的公钥,而私钥自己需要在本地保管好。这样发送者Bob在准备给Alice发送密文前,首先获取Alice的公钥,然后用Alice的公钥对明文进行加密,然后再发送给Alice,Alice收到密文后,使用自己本地保管好的私钥进行解密就可以得到明文了。

对于攻击者V来说,虽然可以在网络上截获密文,但是攻击者V没有Alice的私钥,该私钥妥善的保管在Alice的本地,网络上无法获取,所以他无法解开密文。这样就简单的解决上一节对称密钥的漏洞,只需要用户妥善保管自己的私钥即可。

非对称密钥算法

现在我们已经知道了非对称密钥在网络传输中的作用,而这个改进的基础就是非对称密钥算法的安全性。

1977年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法名字叫做RSA,该算法在当代仍然担任着重要的角色。目前超过768位密钥的RSA还没有公开的破解方法。所以常见的1024位和2048位RSA算法都是安全的。

非对称密钥算法安全

对于具体的RSA算法,大家可以参考这两篇博文研究:RSA算法原理(一)RSA算法原理(二),未来我也会专门文章使用更加形象的方法来解释RSA。

数字签名理论

本人参考最前面提到的若干文章,对其理论以及其做法的目的进行详细讨论。

上一章我们在介绍非对称加密所使用的案例是:

Bob 向 Alice 发送保密信息,这些信息不能被其他人获取

而数字签名所解决的问题是:

Bob 向 Alice 发送消息,确保这些消息不能被其他人篡改

当然这里的消息同样也可以使保密消息,也就是两个问题结合起来就是

Bob 向 Alice 发送保密消息,确保这些消息不能被其他人获取,也不能被其他人篡改

我们首先介绍如何解决第二个问题,然后将前两个解决方案结合来解决第三个问题。

非对称加密的被篡改漏洞

我们在网络中传输数据,有的时候会遭到攻击者的篡改,这样接受者就会收到错误的消息,有时候这种攻击别泄密危害更大。

具体攻击漏洞如下图,比如Bob发送一个软件安装包给Alice,攻击者截获安装包在加入或者替换为自己的病毒安装包发给Alice,Alice无法识别信息是否已经被替换或篡改,就会错误的安装病毒软件。

消息传递的被篡改漏洞

及时我们采用上面提到的使用Alice的公钥加密的机制,仍然无法防止攻击者直接替换原来需要发送的文件,因为攻击者不需要解密,只需要用公钥再重新把病毒文件进行加密伪装即可。具体原理见下图:

非对称加密的被篡改漏洞

虽然Bob对需要传送的数据文件使用Alice的公钥进行了加密,但是由于Alice的公钥是在网络上传输或者公开的,攻击截获了Bob向Alice发送的密文后,虽然攻击者无法得知明文,但他无需对其进行解密,只需要使用Alice的公钥对自己的病毒的文件进行重新加密,再发给Alice,这时候Alice无法辨别接收到的文件是否真正是Bob发送的,因为两种文件Alice都可用她的私钥解开获取到明文。这样攻击者就达到了攻击的目的。

数字签名解决被篡改漏洞

数字签名就是用来解决上面的这种伪造或篡改的攻击的。原理很简单,就是把前面提到的使用公钥加密私钥解密进行颠倒私钥加密公钥解密,这样只有拥有私钥的人才能创造出可以用对应公钥解开的密文。攻击者虽然能够用公钥解开加密的内容,但是他不能在修改完或者替换完内容后重新生成一个能用公钥解开的密文,因为攻击者没有私钥。具体原理参见下图:

数字签名解决被篡改漏洞

Bob在发送文件给Alice前,使用自己的私钥对文件进行加密,也就是所谓为文件签名,这个签名不能是内容不被别人窃取,因为公钥是可以在网络上传输的,但是攻击者没有Bob的私钥就不能伪造Bob的签名,所以说这个签名只有Bob本人能够生成。这样Bob放心的把签过名的文件和自己的公钥发送给Alice,Alice在收到后使用公钥解密签名获取签字的内容,确定Bob的身份。这时候即使攻击者截获了Bob发送的消息,也无法伪造出Bob的签名。当然如果攻击者能够伪造Bob的公钥,让Alice误认为攻击者的公钥就是Bob的公钥也能达到攻击的目的,这一问题我们会在数字证书处解决。

至此,本文将非对称加密和数字签名理论进行详细的解释,这里进行总结:

  1. 保护信息不被窃取: 公钥加密,私钥解密
  2. 保护信息不被篡改: 私钥加密,公钥解密验证 — 实际上就是数字签名

往往两者互相配合使用,最大限度的保护消息在网络中传输。