文章目录
- [6. Network Security(网络安全)](#6. Network Security(网络安全))
-
- [6.1 What is network security(什么是网络安全)](#6.1 What is network security(什么是网络安全))
- [6.2 Principles of cryptography(密码学的原则)](#6.2 Principles of cryptography(密码学的原则))
-
- [6.2.1 Breaking an encryption scheme(破解加密方案)](#6.2.1 Breaking an encryption scheme(破解加密方案))
- [6.2.2 Symmetric key cryptography(对称密钥加密)](#6.2.2 Symmetric key cryptography(对称密钥加密))
-
- [6.2.2.1 DES(Data Encryption Standard,数据加密标准)](#6.2.2.1 DES(Data Encryption Standard,数据加密标准))
- [6.2.2.2 AES(Advanced Encryption Standard,高级加密标准)](#6.2.2.2 AES(Advanced Encryption Standard,高级加密标准))
- [6.2.3 Public key cryptography(公共密钥加密)](#6.2.3 Public key cryptography(公共密钥加密))
-
- [6.2.3.1 RSA(Rivest, Shamir, Adleman)](#6.2.3.1 RSA(Rivest, Shamir, Adleman))
- [6.3 Authentication and Message integrity(认证和信息完整性)](#6.3 Authentication and Message integrity(认证和信息完整性))
-
- [6.3.1 Authentication(认证)](#6.3.1 Authentication(认证))
- [6.3.2 Message integrity(信息完整性)](#6.3.2 Message integrity(信息完整性))
-
- [6.3.2.1 Digital signatures(数字签名)](#6.3.2.1 Digital signatures(数字签名))
- [6.3.2.2 Message digests(信息摘要)](#6.3.2.2 Message digests(信息摘要))
- [6.4 Securing e-mail](#6.4 Securing e-mail)
- [6.5 Securing TCP connections:SSL](#6.5 Securing TCP connections:SSL)
-
- [6.5.1 Toy SSL(简单安全套接层)](#6.5.1 Toy SSL(简单安全套接层))
-
- [6.5.1.1 Handshake(握手阶段)](#6.5.1.1 Handshake(握手阶段))
- [6.5.1.2 Key derivation(密钥派生阶段)](#6.5.1.2 Key derivation(密钥派生阶段))
- [6.5.1.3 Data transfer(数据传输阶段)](#6.5.1.3 Data transfer(数据传输阶段))
- [6.5.1.4 Connection closure(连接关闭阶段)](#6.5.1.4 Connection closure(连接关闭阶段))
- [6.5.1.5 Summary](#6.5.1.5 Summary)
- [6.5.2 Real SSL](#6.5.2 Real SSL)
- [6.6 Network layer security:IPsec](#6.6 Network layer security:IPsec)
-
- [6.6.1 Virtual Private Networks(VPNs,虚拟专用网络)](#6.6.1 Virtual Private Networks(VPNs,虚拟专用网络))
- [6.6.2 IPsec services(IPsec的服务)](#6.6.2 IPsec services(IPsec的服务))
- [6.6.3 IPsec mode(IPsec的工作模式)](#6.6.3 IPsec mode(IPsec的工作模式))
-
- [6.6.3.1 Transport mode(传输模式)](#6.6.3.1 Transport mode(传输模式))
- [6.6.3.2 Tunneling mode(隧道模式)](#6.6.3.2 Tunneling mode(隧道模式))
- [6.6.4 Security associations(SAs,安全关联)](#6.6.4 Security associations(SAs,安全关联))
- [6.6.5 IPsec datagram](#6.6.5 IPsec datagram)
- [6.6.6 Summary](#6.6.6 Summary)
- [6.7 Operational security:firewalls and IDS(运行安全:防火墙和入侵检测系统IDS)](#6.7 Operational security:firewalls and IDS(运行安全:防火墙和入侵检测系统IDS))
-
- [6.7.1 Firewalls(防火墙)](#6.7.1 Firewalls(防火墙))
-
- [6.7.1.1 Stateless packet filters(无状态数据包过滤器)](#6.7.1.1 Stateless packet filters(无状态数据包过滤器))
- [6.7.1.2 Stateful packet filters(有状态数据包过滤器)](#6.7.1.2 Stateful packet filters(有状态数据包过滤器))
- [6.7.1.3 Application gateways(应用程序网关)](#6.7.1.3 Application gateways(应用程序网关))
- [6.7.1.4 Limitations of firewalls, gateways](#6.7.1.4 Limitations of firewalls, gateways)
- [6.7.2 Intrusion detection systems(入侵检测系统)](#6.7.2 Intrusion detection systems(入侵检测系统))
6. Network Security(网络安全)
6.1 What is network security(什么是网络安全)
网络安全涉及以下几个重要概念:
1.Confidentiality(保密性):在通信过程中,只有发送方和预期的接收方能够理解消息的内容。为了实现保密性,发送方会对消息进行加密,而接收方则会对消息进行解密,从而确保只有授权的人能够理解消息内容。
2.Authentication(身份验证):发送方和接收方希望确认彼此的身份,以确保通信的安全性。
3.Message integrity(信息完整性):发送方和接收方希望确保消息在未经检测的情况下在传输过程中或之后没有被篡改。
4.Access and availability(访问和可用性):网络服务必须对用户可访问和可用。
在网络安全的世界中经常有三个角色:Alice,Bob,Trudy。
Alice和Bob:通常被描述为通信双方,有时也被描述为恋人。他们是网络中合法的通信双方,他们希望能够安全地进行通信,保护通信内容的保密性、完整性和身份验证。
Trudy:通常被描述为一个intruder(入侵者)或者恶意的第三方,可能会拦截、删除或者篡改Alice和Bob之间的通信。
如图所示。
在实际应用中,Bob和Alice可以代表任何需要进行安全通信的实体,包括但不限于以下情况:
Web浏览器/服务器进行电子交易(例如在线购物):Bob和Alice可以分别代表购物者和商家,他们希望在进行在线交易时能够安全地传输支付信息和订单详情。
在线银行客户端/服务器:在进行在线银行业务时,Bob和Alice可以分别代表银行客户和银行服务器,他们希望能够安全地进行资金转移和账户查询等操作。
DNS服务器:在域名解析过程中,Bob和Alice可以分别代表客户端和DNS服务器,他们希望能够确保域名解析的安全性和准确性。
交换路由表更新的路由器:在网络路由过程中,Bob和Alice可以分别代表不同的路由器,他们希望能够安全地交换路由信息,防止被篡改或者伪造。
网络安全中"坏人"可能采取的行动有很多,例如:
Eavesdrop(窃听):恶意第三方拦截并监听通信双方之间的消息。
Insert(插入):恶意第三方可以在通信连接中主动插入虚假的消息或数据,从而破坏通信的完整性和真实性。
Impersonation(冒充):恶意第三方可以伪造通信中的源地址或其他字段,以假冒通信的合法参与者,从而进行欺骗或攻击。
Hijacking(劫持):指的是恶意第三方试图"接管"正在进行的通信连接,通过移除发送方或接收方,将自己插入到通信中,从而获取通信的控制权。
Denial of service(拒绝服务):恶意第三方可以通过各种手段,例如资源过载,来阻止其他用户使用特定的网络服务,从而导致服务不可用或无法正常使用。
6.2 Principles of cryptography(密码学的原则)
如图所示。
在密码学中,我们将 K A K_A KA当作Alice的加密钥匙, K B K_B KB当作Bob的解密钥匙。
plaintext(明文)经过Alice使用 K A K_A KA和encryption algorithm(加密算法)从而加密成ciphertext(密文),然后在Bob这使用 K B K_B KB和decryption(解密算法)从而得到plaintext(明文)。
我们一般用 m m m表示plaintext message(明文信息)。
K A ( m ) K_A(m) KA(m)表示用 K A K_A KA加密的ciphertext(密文)。
所以 m = K B ( K A ( m ) ) m=K_B(K_A(m)) m=KB(KA(m))
6.2.1 Breaking an encryption scheme(破解加密方案)
当考虑Trudy破解Bob和Alice之间的加密方案的难易程度时,可以根据入侵者所拥有的信息分为三种不同的情况。
1.Cipher-text only attack(唯密文攻击):Trudy拥有密文并对其进行分析。她可以使用两种方法来尝试破解加密算法:
Brute force(暴力破解):通过尝试所有可能的密钥来解密密文。
Statistical analysis(统计分析):通过分析密文的统计特征和模式来推断可能的密钥或明文内容。
2.Known-plaintext attack(已知明文攻击):Trudy拥有与密文对应的明文。例如,在单字母替换密码中,Trudy可以通过已知的明文和密文对来确定字母的对应关系,从而破解密码。
3.Choosen-plaintext attack(选择明文攻击):Trudy可以选择明文消息并获取其对应的密文形式。这使得攻击者能够分析加密算法的行为和特性,从而推断出密钥或者加密过程的信息。
6.2.2 Symmetric key cryptography(对称密钥加密)
Bob和Alice共享同一个(symmetric对称的)密钥: K S K_S KS
例如,密钥可以是mono alphabetic substitution cipher(单字母替换密码)中的替换模式,这种加密技术的每个字母被另一个字母替换。
那Bob和Alice如何就密钥值达成一致呢?
这是一个关键问题,因为在对称加密中,安全地共享密钥是一个挑战。如果密钥在传输过程中被截获,那么加密的安全性就会受到威胁。
Caesar cipher(凯撒密码)是一种简单的替换加密方法,它通过对明文中的每个字母进行位移来生成密文。具体步骤如下:
对于英文文本,凯撒密码会将每个明文种的字母按照字母表顺序向后移动k个位置(allowing wraparound,允许环绕),其中k是一个固定的整数(密钥)。
举例来说,如果k=3,那么明文中的字母a将被替换为字母d,b将被替换为e,依此类推。这样就生成了对应的密文。
这种简单加密方案就是substitution cipher(替代密码),具体来说Caesar cipher(凯撒密码)是monoalphabetic cipher(单字母替代密码)。
在这种加密方案中,每个字母都被替换为另一个字母,而且加密密钥是一个从26个字母到26个字母的映射。也就是说,加密密钥是一个将明文字母映射到密文字母的规则。
如下图所示。
一个更加sophisticated(复杂的)加密方式便是polyalphabetic substitution cipher(多表替换密码)。
多表替换密码使用了多个替换密码表( M 1 , M 2 , . . . M n M_1,M_2,...M_n M1,M2,...Mn)以及循环模式来对明文进行加密。
具体来说,加密密钥包含了 n n n个替代密码表以及一个循环模式。对于明文里的每个字符,都会按照循环模式选择下一个替代密码表来进行替代。
举例来说,如果 n = 4 n=4 n=4,循环模式是 M 1 . M 3 , M 4 , M 3 , M 2 M_1.M_3,M_4,M_3,M_2 M1.M3,M4,M3,M2,对于明文"dog",加密过程是d 用 M 1 M_1 M1,o 用 M 3 M_3 M3, g 用 M 4 M_4 M4。
6.2.2.1 DES(Data Encryption Standard,数据加密标准)
对称密钥加密算法常用的算法是DES(Data Encryption Standard,数据加密标准)算法。
在加密过程开始时,输入的64位数据会经过一个初始permutation(置换),以打乱数据位的顺序。
DES算法包含16个相同的rounds(轮次),每个轮次都应用相同的加密函数。每个轮次使用不同的48位密钥( K 1 K_1 K1到 K 16 K_{16} K16),56位密钥被分成16个48位的子密钥,每个子密钥用于一个轮次。而且每一轮数据会进行左右置换,从而形成新的左右两部分。
在16个轮次加密结束后,数据会进行一个最终置换,从而恢复数据位的原始位置。
具体过程如下图所示。

DES算法作为美国国家标准技术研究所(NIST)于1993年发布的加密标准。DES使用56位密钥和64位明文输入,采用分组密码和密码块链接模式。由于计算能力的提升,DES的56位密钥长度已经不足以提供足够的安全性。在DES挑战中,人们成功地在不到一天的时间内通过穷举法破解了一个使用56位密钥加密的短语,这凸显了DES的安全性不足。
为了加强DES的安全性,人们提出了3DES(Triple DES)算法。3DES使用了三个不同的密钥对数据进行三次加密,大大提高了安全性。
6.2.2.2 AES(Advanced Encryption Standard,高级加密标准)
2001年11月取代了DES(数据加密标准)。
AES算法使用128位的数据块进行加密处理,并支持使用128位、192位或256位的密钥。
使用暴力破解的电脑对DES破解需要花费1s的情况下,破解AES需要花费149万亿年。
6.2.3 Public key cryptography(公共密钥加密)
对称密钥加密算法需要发送方和接收方共享一个秘密密钥。那么问题来了,如果发送方和接收方之前从未见过面,他们如何在第一次通信时就达成共识并获得这个共享的密钥呢?这就是对称密钥加密算法所面临的一个挑战。
公钥加密算法采用了一种截然不同的方法来解决这个问题。它使用了Diffie-Hellman和RSA等算法,发送方和接收方不需要共享一个秘密密钥。在公钥加密算法中,每个人都有一对密钥:一个公钥和一个私钥。公钥是公开的,所有人都可以知道,而私钥则只有接收方知道。
当发送方想要发送加密消息给接收方时,他们可以使用接收方的公钥对消息进行加密。只有接收方拥有相应的私钥才能解密这条消息。
如下图所示。
因此现在公钥加密算法需要满足两个条件:
1.公钥 K B + K^+_B KB+和私钥 K B − K_B^- KB−满足 K B − ( K B + ( m ) ) = m K_B^-(K_B^+(m))=m KB−(KB+(m))=m。
2.无法利用公钥 K B + K^+_B KB+去计算私钥 K B − K_B^- KB−。
6.2.3.1 RSA(Rivest, Shamir, Adleman)
这是一种基于大数分解难题的非对称加密算法,它使用公钥和私钥进行加密和解密。
RSA算法的核心是modular arithmetic(模运算)。
当我们说 x m o d n x \ mod \ n x mod n,意思是x除以n得到的余数。
模运算有以下规律:
( a m o d n ) + ( b m o d n ) \] m o d n = ( a + b ) m o d n \[(a \\ mod \\ n) + (b \\ mod \\ n)\] \\ mod \\ n = (a + b) \\ mod \\ n \[(a mod n)+(b mod n)\] mod n=(a+b) mod n
\[ ( a m o d n ) − ( b m o d n ) \] m o d n = ( a − b ) m o d n \[(a \\ mod \\ n) - (b \\ mod \\ n)\] \\ mod \\ n = (a - b) \\ mod \\ n \[(a mod n)−(b mod n)\] mod n=(a−b) mod n
\[ ( a m o d n ) ∗ ( b m o d n ) \] m o d n = ( a ∗ b ) m o d n \[(a \\ mod \\ n) \* (b \\ mod \\ n)\] \\ mod \\ n = (a \* b) \\ mod \\ n \[(a mod n)∗(b mod n)\] mod n=(a∗b) mod n
我们主要用到的是以下规律:
( a m o d n ) d m o d n = a d m o d n (a \\ mod \\ n)\^d \\ mod \\ n = a\^d \\ mod \\ n (a mod n)d mod n=ad mod n
例如: x = 14 , n = 10 , d = 2 x=14,n=10,d=2 x=14,n=10,d=2
( x m o d n ) d m o d n = 4 2 m o d 10 = 6 (x \\ mod \\ n)\^d \\ mod \\ n = 4\^2 \\ mod \\ 10 = 6 (x mod n)d mod n=42 mod 10=6
x d = 1 4 2 = 196 x\^d = 14\^2 = 196 xd=142=196, x d m o d 10 = 6 x\^d \\ mod \\ 10 = 6 xd mod 10=6
RSA算法会先将bit转换为对应的整数,也就是加密信息相当于是加密这个对应的整数。
例如 m = 10010001 m = 10010001 m=10010001,那这个信息可以转换为十进制数 145 145 145。
具体步骤如下:
1.选择两个大prime number(素数) p p p和 q q q。这两个素数通常会非常大,比如每个素数都有1024位。
2.计算 n = p q n = pq n=pq,以及 z = ( p − 1 ) ( q − 1 ) z = (p-1)(q-1) z=(p−1)(q−1)。
3.选择一个整数 e e e( e \< n e\