浅谈数字证书的今生前世
作者:互联网
浅谈数字证书的今生前世
一、概述
在开始学习数字证书之前,我们先来介绍一下密码学相干的概念吧。
1.1、加密
加密[百度介绍]:加密是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。通俗点说,就是“对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“。然后密文又通过”密钥“解密后还原出原来的明文”,通过这样的途径从而达到保护数据不被非法窃取、阅读的目的。
我们平时在开发中,常接触到一些数据编码的技术[AES、RSA、MD5、BASE64、SM4],但很多人都应该分不清楚它们哪些是加密方法吧。其实,这些数据编码技术中,只有AES、REA、SM4编码技术属于加密范畴。那么我们如何去辨别一个数据编码技术是否属于加密方法呢?其实最简单的辨别就是从加密的定义出发,看”加密“后的数据是否还能否还原,能还原的就属于加密。
这里重点提下,MD5和BASE64数据编码技术。MD5可能是我们接触的、见到的最多数据编码技术,但MD5是对数据进行有损压缩,无论数据有多长,都会生成固定的128位散列值,并且MD5理论上是不可能对编码后的数据进行还原,即为加密不可逆。也正是因为MD5具有不可逆性和相同的数据多次计算值不变(简称单向恒定性)被广泛应用于文件完整性验证、口令加密以及接下来我们将要讲到的数字证书中。
而BASE64 数据编码技术呢,看你怎么看了,这里不讨论。因为BASE64编码不需要密钥,而且编码后的字符串任何人都可以解码出原串,因此你还敢称它为加密吗?但是它在转码方面发挥出了自己的特长,用于把二进制字节码转换为ASCII字符序列。
【补充】
- 明文:未加密之前的数据(报文)
- 密文:加密后的数据(报文)
1.2、密钥
密钥[百度介绍]:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。形象形容就是一个编码技术接口,输入密钥参数即可进行加密或是解密操作。
1.3、加密算法
由于这里主要讨论数字证书技术,因此对于加密算法,主要说明两大加密算法算法:对称加密、非对称加密(简述)。
1.3.1、对称加密
对称加密算法[百度介绍]:对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。简单说就是使用相同的密钥来处理加密和解密,发送方使用一密钥和加密算法对明文数据进行加密,接收方也使用相同的密钥和对应的解密算法对密文进行解密。如图
现在网上有很多的在线的加密/解密算法验证网站,大家可以便学便试试。
网址:[https://m.sojson.com/encrypt.html]
例如:
明文:Hello,word!
密钥:1234567890
加密算法:AES(高级加密标准)
密文:U2FsdGVkX1/A6Fj3HpRAyJM1EKn26h330kwOnG5Jcp0=
优缺点:
- 优点:加密算法公开、计算量小、加密速度快、加密效率高。
- 缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
其实,对称加密算法是一大类加密算法的总称,按照其出现时间和流行度,可分为传统加密算法和现代加密算法。如下图:
1.3.2、非对称加密
非对称加密算法[百度介绍]:对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。最常见非对称加密算法,RAS和Diffie-Hellman加密算法,其原理如下图:
实例操作:
明文:你好,陌生人
公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDHc+PP8LuTlBL1zCX+lh9kcur
gHHIXFnV/tDK789DaJuhwZvQ1lu5Zdcn+ULbNUKkB6b5tCP0sZxlpoCVKMyKHtde
h/YGXwBD8sMc+XcRs0eh3/tyr4EoBu3bomzHWDGmHjH/F5GotFTrGcB6xQwAROy4
mT5SketlQ3c7tucI+QIDAQAB
私钥:
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMMdz48/wu5OUEvX
MJf6WH2Ry6uAcchcWdX+0Mrvz0Nom6HBm9DWW7ll1yf5Qts1QqQHpvm0I/SxnGWm
gJUozIoe116H9gZfAEPywxz5dxGzR6Hf+3KvgSgG7duibMdYMaYeMf8Xkai0VOsZ
wHrFDABE7LiZPlKR62VDdzu25wj5AgMBAAECgYBKcdxYrp5EaHLwjNlIk0ciGfeY
pvhC1yGbqY6mb1soQAhpbkJyKudyVG4EHXGpy6dyiEzoJxg063NdwWp7/sYTHk/N
13UzGTudIKuNacnJk0WKu4owQticC71ZIqUjSZgN0CiEKQ6YfoGOFTzeMqzVYQjI
mPzGdLK74y3YYlmigQJBAObzhzYlWjOypx3klmrPTu2KXPg3ATTEB8kN/isY8bYu
ikVdd2yUd0AvaC7PPwEEjGmsSrEeXw1tsVfZ8VkBaikCQQDYR0+8VzGLdgIFQc/6
+IY5fQlEt/Hc7qsi7JT4o+f+BGJlAT7+OeDMThavKdWq1UvZDyCKdtYRfxQ1jj7D
4yJRAkBrG6InkGcm9sHecTb5Ti+ypqq7Svc6O3fI3L51ylm/PhJOXSyXpLsxf0r3
+pGjrTJZh9gUEJvQpIDM13zA5JERAkBI2zTsED9baIRjuvjR5Xhp00oVARYTw76Y
xDOm0qgq9NUki1fqEhs9F60ikqgspS+oziS7IC8as8FeDS3tlQ0RAkA5OdDvhQRQ
PI75ULyHazTEm4Rak8TKmKl64pmnwcw4GS9fKWs7jRAuem1OtwA8HAqjaDeXC8Cd
6fDfq7z5bZnE
加密算法:RSA非对称加密算法
密文:
GmCA5T/Zumt92H1LOBKhQIgCIzDAWvUyjnnxSmnpt6VkfZflVrnViRLUWEi8/Yd0jq5px1xm76fzU9QhuPdhmMlubTlTGDZLRDS1OdDOOxzrq4EVDM9Ryil0v/cB/lMaHleDZcSHgjmk/1ioVDSkYBOX68AkWp8uZaT/ahc6QiI=
公钥加密:
私钥解密:
二、数字签名和数字证书的出现
常用浏览器的我们都知道,随着网络生活的不断丰富,我们经常会遇到很多虚假的消息,但是呢?我们可以从发布上去甄别它们是否真实与否,但是如果在服务器与浏览器数据展示之前修改了数据内容?我们又该如何呢?今天我们就来谈谈这个问题。
其实网络安全为我们提供了五种服务(如下图),保证了我们所获取的数据是真实、完整的,而且是保密的,你也不用担心你和你女朋友的土情话被发现了哈。
报文保密性:指发送方和接收方期望保持机密。
报文完整性:指数据到达接收方时必须和它们发送时保持一致。
报文鉴别:指接收方需要确认发送者的身份,而不是未发送该报文的冒充者。
报文不可否认:指接收方必须能证明报文来自特定的发送方。
实体鉴别:实体或用户在访问系统资源之前需要核实身份。
2.1、“故事”背景
说到密码学,我们当然不能忘了我们的三位老师:Alice、Bob、Eve。假设,现在呢,Alice(数据发送方)正和Bob(数据接收方)谈恋爱呢,但是Eve也喜欢Bob,所以他不想Alice和Bob好,想搅乱他们的关系。(Eve 可截获报文或者发送他自己伪造的报文)
2.1.1、第一次约会
春天之初,Alice想约Bob去春游,于是Alice就给Bob发了一个消息:明天早上9:00,北京香山,春游。
但是呢,我们知道Eve不希望他们俩好,所以由于网络的不可信以及消息在网络中都是以明文进行传输的,所以Eve就可以轻易的截获、篡改甚至冒充Alice。因此,Eve便这样干了。如下图:
在没有加密消息传输中,Eve很轻易的便拿到(截取)了Alice发送的消息并且将其改成了自己想发送的内容(篡改),虽然是Alice在与Bob聊天,但是确是Eve和Bob聊天(冒充)。可想而知,为什么美国那么想要打压华为了,也就是使得美国不能成为Eve了。你说他会看着自己喜欢的人被别人带走?至于其他更是想想都害怕。因此,这样的明文传输,显然毫无安全感。
2.1.2、第二次约会
由于明文传输伴随的许许多多危险,聪明的Alice便发明了对称加密算法。保证了他传输的数据不被别人截取、篡改。于是Alice和Bob提前商量好了使用的密钥(如Alice13142Bob),于是便使用对称加密算法进行非明文数据传输。如下图;
由于Eve不知道ALice和Bob通信的密钥,所以他能截取到数据,但是无法获知数据内容,别说篡改和冒充Alice了。只要Alice和Bob保证密钥不会泄露,那么他们整个通信就是安全的,这下可把Bob愁坏了。因此,这次约会他也无能为力了。
但是作为一种加密算法,不可能把其安全性放在人身上吧?难道间谍的手段你可以抵抗?所以我们不能把安全性寄托在人身上。更何况,如果Alice和Bob在线下不认识呢?且不能线下见面呢?那么他们该如何交换密钥呢?既然要交换密钥,那么必然要明文传输,Eve自然不会放过,那么Eve知道密钥了,加密与否又有什么意义?如果使用密文加密,对方不知道密钥,也根本看不到加密后的密文,所以这根本是无解的。这下又愁坏Alice了,于是为了解决他和Bob线下不能见面的问题,于是他发明了非对称加密算法来发送他们通信时的密钥。非对称加密中,ALice和Bob各自生成一对公钥和私钥,由于公钥就是用来公开发布的,所以它可以被任何人获取到,自然可以使用明文进行数据交互,从而交互Alice和Bob各自的公钥。然后他们使用对方的公钥进行数据加密,然后对方使用自己的私钥来解密,获取数据消息,很完美噢。于是Alice迫不及待的开始了他第三次约会计划:
2.1.3、第三次约会
由于Alice想出了非对称加密这种数据加密方法,所以在非对称加密体系下,Alice和Bob便可以随意发送数据了。如下图:
因此,Alice使用Bob生成的公钥进行数据加密,当Bob接收到数据之后,使用自己的私钥来解密获取发送过来的数据,所以就算Eve截取到了数据,也由于没有私钥无法获取到数据,反之Bob想回复Alice也一样。这样不就解决了对称加密算法中的密钥交换问题了,也就解决了消息防窃听问题。这下Eve就不干了,他眼看这下通信加密的级别越来越难了,于是就想着既然无法获知私钥,那么就在公钥上做手脚。既然Bob的公钥是公开的,那么Eve是否也可以使用其公钥冒充Alice发送消息给Bob呢?Bob如何辨别这消息是不是Alice发送的呢?因此,非对称加密算法解决了防窃听,但是依然没有解决伪造和篡改问题,对于Bob来说,她依然无法分辨出她到底是在和谁发消息。
2.1.4、如何证明Alice就是Alice?
在生活中,我们如何去辨识张三就是张三呢?以前靠一些特征,比如外貌、习惯,但是这些都容易改变,于是就有了签字画押这种说法,因为签名(字迹)和手印(指纹)都是独有的,很难被伪造的。因此,计算机也在在加密机制中引入了类型的机制:
“使用一个独一无二的标志来标识某一个人或物,那么Alice只要有这个标志便可以证明自己就是自己了,正如我们现在的身份证。而计算机中称为 数字签名 ”。由于在非对称加密中,私钥是独一无二的,因此可以利用私钥来计算一个签名来标志该消息是谁发出去的。于是,Alice使用自己的私钥对消息内容计算出了一个数字签名,然后将签名和消息内容一起发过去,Bob接收到数据后使用Alice的公钥来验证这个签名是否正确,从而确认该消息是谁发的,这在计算机机制中称为验签。如下图:
因此,在这种加密机制下,Eve想再伪造便会在验签时出错。那Eve能否篡改内容并冒充Bob的签名呢?那就更不可了,数字签名是依赖私钥这唯一的标识的,而且内容改变后数字签名也会随之改变。所以只要私钥不泄漏,签名就不会被冒充。所以数字签名让接收者能鉴别消息的发送者,从而使得Eve无法篡改数据内容。
一般情况下,我们不会直接对数据本身直接计算数字签名,为什么呢?由于数字签名属于非对称加密,非对称加密的特点就是依赖于复杂的数学运算,包括大数乘法、大数模等等,耗时比较久。如果数据量大的时候计算数字签名将会比较耗时,所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做摘要。而摘要就像人的指纹一样,可以代表一个人,只要内容发生了改变,计算出来的摘要也应该变化 。同时,摘要最好是不可逆转的,一般使用开头提到的 MD5 作为 Hash 函数,MD5 输出的结果固定为128 位。
【补充】为什么「摘要」最好是不可逆转的?
因为既然 Alice 可以用 Bob 公钥解开签名,那么理论上其它人,比如 Eve 也可以使用 Bob 公钥解开签名拿到数据。所以我们最好对数据的摘要进行签名,这样,Eve 就算解开签名,拿到的也是摘要,如果摘要是不可逆转的,也就是无法从摘要反推出原文,也就达到了保密的作用。
2.1.5、如何进行数字签名验证
当Bob接收到了“Alice”的消息后,先会对数据进行解析得到消息内容本身和数据摘要的数字签名,然后分别对数据本身使用相同的HASH函数获取数据摘要,对于数字签名则使用公钥验证获取其中的摘要,比较两者的摘要即可进行验证。从而对数据进行了防止篡改和辨别发送者身份两次加密升级。如下图:
对称加密算法和非对称加密算法结合使用,解决了篡改、伪造、冒充以及窃听等问题,Alice和Bob是不是就不会受到Eve的搅乱了呢?回想整个加密过程的完善,我们似乎都在认为Eve只会去想着怎么破解密文,那么他是否想着去加密过程呢?换句话说就是 他是否会去更改发布出去的公钥,替换为自己的公钥,从而使发送者使用自己的公钥进行加密,然后Eve就可以使用自己的私钥进行解密获取数据。同时Alice发送给Bob的消息都会出现验签失败,被当成冒充者。如下图:
似乎问题又回到了原点?我们解决了数据内容在公钥正确情况下的数据加密,但是却没有做到公钥在交换过程中的“数据加密”(防篡改、防冒充),那么如何去验证公钥呢?可能有人会说使用数字签名?那如何使用公钥去验证呢?正如是先有鸡还是先有蛋呢?
所以既然我们无法从自身去获取标识证明自己就是自己,那么能否让别人去证明我就是我呢?比如派出所出具的身份证?计算机机制中称这为数字证书,用于证明公钥的。
【补充】
数字签名:辨明发送方身份,证明数据的完整性和安全性
数字证书:证明公钥的完整性和安全性,用于辨别对方身份
三、数字证书
数字证书[百度介绍]:数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。因此数字证书又称为数字标识。数字证书对网络用户在交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。
如果你理解了前面的数字签名,那么数字证书就是别人颁布的公钥的数字签名,通过引入数字证书从而保证公钥不被篡改,即便被篡改了也能识别出来。同时这里强调一下,这就是别人给我们颁布的,由于我们的公钥在没有公布出去之前,别人是无法验证的。所以我们只有找可行的第三方来帮我们签名,即使证书颁布机构(CA),证书颁布机构会将:证书的颁布机构、有效期、公钥、持有者(Subject)等信息用CA的私钥进行签名。如下图:
那 Eve 可不可以修改证书信息后自己重新计算一次证书的数字签名呢?也不行,因为证书的数字签名计算依赖于 CA 的私钥,Eve 是拿不到 CA 的私钥的。如果拿到了,说明什么?整个世界都是不可信的。
其实我们自己的电脑就自带有数字证书(Windows10 ,点击菜单栏搜索certmgr.msc),如下图:
可以看到,包含了证书持有人的公钥和证书的签名。另外,证书颁发机构是有层级关系的,下级 CA 的证书是需要由上级 CA 签名的。换句话说一定存在根证书颁发机构,那么他们的证书是由谁签名的呢?答案是自签,自己给自己认证。一个自签的根证书颁发机构:
那么为什么根证书可以自签,谁来保证其安全性呢?就如你把钱存在银行,你会担心银行会把钱卷跑吗?不会,因为银行是基于国家的信任,我们才信任银行,这就是信任链的基础。因此,我们正如信任国家一样,可以信任根证书。那还有个问题,如何保证根证书的可靠性?其实这个是操作系统和浏览器预装的,由微软、苹果等操作系统厂商来选择根证书。
在部署服务器和域名时,我们就需要设置数字证书。那么什么情况下浏览器会提示 “证书不可信” 呢?根据我们上面的分析,下面是可能的原因:
- 证书不是权威 CA 颁发:有些企业为了贪图便宜使用盗版的证书,没有经过 CA 认证。也就是无法使用浏览器内置 CA 公钥进行验证。
- 证书过期:证书里有一项就是有效期,一般就是一年或者两年的时间。如果证书过期,那么浏览器就会提示“证书不可信”
- 证书部署错误:可能是服务器证书部署出错,比如证书与域名不匹配,因为证书里有一项是持有人信息的。
标签:今生,加密,浅谈,Alice,Eve,公钥,数字证书,Bob,加密算法 来源: https://blog.csdn.net/weixin_43452424/article/details/111500625