网络安全
2021-08-01
安全通信需要具有下列的特性
-
机密性:仅有发送方和希望的接收方能够理解传输报文的内容。
-
报文完整性:确保其通信内容在传输的过程中未被改变。
-
端点鉴别:发送方和接收方都能证实通信过程所涉及的另一方。
-
运行安全性:确保网络安全。
密码学 #
报文的最初形式称为明文
使用加密算法加密明文,生成的加密报文称为密文,加密算法往往是已知的。
密钥KA是一串数字或者字符,加密算法以密钥和明文报文m为输入,生成的密文为输出。用KA(m)表示。
解密算法使用密钥KB和密文作为输入,通过计算KB(KA(m))得到m
对称密钥密码体制 #
- 凯撒密码
- 将明文报文中的每个字母用字母表中该字母后第k个字母进行替换,允许回绕。
- 缺点:密钥值只有25个
- 单码代替密码
- 使用字母表中的一个字母替换另一个字母。需要给定一个替换表,每个字母都有唯一一个的替换字母。
- 缺点:由于是定向替换,当对密文进行统计分析,并且常见的两三个字母的组合(in、on、the)往往是一起出现,而且如果入侵者知道该密文具有某些可能的东西,破解该密文就不那么困难了。
- 多码代替密码
- 使用多个单码来替换明文的字母,即从多个字母中选一个代替明文中的一个字母,如何选怎呢?需要指定一个次序,比如第一次选择多个字母的第一个,第二次选择多个字母的第二个,第三次选择多个字母的第二个(122),然后按照这个顺序循环多次,直到完成加密。
块密码:要加密的报文被处理为k比特的块。例如。如果k=64,字报文被划分为多个64比特的块,每块被独立加密。
密码块链接:使用块密码时,如果有多个明文块可能是相同的,将会产生相同的密文,解决方式是:发送方为第i个块生成一个随机的k比特数,通过将该数与第i个明文块异或,再将结果加密。该方法有一个问题,就是传输的时候需要两倍的带宽,块密码使用了一种称为密码块链接(Cipher Block Chaining,CBC)的技术,基本思想是只传输一个随机值,剩余的让发送方和接收方计算。流程如下:
-
发送方生成一个随机的k比特串,称为初始向量c(0),发送方以明文方式发送。
-
对于第一个块,发送方计算m(1)⊕c(0),然后加密得到c(1)=Ks(m(1)⊕c(0))。发送方向接收方发送加密块c(1)
-
对于第i个块,发送方根据c(i)=Ks(m(1)⊕c(i-1))向接收方发送第i个密文块。
公开密钥加密 #
世界上任何人都都可以得到公钥(public key)KB+
只有主人知道的私钥(private key)KB-
假如A要和B通信,A首先要取得B的公钥,然后用这个公钥和一个众所周知的加密算法加密他要传给B的报文m,即KB+(m),B接到A的加密报文后,用其私钥和一个众所周知的解密算法解密报文,即计算KB-(KB+(m)),这样就得到了最初的明文m。此外还有KB-(KB+(m)) = KB+(KB-(m))=m。
- RSA
- 生成RSA的公钥和私钥
- 选择两个大素数p和q,p和q越大,破解RSA越困难,执行加密和解密所用的时间也越长。推荐p和q的乘积为1024比特的数量级
- 计算n=pq,z=(p-1)(q-1)
- 选择一个小于n的数e,使得e和z没有公因数,e用来加密
- 求得一个数d使得ed-1可以被z整除,d将用来解密(ed mod z = 1)
- 外界可用的公钥KB+是一对数(n,e),私钥KB-是一对数(n,d)
- 加密和解密过程
- A给B发送一个由整数m表示的比特组合,m<n。加密后的值c=me mod n,将密文c发送给B
- B通过计算获得m,m=cd mod n
- 生成RSA的公钥和私钥
- 会话密钥:RSA的指数运算极其耗时,在实际应用中,RSA通常与对称密钥结合使用。首先,A选择一个用于加密数据本身的密钥,这个密钥有时候称为会话密钥Ks。A通过公钥将Ks传输给B,B通过私钥解密后,就获取了Ks,然后使用Ks来传输数据。
报文完整性和数字签名 #
密码散列函数 #
密码散列函数的性质:找到任意两个不同的报文x和y使得H(x)=H(y),在计算上是不可能的。
算法:MD5(128位)、SHA-1(160位)
为了执行报文完整性,A和B需要共享秘密s,这个共享的秘密是个比特串,被称为鉴别密钥。使用这个共享秘密,报文完整性能够执行如下:
- A生成报文m,用s级联m生成m+s,并计算散列H(m+s)。H(m+s)被称为报文鉴别码(Message Authentication Code,MAC)。
- A将MAC附加到报文m上,生成扩展报文(m,H(m+s)),将该扩展报文发送给B。
- B收到扩展报文(m,h),由于知道s,计算出报文鉴别码H(m+s),如果其等于h,则证明一切正常。
数字签名 #
数字签名是B先使用散列函数对报文生成散列,使用私钥对散列进行加密(数字签名)。
A获取到了B的明文报文和已经数字签名的报文摘要,先使用B的公钥解密数字签名,得到一个散列结果,再使用散列函数获取报文的散列,如果这两个散列匹配,则可以确信报文的完整性和发送方。
公钥认证 #
证实一个公钥属于某个特定的实体。
将公钥与特定的实体绑定通常是由认证中心(Certification Authority,CA)完成的。CA证实了一个实体的真实身份;一旦CA验证了某个实体的身份,这个CA会生成一个将其身份和实体的公钥绑定起来的证书。
使TCP连接安全:SSL #
SSL:Secure Socket Layer,安全套接口协议
TLS:Transport Layer Security,TLS 运输层安全性,是SSL版本3的一个稍加修改的版本