网络安全

网络安全

2021-08-01
计算机网络, 信息安全

安全通信需要具有下列的特性

  • 机密性:仅有发送方和希望的接收方能够理解传输报文的内容。

  • 报文完整性:确保其通信内容在传输的过程中未被改变。

  • 端点鉴别:发送方和接收方都能证实通信过程所涉及的另一方。

  • 运行安全性:确保网络安全。

密码学 #

报文的最初形式称为明文

使用加密算法加密明文,生成的加密报文称为密文,加密算法往往是已知的。

密钥KA是一串数字或者字符,加密算法以密钥和明文报文m为输入,生成的密文为输出。用KA(m)表示。

解密算法使用密钥KB和密文作为输入,通过计算KB(KA(m))得到m

对称密钥密码体制 #

  1. 凯撒密码
    • 将明文报文中的每个字母用字母表中该字母后第k个字母进行替换,允许回绕。
    • 缺点:密钥值只有25个
  2. 单码代替密码
    • 使用字母表中的一个字母替换另一个字母。需要给定一个替换表,每个字母都有唯一一个的替换字母。
    • 缺点:由于是定向替换,当对密文进行统计分析,并且常见的两三个字母的组合(in、on、the)往往是一起出现,而且如果入侵者知道该密文具有某些可能的东西,破解该密文就不那么困难了。
  3. 多码代替密码
    • 使用多个单码来替换明文的字母,即从多个字母中选一个代替明文中的一个字母,如何选怎呢?需要指定一个次序,比如第一次选择多个字母的第一个,第二次选择多个字母的第二个,第三次选择多个字母的第二个(122),然后按照这个顺序循环多次,直到完成加密。

块密码:要加密的报文被处理为k比特的块。例如。如果k=64,字报文被划分为多个64比特的块,每块被独立加密。

密码块链接:使用块密码时,如果有多个明文块可能是相同的,将会产生相同的密文,解决方式是:发送方为第i个块生成一个随机的k比特数,通过将该数与第i个明文块异或,再将结果加密。该方法有一个问题,就是传输的时候需要两倍的带宽,块密码使用了一种称为密码块链接(Cipher Block Chaining,CBC)的技术,基本思想是只传输一个随机值,剩余的让发送方和接收方计算。流程如下:

  1. 发送方生成一个随机的k比特串,称为初始向量c(0),发送方以明文方式发送。

  2. 对于第一个块,发送方计算m(1)⊕c(0),然后加密得到c(1)=Ks(m(1)⊕c(0))。发送方向接收方发送加密块c(1)

  3. 对于第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。

  1. RSA
    • 生成RSA的公钥和私钥
      1. 选择两个大素数p和q,p和q越大,破解RSA越困难,执行加密和解密所用的时间也越长。推荐p和q的乘积为1024比特的数量级
      2. 计算n=pq,z=(p-1)(q-1)
      3. 选择一个小于n的数e,使得e和z没有公因数,e用来加密
      4. 求得一个数d使得ed-1可以被z整除,d将用来解密(ed mod z = 1)
      5. 外界可用的公钥KB+是一对数(n,e),私钥KB-是一对数(n,d)
    • 加密和解密过程
      1. A给B发送一个由整数m表示的比特组合,m<n。加密后的值c=me mod n,将密文c发送给B
      2. B通过计算获得m,m=cd mod n
  2. 会话密钥:RSA的指数运算极其耗时,在实际应用中,RSA通常与对称密钥结合使用。首先,A选择一个用于加密数据本身的密钥,这个密钥有时候称为会话密钥Ks。A通过公钥将Ks传输给B,B通过私钥解密后,就获取了Ks,然后使用Ks来传输数据。

报文完整性和数字签名 #

密码散列函数 #

密码散列函数的性质:找到任意两个不同的报文x和y使得H(x)=H(y),在计算上是不可能的。

算法:MD5(128位)、SHA-1(160位)

为了执行报文完整性,A和B需要共享秘密s,这个共享的秘密是个比特串,被称为鉴别密钥。使用这个共享秘密,报文完整性能够执行如下:

  1. A生成报文m,用s级联m生成m+s,并计算散列H(m+s)。H(m+s)被称为报文鉴别码(Message Authentication Code,MAC)。
  2. A将MAC附加到报文m上,生成扩展报文(m,H(m+s)),将该扩展报文发送给B。
  3. 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的一个稍加修改的版本