网络安全专题:数据加密技术、免密登录技术、数字签名、数字证书、安全套接字 SSL 与 HTTPS 协议
网络安全专题:数据加密技术、免密登录技术、数字签名、数字证书、安全套接字 SSL 与 HTTPS 协议
(一)数据加密技术 —— 对称加密与非对称加密
数据加密技术(Data Encryption Technology)是指通过对数据进行加密,使得只有授权的用户才能解密。
对称加密与非对称加密是两种常见的加密技术。
1. 对称加密
对称加密:加密和解密使用同一个密钥,称为对称密钥。常见的对称加密算法有 DES、AES 等。
优点:
- 加密、解密速度快,效率高。
缺点:
- 密钥不能在网络上明文传输。如果对称密钥在网络上以明文形式传输,攻击者既可以截获对称密钥,又可以截获数据,从而能够解密双方传输的数据。因此,发送方和接收方之间必须事先商定好对称密钥,还不能通过网络。这个代价将会非常大。
2. 非对称加密
非对称加密:加密和解密使用不同的密钥,称为密钥对,密钥对由公钥和私钥组成。
- 公钥:公开,任何人都可以获得。
- 私钥:保密,只有拥有私钥的用户才能解密。
常见的非对称加密算法有 RSA、ECC 等。非对称加密算法生成非对称密钥对时,会首先生成一串随机序列,然后使用一个函数通过这个随机序列生成两个序列,这两个序列就形成了一对密钥对。
密钥对的性质:
- 如果某段数据使用其中一个序列加密,使用另一个序列就可以解密这段数据。
- 无法通过其中一个序列推导出另一个序列。
非对称加密的特点:
- 公钥加密,私钥解密;
- 私钥加密,公钥解密。
公钥加密,私钥解密模式是最常见的使用模式:
- 接收方事先生成一对非对称密钥对,并将私钥留存、将公钥发布(以明文形式)。
- 传输数据时,发送方使用公钥对数据进行加密,接收方可以通过私钥解密这些数据。
- 尽管公钥被明文公布给了所有人,但只有接收方拥有私钥。
- 即使数据在传输过程中被攻击者截获,攻击者没有私钥也无法解密数据。
另外,免密登录技术和数字签名等场景也使用到了非对称加密技术。
3. 对称加密与非对称加密配合完成数据文件的加密和解密
上面提到,非对称加密技术保证了数据加密、解密环节的安全性。然而,使用非对称密钥对加密、解密数据文件,效率远不如对称密钥。当数据文件很大时,这种效率差距更明显。为了兼顾效率(对称秘钥的特点)和安全性(非对称秘钥的特点),我们可以采取下面的加密、解密策略。
加密过程:
- 发送方生成一个较短的随机序列作为对称秘钥。
- 将发送的数据使用对称密钥加密。
- 将对称密钥使用(非对称密钥的)公钥加密。
- 将加密后的对称密钥和加密后的数据文件发送给接收方。
解密过程:
- 接收方使用(非对称密钥的)私钥解密对称密钥。
- 使用对称密钥解密数据文件。
如果数据包被攻击者截获,攻击者没有私钥,无法破解对称密钥,也就无法破解数据文件了。
(二)免密登录技术
免密登录技术的底层是非对称加密技术。
用户注册时不提交密码,而是生成一对非对称密钥,并将用户名和公钥传给服务器,存入用户信息列表。私钥客户端自己留存。
整个登录过程称为“挑战——响应机制”:
- 客户端和服务器建立连接请求后(通常是 TCP 22 端口),向服务器发送用户名。
- 服务器会从用户信息列表中找到对应的公钥,然后生成一串随机序列,称为“挑战”。
- 服务器使用公钥加密“挑战”,并传输给客户端,等待“响应”。
- 客户端收到加密后的“挑战”后,使用私钥解密,得到原始的“挑战”序列并发回服务器。
- 服务器收到“响应”后,比对“挑战”,如果完全相同就登录成功。
有了这套机制,用户在登录服务器时就无需每次都要输入密码了。
(三)数字签名
1. 什么是数字签名?
数字签名是一种消息认证技术,它可以证明消息发送者的身份。
在物理世界中,我们经常要进行签名。例如:
- 签署一份合同时,双方需要在合同上签名,这样合同就具备了法律效力。
- 如果其中一方没有履行合同,另一方就可以拿着签了名的合同追究法律责任。
- 这份合同双方都签了名,违约方就不能抵赖了。
数字签名也是一样的作用。例如:
- 软件开发者开发一款软件后,必须保证这个软件不会对用户造成破坏。
- 为了防止攻击者向程序中植入病毒,开发者会给程序添加一个数字签名,代表程序是自己写的。
- 如果程序被篡改,数字签名会立即失效,用户安装时将收到警告。
- 如果数字签名没有失效,也就说明程序没被篡改,这时候再出现问题作者就很难抵赖了。
使用签名(数字签名)时,必须注意以下两点:
- 经过签名的数据不能被篡改。物理世界中,经过签名的文件或合同如果被篡改了,就不能代表双方的共识,如果对于篡改行为没有合理的防御机制,违约方就可以篡改合同并抵赖。
- 因此,数字签名应当有防止篡改的机制,一经篡改数字签名就失效。
- 签名必须保证签名者本人签署,不能伪造。物理世界中经常发生伪造签名的情况,例如找领导签名,领导不在场就由他人代签。这种行为违反了签名的原则,违约后可以以不知情为由抵赖。
- 因此,数字签名应当有防止冒充的机制,必须保证签名由本人签署而不能伪造。
2. 数字签名的实现原理是哈希散列和非对称加密
以开发者给软件程序签署数字签名为例,讲解数字签名的实现原理。
签名过程:
- 软件开发者写好程序后,使用哈希函数,通过程序文件(任意长度)计算出一个哈希值(长度固定),叫做这个文件的指纹,或摘要。
- 使用非对称密钥对的私钥,加密摘要,形成数字签名。
- 将数据文件、加密过的摘要和非对称密钥对的公钥打包起来并发布,供使用者安装并验证。
验证过程:
- 程序使用者安装程序时,使用收到的公钥,解密摘要。
- 使用相同的哈希函数,通过程序文件计算出一个摘要。
- 将两份摘要进行比对,如果完全相同,数字签名有效,反之,失效。
3. 数字签名必须由值得信任的机构签发,且具备防伪标识
分析上述流程:
- 数字签名可以防止文件被其他人篡改。
- 程序文件在网络中以明文传输,可能被攻击者截获,但攻击者无法冒充作者篡改程序,因为程序一经篡改,数字签名就会失效。
- 然而,你使用的公钥,一定就是原作者提供的吗?
- 假如攻击者自己生成了一对非对称密钥对,篡改程序文件并计算摘要,用自己的私钥加密摘要,并将篡改后的程序文件、摘要和公钥打包发布,用户安装后,使用攻击者的公钥解密摘要,也会比对成功,数字签名没有失效。
- 此时用户可能认为这个签名是原作者的,但程序已被植入病毒。
- 数字签名谁都可以生成,无法辨别真伪,所以数字签名不可信。
- 这就好比,如果身份证无法辨别真伪,那么在地摊上办的假身份证和在公安局办的真身份证将毫无区别。
- 假如原作者自己向程序中植入病毒,用户安装运行后造成损失,而数字签名又无法辨别真伪,原作者将会抵赖,将责任推卸给莫须有的攻击者。
- 结论:数字签名必须由值得信任的机构签发,且具备防伪标识。
- 身份证起作用的前提是身份证必须由公安部门签发,且具备防伪标识,没有防伪标识的身份证不可信。
- 数字签名起作用的前提是数字签名必须由值得信任的机构签发,且具备防伪标识,没有防伪标识的数字签名不可信。
(四)数字证书
前文提到,未经值得信任的机构签发的数字签名,没有防伪标识,是不可信的。
因此,合理的机制是:作者向值得信任的机构申请数字证书,值得信任的机构验证作者的相关信息后,作者就可以使用数字证书处理数字签名,从而使数字签名具备防伪标识。
这些值得信任的机构称作证书颁发机构(CA)。每一个证书颁发机构成立之初都生成了一对非对称密钥对(下称 CA),并将 CA 的公钥发布,自己留存 CA 的私钥:这个 CA 的私钥是整个机制的基础,绝对不能泄露。
签发过程:
- 证书颁发机构会生成一对非对称密钥对(下称 A)发给作者,用来做文件的数字签名。
- 证书颁发机构还应当使用哈希函数计算出 A 的公钥的摘要,并使用 CA 的私钥加密这个摘要,也发给作者。
作者发布文件时,会打包以下内容:
- 初始的文件。
- 使用 A 的私钥加密数据文件的摘要,形成的数字签名。
- A 的公钥。
- 使用 CA 的私钥加密的 A 的公钥的摘要。
用户接收文件时:
- 查到 CA 的公钥,使用 CA 的公钥破解 A 的公钥的摘要。
- 查到 A 的公钥是否已经吊销,如果没有吊销进行下一步。
- 使用哈希函数通过作者提供的 A 的公钥计算出摘要。
- 比对两个摘要是否一致,如果一致,说明数字签名是可信的。
A 的公钥验证通过后,用户就可以放心使用 A 的公钥验证数据文件是否被篡改了。
- 如果数据文件没有被篡改,用户就可以放心使用这个文件了,如果再出现问题,原作者就抵赖不掉了。
- 如果数据文件被篡改,用户将放弃使用这个文件,并联系原作者重新提供。
对于作者,如果数字证书不慎泄露,则需要第一时间向证书颁发机构“挂失”,并重新申请证书。此时,证书颁发机构会吊销作者的旧证书,并公示在吊销证书列表中。由于攻击者可能已经使用这份泄露的数字证书冒充作者给用户发恶意文件,考虑最坏的情况,用户在接收文件时就必须得查数字证书是否已经在证书颁发机构的吊销列表中。
(五)安全套接字 SSL 与 HTTPS 协议
1. 什么是安全套接字?
安全套接字是 Internet 上使用的一种安全协议,工作在传输层和应用层之间。

在发送方:
- 安全套接字接收应用层数据,如 HTTP 报文。
- 安全套接字对数据进行加密,使用的加密技术是非对称加密。
- 安全套接字将加了密的数据送往 TCP 套接字。
在接收方:
- 安全套接字从 TCP 套接字中读取数据。
- 安全套接字对数据进行解密,还原成 HTTP 报文。
- 安全套接字将 HTTP 报文交给应用层。
2. 为什么要使用安全套接字?
- 用户访问网站时使用 HTTP 协议传输数据,HTTP 本身不具备加密功能,数据会被明文放在 HTTP 报文中。
- 如果传输的数据中包含了账号、密码等敏感信息,一旦数据报文被攻击者捕获,用户信息将泄露,造成损失。
- 因此,一旦涉及到关键信息的传输,我们就要使用安全套接字进行加密处理。
我们访问网站时:
- 不使用安全套接字加密时,使用 HTTP 协议。
- 使用安全套接字加密时,使用 HTTPS 协议。后面的“S”代表“Security”,即安全的意思。
- HTTP 默认使用 TCP 80 端口;HTTPS 默认使用 TCP 443 端口。
3. 安全套接字实现过程
当客户端和服务器建立连接后,双方首先协商对称密钥:
- 服务器将使用了证书颁发机构的数字证书签名的公钥发送给客户端。
- 客户端验证公钥合法性后,产生一串随机序列作为对称密钥。
- 客户端使用服务器提供的公钥加密这个对称密钥,并发送给服务器。
- 服务器使用私钥解密对称密钥。
至此,双方成功协商对称密钥,后续将使用这个对称密钥对数据进行加密解密。
4. 安全套接字的其他功能:服务器鉴别与客户端鉴别
如果用户要求访问的网站必须合法,而不是攻击者伪造的网站,用户可以要求网站出示数字证书,并使用安全套接字验证;
同时,如果网站要求来访的用户必须合法,也可以要求用户出示数字证书,并使用安全套接字验证。
更多推荐
所有评论(0)