加密技术和算法

TCP/IP 安全因素

  • 数据机密性
    • 保证数据密文传输,不能被中间人破解数据读取到真实内容
    • 常见的不机密通信:ftp、http、smtp、telnet。这些协议的通信过程中都是明文传输,无法保证数据的机密性。
  • 数据完整性
    • 数据是否被篡改:不能让入侵者使用假数据代替合法数据,否则数据将丧失完整性。
  • 身份验证
    • 验证身份的真实性,防止非法者冒充。

加密技术及算法

对称加密

加密(encryption)与解密(decryption)使用的是同样的密钥(secret key),密码学中叫对称加密算法。这种加密算法可以保证数据的机密性,如果想要解密,必须事先知道加密密钥,否则无法解密

算法

  • 常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。

优势

  • 算法公开、计算量小、加密速度快、加密效率高

缺点

  • 在数据传送前,发送方和接收方必须商定好密钥,然后使双方都必须能保存好密钥

  • 双方使用同样的密钥,安全性无法得到保证。若一方的密钥被泄露,那么加密信息就不安全

  • 每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一密钥,这使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担

单向加密

单向加密是一种不可逆的加密,在加密过程中不使用密钥,明文数据由系统加密算法处理成密文,并且密文无法解密。单向加密主要是提取数据的指纹及特征码,用于校验数据是否被修改,以此来保证数据的完整性

特征

  • 输入一样,输出必然一样

  • 雪崩效应:输入的一点改变,将引起结果的巨大改变,常用于防暴力破解

  • 定长输出:无论输入的长度多长,输出的结果都一样长

  • 不可逆:无法根据特征码还原出数据

  • 无法进行身份验证和保证数据的机密性

算法

  • MD4 信息摘要算法,由于有漏洞被淘汰
  • MD5 message-digest algorithm 5(信息-摘要算法),输出结果固定长度128bit
  • SHA1:secure hash algorithm(安全散列算法), 输出结果固定长度160bit
  • SHA192,SHA256,SHA384
  • CRC-32 不加密,只提供校验功能

基本实现过程

发送方为 Tom, 接收方为 Jerry

  • Tom 为了防止明文数据 Data 被其他人篡改,对数据使用单向加密算法,计算得到数据的特征码 A

  • Tom 将数据 Data 和特征码 A 一起发送给 Jerry

  • Jerry 收到数据 Data 和特征码 A ,对数据 Data 使用相同的单向加密算法计算出一个特征码 B

  • 如果特征码 A 和 B 相同,则说明数据没有被修改,是完整的;否则数据被篡改,丧失了完整性

遗留的安全问题

  • 如果 Tom 在传递数据 Data 给 Jerry 的过程中时,遭到中间人攻击,导致数据都被中间人截获

  • 中间人冒充 Tom,对数据 Data 也进行单向加密算法,计算出特征码 C,再将 Data 和特征码 C 一起发送给 Jerry

  • Jerry 收到数据后对其进行单向加密算法,此时计算出的特征码和 C 一样。虽然特征码是相同的,但这并不是真实的 Tom 发来的数据

  • 接收方最终无法判断数据的来源,陷入身份验证的困境,因此引入了密钥交换

密钥交换

  • 互联网密钥交换:Internet Key Exchange,简称IKE,基于Diffie-Hellman协议协商生成密码。

  • 实现双方使眼色交换密钥,而且密钥本身不在互联网上传播

IKE大致实现原理

  • Tom 和 Jerry 协商选择两个数字:P,g(大素数,生成器数)

  • Tom 在本机随机选择一个数字 x, Jerry 在本机随机选择一个数字 y

  • x 只有 Tom 知道,y 只有 Jerry 知道,且 x 和 y 不在互联网传输

  • Tom 将 g^x%P 计算结果 R-tom 发送给 Jerry

  • Jerry 将 g^y%P 计算结果 R-jerry 发送给 Tom

    • 互联网中的用户能看到的数字有四个:P,g,R-tom,R-jerry

    • 由于离散对数的原理,根据暴露的4个数字几乎不可能推算出 x 和 y 的值

  • Tom 对 R-jerry 取x次方:(g^y%P)^x=g^yx%P

  • Jerry 对 R-tom 取y次方:(g^x%P)^y=g^xy%P

  • 二者结果相同进而生成密钥,密钥交换问题解决

身份验证的安全隐患

Tom 和 Jerry 已经事先约定好数字后传输不需再次事先商定数字 P 和 g ,每次发送数据只需都进行一次计算,进行一次密钥交换即可,因此保证了身份验证。但是,如果 Tom 和 Jerry 从未见过面,第一次进行传输时,在商定数字的过程中遭到中间人攻击,则来源身份就可能被冒充,Jerry 又再次陷入身份验证的僵局。要完成用户的身份验证,就需要使用非对称加密

非对称加密

非对称加密也叫公钥加密。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以叫作非对称加密,也可以叫双钥加密。

密钥对

  • 私钥:private key,只能用与之对应的公钥解密,不公开

  • 公钥:public key,从私钥中抽出的一段特征,只能用与之对应的私钥解密,公开,所有人都能看到

  • Tom 用 Jerry 的公钥加密数据,传输后的数据只有 Jerry 用自己的私钥才能解开,以此保证了数据的机密性

  • Tom 用自己的私钥加密数据,私钥只有 Tom 自己知道,只要 Jerry 用 Tom 的公钥能解密数据就说明是由 Tom 加密的,以此保证了身份验证

密钥对的原则

  • 一个公钥对应一个私钥

  • 让大家都知道的是公钥,不告诉大家只有自己知道的是私钥

  • 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密

  • 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密

  • 非对称密钥的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的

基本工作原理

A 给 B 发送数据在通信前,双方事先产生一对用于自己加密和解密的公钥和私钥。A的私钥保密,公钥公开;B 的私钥保密,公钥发送给 A

  • 为了保证数据完整性,使用单向加密算法计算出数据的特征码。将特征码附着在数据后发送给 B

    • 中间人 C 获取数据后,使用 A 的公钥解密得到了特征码

    • 对数据进行篡改后,使用单向加密算法算出来的特征码无法还原成 A 计算出的特征码

  • 为了保证身份验证,防止特征码被中间人冒充,A 使用自己的私钥对特征码进行加密

    • 中间人 C 截获数据后(即便无任何修改),使用自己的私钥对 A 计算的特征码加密,冒充 A 将截获的数据及自己私钥加密后的特征码发送给 B

    • B 收到 C(冒充A)发来的数据,此时仍然认为发送方是 A

    • 接着 B 使用 A 的公钥却无法解密冒充者 C 私钥加密的特征码,此时 B 就已经知道数据并不是 A 发的那一份,而是假的

  • 为了保证数据的机密性,A 使用 B 的公钥对所有数据加密

B 在收到数据后,使用自己的私钥解密所有数据

  • 使用 A 的公钥成功解密得到了特征码,则验证了 A 的身份

    • 只有 A 私钥加密的数据发过来才能用 A 的公钥解密。因为 A 的私钥只有 A 一个人有

    • 使用单向加密算法计算数据的特征码,与发送过来解密后的特征码作比较,如果相同则说明数据完好无损

  • 用自己的私钥解密 A 使用 B 的公钥加密后发送过来的数据。其他人都无法解密,因为只有 B 才有自己的私钥,这就保证了数据的机密性

加密算法

RSA:可进行数据加密、解密、签名

1
2
3
4
5
6
7
8
9
10
11
openssl genrsa -out private.key 1024
# 生成一个私钥,输出到文件 private.key 中,密钥长度为1024bit

openssl rsa -in private.key -pubout -out pub.key
# 通过密钥文件 private.key 提取公钥,输出到文件 pub.key

echo -n "123456" | openssl rsautl -encrypt -inkey pub.key -pubin > encode.result
# 使用公钥加密信息

cat encode.result | openssl rsautl -decrypt -inkey private.key
# 使用私钥解密信息

DSA:只能用于数字签名及其认证。在 DSA 数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。DSA 算法和 RSA 不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,因此速度比 RSA 要快很多

1
2
3
4
5
6
7
8
9
10
11
12
13
openssl dsaparam -out dsaparam.pem 1024
openssl gendsa -out privkey.pem dsaparam.pem
# 生成一个密钥(私钥)

openssl dsa -in privkey.pem -out pubkey.pem -pubout
rm -fr dsaparam.pem
# 生成公钥

echo -n "123456" | openssl dgst -dss1 -sign privkey.pem > sign.result
# 使用私钥签名

echo -n "123456" | openssl dgst -dss1 -verify pubkey.pem -signature sign.result
# 使用公钥验证

特点

  • 非对称加密速度慢,比对称加密慢3个数量级1000倍(一个数量级:10倍)

  • 一般不用于加密大量数据,主要用于实现用户认证和帐号信息加密

下面是在 ssh 一个之前从未 ssh 过的主机时的提示信息,其中就有 RSA 相关的指纹信息提示:

1
2
3
4
5
[root@study ~]$ ssh 10.131.235.14
The authenticity of host '[10.131.235.14]:22 ([10.131.235.14]:22)' can't be established.
RSA key fingerprint is SHA256:+QKvM9/2/CtcpyCh4krEUVnO3pSzRs3PEHjp13+zlVc.
RSA key fingerprint is MD5:a6:29:fa:84:22:8e:17:8c:8a:53:af:4d:11:2a:59:3c.
Are you sure you want to continue connecting (yes/no)?

公钥验证

在非对称加密体系中,公钥用来加密信息,私钥用来数字签名

在互联网任何人都可以生成自己的(公钥,私钥)对,所以为了防止有人散布伪造的公钥骗取信任,就需要一个可靠的第三方机构来生成经过认证的(公钥,私钥)对。双方在通信时都出示证件,这个证件由某个权威机构发放,只要验证证件内的有效信息就可以验证对方的身份。

目前,世界上最主要的数字服务认证商是位于美国加州的 Verisign 公司,它的主要业务就是分发 RSA 数字证书。为了防止在发证的时候出现中间人现欺骗,一些操作系统在安装时就已经将一些权威的发证机构的证书放在系统里了

数字证书认证

  • CA(Certficate Authority),数字证书认证中心,是整个网上电子交易安全的关键环节。它主要负责产生、分配并管理所有参与网上交易的实体所需的身份认证数字证书

  • PKI:Public Key Infrastructure(公钥基础设施)。提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书

  • 为了验证公钥发送方的合法性,因此有了证书颁发机构(要自己事先为自己颁发一个证书)

  • 证书的格式:X509,PKCS

  • 证书吊销列表:CRL(Certificate Revocation List)

基本的三重验证

假设 A 和 B 彼此间是可靠的彼此认证的通信。即 A 和 B 通过 CA 机构颁发的证书彼此认可对方的公钥。

A 给 B 发送数据在通信前,双方事先产生一对用于自己加密和解密的公钥和私钥。A的私钥保密,公钥公开;B 的私钥保密,公钥发送给 A

  • A 和 B 基于 DH 协议,互相协商后生成两个数字(P,g)

  • 为了保证数据的完整性,使用单向加密算法得到数据的特征码,将特征码附着在数据后

  • 为了保证身份验证,防止特征码被中间人冒充,A 使用自己的私钥对特征码进行加密

  • 为了保证数据的机密性,A 在本机生成一段随机数字(x)当作解开所有数据的对称密码,对数据加密,这个密码发送前只有 A 知道

  • A 使用 B 的公钥将对称密码加密,将加密的数据、对称密码发送给 B

B收到数据后

  • 使用自己的私钥解密数据,得到了 A 的对称密码和对称密码加密的数据。使用 A 的对称密码解密数据。保证了数据机密性。中间人即便获得数据也无法解开对称密码,因为对称密码使用的是B的公钥加密,只有 B 的私钥才能解开,对称密码加密后的数据及特征码也无从得知

  • 接着 B 使用 A 的公钥解密得到(A 私钥加密的)特征码。如果能解密成功,则 A 的身份得到验证

  • 使用单向加密算法计算数据的特征码与解密得到的特征码作比较,如果相同则说明数据完好无损

有钱任性,请我吃包辣条
0%