密码学基础
明文: 明文指的是未被加密过的原始数据。
密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
加密算法分为对称加密、非对称加密和Hash
加密算法。
对称加密:对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
其加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下:密文 + 解密算法 + 私钥 => 明文
对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
非对称加密:非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文
, 密文 + 解密算法 + 私钥 => 明文
被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文
, 密文 + 解密算法 + 公钥 => 明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。
Hash
加密:Hash
算法是一种单向密码体制,即只有加密过程,没有解密过程。
HTTPS
HTTP
协议存在三个安全缺陷:
- 通信使用明文,内容可能会被窃听;
- 不验证通信方的身份,因此有可能遭遇伪装;
- 不对数据进行完整性检测,因此数据有可能已遭篡改;
HTTPS
将SSL
作为HTTP
应用层的子层,通过SSL
协议来加强安全性,实现HTTP
数据的安全传输。其中上层的HTTP
协议只负责提供或接收HTTP
数据包,而SSL
协议负责数据的加密解密工作。
HTTPS
实现了以下安全特征:
-
客户端与服务器的双向身份认证;
客户端与服务器在传输
HTTPS
数据之前需要对双方的身份进行认证,认证过程通过交换各自的数字证书的方式实现。 -
传输数据的机密性;
通信的以下部分会被加密保护:
- 浏览器请求的服务器端文档的URL;
- 浏览器请求的服务器端文档内容;
- 用户在浏览器端填写的表单内容;
- 在浏览器和服务器之间传递的
Cookie
; HTTP
消息头。
-
传输数据的完整性检验。
HTTPS
通过消息验证码的方式对传输数据进行数字签名,从而实现了数据的完整性检验。
HTTPS
为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
非对称加密的过程:
- 客户端给出协议版本号、一个客户端随机数
A
以及客户端支持的加密方式; - 服务端确认双方使用的加密方式,并给出数字证书、一个服务器生成的随机数
B
; - 客户端确认数字证书有效,生成一个新的随机数
C
(Pre-master-secret),使用证书中的公钥对C加密,发送给服务端,服务端使用自己的私钥解密出C
; - 客户端和服务器根据约定的加密方法,使用三个随机数
ABC
,生成对话秘钥,之后的通信都用这个对话秘钥进行加密。
HTTP
和 HTTPS
的区别如下:
HTTPS
协议需要到CA申请证书,大多数情况下需要一定费用;HTTP
是超文本传输协议,信息采用明文传输,HTTPS
则是具有安全性SSL
加密传输协议;HTTP
和HTTPS
端口号不一样,HTTP
是80
端口,HTTPS
是443
端口;HTTP
连接是无状态的,而HTTPS
采用HTTP+SSL
构建可进行加密传输、身份认证的网络协议,更安全;HTTP
协议建立连接的过程比HTTPS
协议快。因为HTTPS
除了TCP
三次握手,还要经过SSL
握手。