安全通信具有下列所需要的的特性:
- 机密性(confidentiality)
希望入侵者无法理解报文内容,所以这必须要求发送方对报文做加密,接收方对数据做解谜 - 报文完整性(message integrity)
报文不能在传输的途中被恶意改动或者意外变动。 - 端点鉴别(end-point authentication)
明确身份,不允许冒充。 - 运行安全性(operational security)
词语解释:
明文:报文的最初形式 m
密文:经过加密算法加密的明文 KA(m)
加密密钥:KA
加密过程:KA(m)
解谜密钥:KB
解谜过程:KB(KA(m))=m
两种系统:
- 对称密钥系统(symmetric key system)
- 公开密钥系统(public key system)
公开密钥加密
K+:公钥
K-:私钥
加密:K+(m),其中K+的含义包括一个用于加密的算法和一个公开密钥
解密:K-(K+(m)),这里的K+同上:算法+钥匙
RSA
经典公钥加密算法
其过程:
1. 大素数p和q
2. 计算n=pq,z=(p-1)(q-1)
3. 选择e,e和z互素
4. 求一个d,使(ed)mod z =1
5. 得到:
K+:(n,e) 公钥
K-:(n,d) 私钥
加密报文:c=(m^e)mod ns
解密报文:m=(c^d)mod n
e=5,n=35,加密:
字母 | m:数字表示 | m^e | c=m^e mod n |
---|---|---|---|
l | 12 | 248832 | 17 |
o | 15 | 759375 | 15 |
v | 22 | 5153632 | 22 |
e | 5 | 3125 | 10 |
d=29,n=35,解密:
密文 | c^d | m=c^d mod n | 明文 |
---|---|---|---|
17 | 481968572106750915091........ | 12 | l |
15 | 12783.... | 15 | o |
22 | 85164... | 22 | v |
10 | 10000.... | 5 | e |
报文完整性
报文完整性确保了报文在发送途中没有被篡改,这涉及了几个概念:密码散列函数,数字签名
密码散列函数
通常用H(x)来表示,它的特性之一:
- 找到任意两个不同的报文x和y使H(x)=H(y),在计算上是不可能的
如果说发送报文是(m,H(m)),入侵方就不可能用其他报文替换该受保护的报文 - 接收方视角:收到报文(m,k),验证H(m)==k?,相同则证明没有被篡改。
作用:(m,H(m))可以保证发送报文不被篡改。
常见的密码散列函数:MD5,SHA-1
数字签名
上面如果单纯用密码散列函数会引发这样一个问题:
入侵者虽然不能篡改报文,但是可以整体替换整个报文发送(m',H(m')),这样仍然会使通信不安全,因此这种方式只保证了报文完整性,而不能端点鉴别。下面的数字签名解决了这个问题
K-(H(m)) ->实际上就是用发送方私钥加密的密码散列函数
发送方可发送(m,K-(H(m)))
接收方视角:
K+(k)==H(m)? 相同则证明没有被篡改,且因为是用发送方的公钥来解密,所以可以证明对方就是发送方。
那么引出下一个问题:如何可靠的获取发送方的公钥,如果这个不能保证,数字签名依然是不安全的。
证书
公钥证书CA
Bob从CA获取到的证书:CA-(B,KB+)
其中CA-是CA的私钥,B是Bob的实体信息,KB+是bob的公钥
接收方用CA+解密CA-(B,KB+),即可获得KB+
网友评论