公钥加密体系和https

来源:互联网 发布:香港买什么最划算 知乎 编辑:程序博客网 时间:2024/06/16 09:00

转自: http://blog.csdn.net/geurney/article/details/48384783


1. 对称密钥体系

对称密钥加密(Symmetric Encryption)又称私钥加密(Private-key Encryption),双方使用同一个密钥对信息进行加密解密,如DES(Data Encryption Standard)。
举例:
A 和 B 都有一本相同的字典,用该字典进行加密解密。

2. 非对称密钥体系

非对称密钥体系又称公开密钥体系(Public Key Infrastructure (PKI)),其核心是非对称密钥加密(Asymmetric Encryption)又称公开密钥加密(Public-key Encryption)。公开密钥加密包含两个密钥:公开密钥(public key)和私有密钥(private key)。公钥通常公开发布,而私钥则由用户私密保存。由公钥加密的信息,只能通过私钥解密;由私钥加密的信息,只能通过公钥解密。常用算法有RSA、Elgamal等,可以进行数字签名(私钥加密)和信息加密(公钥加密)。通俗来讲数字签名是来公开确认明文的来源和完整性,信息加密是对明文的保密。
信息加密/解密过程:
  • 发送者使用接收者的公钥对明文进行加密,并发送
  • 接受者使用密钥对明文进行解密
RSA算法:
  1. 挑两个质数:p和q。
  2. 计算乘积: n = p*q
  3. 计算欧拉函数(totient) :φ(n) = (p − 1)*(q − 1)
  4. 选择一个比φ(n)小的互质数,直接选一个质数即可:e
  5. 计算e关于φ(n)的乘法逆元(e*d % φ(n) = 1):d
公钥即(n,e),私钥即(d)。对于信息m:
加密:M = m^e mod n
解密:m = M^d mod n
举例如下:
  1. p = 61,q =  53
  2. n = 61 * 53 = 3233
  3. φ(n) = (61 - 1) * (53 - 1) = 3120
  4. e = 17
  5. 17 * 2753 mod 3120 = 1, d = 2753   
公钥(3233,17),私钥(2753)
假设信息 m = 65:
加密:2790 = 65^17 mod 3233
解密:65 = 2790^2753 mod 65
Elgamal算法存在安全安全隐患,实际上很少用。

SSH公钥认证原理

首先客户端要将自己的公钥保存到服务器上。
认证过程分为生成会话密钥(session key)和认证两个步骤。
会话密钥生成:
  1. 客户端请求连接服务器,服务器将公钥发送给客户端
  2. 服务器生成会话ID (session id),设为 p,发送给客户端
  3. 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
  4. 客户端将 r 用服务器公钥进行加密,结果发送给服务器。
  5. 服务器用私钥进行解密,获得 r
  6. 服务器进行 r xor p 的运算,获得 q
  7. 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密,并附上时间戳的MAC值等
认证:
  1. 客户端把自己的公钥发送给服务器,服务器查找是否存有该公钥
  2. 服务器生成随机数字符串x(challenge),并用客户端公钥加密后生成结果 S(x),发送给客户端
  3. 客户端使用私钥解密 S(x) 得到 x
  4. 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
  5. 服务器计算 q + x 的 md5 值 m(q+x)
  6. 客户端将 n(q+x) 发送给服务器
  7. 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功
参考资料

3. 数字指纹

数字指纹(Digit Fingerprint)又称信息摘要(Message Digest),是对明文通过不可逆哈希(MD5,SHA1,SHA2,HMAC)计算出的定长且唯一的字符串。明文不同则信息摘要也不同。数字指纹保证了明文的完整性。
MD5128 bitsSHA1160 bitsSHA2256/512 bits 等

4. 数字时间戳

数字时间戳(Digital Time-stamping)是由时间戳机构(Time Stamping Authority (TSA))发布的关于文件创建/修改时间的权威认定。
生成时间戳过程:
  1. 用户对于文件生成数字指纹
  2. 用户将数字指纹送到TSA
  3. TSA在数字指纹的基础上添加时间戳(日期和时间信息),并生成hash
  4. TSA对用私钥该hash值加密(数字签名)
  5. TSA将该签名和时间戳一起发送给用户
验证时间戳过程:
  1. 用户收到文件、时间戳和TSA签名
  2. 用户对文件生成数字指纹
  3. 用户在数字指纹的基础上添加附带的时间戳,并生成hash
  4. 用户用TSA的公钥对TSA签名进行解密,得到hash
  5. 用户比较这两个hash是否一致

5. 数字签名

数字签名(Digit Signature)是非对称密钥加密的一种实现,用来保证消息来源的可靠性。数字签名是在传输明文时附加的一段消息(签名)。这段消息要满足如下条件:
  1. 可以被确认:接收方可以确认该消息是由发送方生成。
  2. 不可被伪造:其他人不可以伪造出该消息。
  3. 不可抵赖:消息发送方不能抵赖自己生成的消息。
  4. 不可重用:明文不同则消息不同。
数字签名可以保证传输明文的以下特性:
  1. 完整性:明文没有被修改
  2. 真实性:明文是由发送方产生的
  3. 不可否认性:明文只可能是由发送方产生的
所以,一个验证通过的数字签名可以保证明文是由且仅由发送方生成,并且传输过程中明文没有被修改过。通常数字签名是基于数字指纹,而不是直接基于明文,以避免安全隐患。数字签名保证了明文的完整性,数字签名保证了明文的真实性和不可否认性。常用算法有RSA、DSA等。
数字签名的生成过程:
  1. 发送方对明文生成数字指纹
  2. 发送方用私钥加密该数字指纹生成数字签名
  3. 发送方将明文和数字签名发送
数字签名的验证过程:
  1. 接收方收到明文和数字签名
  2. 接收方利用公钥对签名进行解密,得到数字签名
  3. 接收方对明文生成数字指纹
  4. 发送方结合公钥、数字签名和数字指纹进行判断

RSA算法:

RSA 算法生成数字签名的基本过程是先对明文生成数字指纹,然后再对该数字指纹用私钥加密。
  • 数字签名过程:消息散列,DER数据编码,RSA私钥加密和字节串到位串的转换。
验证时接收方用相应的公钥解密得到数字指纹,将该数字指纹与自己对明文生成的数字指纹进行比较。
  • 数字签名的验证过程:位串到字节串的转换,RSA公钥解密,DER数据解码,得到解密后的散列值,最后与原始数据散列值进行比较
RSA 算法可以进行数字签名,也可对数据进行加密。

DSA算法:

DSA(Digital Signature Algorithm)是Elgamal Signature算法的变种,算法过程要复杂一些,它是利用公钥解密配合数字指纹等产生一个值,与数字签名的一个值比较。与RSA 算法不同的是,DSA 中数字指纹要参与运算不做直接比较,RSA 中数字指纹不参与运算直接比较。

由DSA 算法生成的密钥对只能用来做数字签名和验证,不能用于信息加密。

6. 数字信封

数字信封(Envelop)可以保证只有特定收信人才能阅读信的内容,也是信息加密的一种。
生成信封过程:
  1. 发送者使用一个对称密钥对明文进行加密
  2. 发送者使用接收方的公钥对该对称密钥进行加密,形成数字信封
  3. 发送者将加密后的明文和数字信封进行发送
打开信封过程:
  1. 接收方使用密钥将数字信封解密,得到对称密钥
  2. 接收方使用该对称密钥对明文进行解密,得到明文

7. 明文的加密与验证

0. 数字指纹:
对明文使用单向不可逆哈希,主要用于保证数据的完整性。
1. 对称密钥加密:
双方使用共同的密钥,加密解密速度快,但发送密钥会有安全隐患,需要有安全渠道发送密钥。主要用于信息加密。
2. 非对称密钥加密:
发送方使用接收方的公钥加密,接收方使用私钥解密。公钥可以公开发布,但是加密解密速度很慢。主要用于身份验证和对称密钥交换。
3. 数字信封:
综合对称密钥和非对称密钥两种方法,利用非对称密钥加密对称密钥,就可安全发送对称密钥。继而双方可以使用该对称密钥加密解密。
4. 数字签名:
保证消息内容是由发送方产生的,数据完整,任何人都可验证消息来源,看到消息内容。
5. 数字信封+数字签名:
保证只有特定收信人才能解密,明文加密解密速度快,并且收信人可以确定消息来源和消息完整。
发送方流程如下:
  1. 发送方对明文生成数字指纹
  2. 发送方用私钥对数字指纹进行加密,生成数字签名,添加到明文中
  3. 发送方用对称密钥对含有数字签名的明文加密
  4. 发送方用接收方公钥将对称密钥加密,生成数字信封
  5. 发送方将加密的含有数字签名的明文和加密后的对称密钥进行发送
接收方流程如下:
  1. 接收方用私钥对数字信封解密,得到对称密钥
  2. 接收方用对称密钥对明文解密,得到明文和数字签名
  3. 接收方用发送方的公钥解密数字签名,得到数字指纹
  4. 接收方对明文生成数字指纹
  5. 接收方将自己生成的数字指纹与解密得到的数字指纹对比

8. 数字证书

数字证书(Digital Certificate,Digital ID)是由数字证书认证机构(Certificate Authority)使用私钥签名而发布的,用来证实一个用户和其公钥对应关系的证书,。数字证书包含了:
  • 用户的身份信息
  • 用户的公钥
  • 证书发行机构的签名
自签名证书是由个人使用私钥签名而生成的。
数字证书验证过程
  1. 客户端向服务器发起请求
  2. 服务器向客户端发送数字证书
  3. 客户端通过CA的公钥验证数字证书的签名是否由CA发布
  4. 客户端生成随机字符串,发送给服务器
  5. 服务器用公钥对该字符串做数字签名,并发送给客户端
  6. 客户端用证书上的公钥验证该数字签名
  7. 服务器也可要求验证客户端的数字证书

9. SSL/TSL和https

SSL(Secure Sockets Layer)安全套接层是用于加密HTTP协议的,标准化之后称为TSL(Transport Layer Security)传输层安全协议。

HTTPS是HTTP over SSL/TSL,经过SSL/TSL加密后的HTTP协议。

SSL/TSL协议要经过数字证书验证和密钥协商等过程。在通信双方协商出一个对称密钥以后,他们用这个密钥来加密传输的数据。同时为每个消息生成时间戳,用此密钥为消息和相应的时间戳生成消息认证码(MAC)。也就是说,每次发送的内容包括 Encrypt(message) + MAC(message + timestamp)。这样可以:

1. 防止消息的篡改
所谓消息篡改就是有第三者插在通信双方之间,篡改往来的消息。由于消息是加密的,第三者不能获得消息的内容,但是他可以闭着眼睛瞎改。如果没有MAC的话,接受者就无法判断此消息是否被篡改过。

2. 防止消息重放
消息的重放是只第三者记录下通信双方的每一次发送的消息,虽然他不能获得消息的内容。但是它可以通过重新发送客户端或者服务端的信息来把自己装成是客户端或者服务端。如果在MAC里面加上了时间戳,消息接收方验证时间戳就可以阻止消息的重放攻击。

阅读全文
0 0
原创粉丝点击