# 无处不在的通信

通信的基本要素:信源、信道、信宿
“三网合一” 中的三网就是计算机网络、电信网和有线电视网
ARPANET:分组交换,存储转发
现代计算机网络互连阶段特征是网络体系结构的形成和网络协议的标准化
采用标准统一的 TCP/IP 协议,标志着互联网 Internet 的诞生
通信子网:通信链路和网络节点
资源子网:计算机系统
电信网:电报,电话,无线电报,移动电话
漏洞挖掘 - 代码编写 - 信息窃取 - 信息贩卖 - 诈骗(社会工程学)
信息窃取攻击:蛮力破解,中间人攻击,拒绝服务攻击(存在最多),病毒恶意软件
蛮力破解:衍生出字典文件,将人们常用的密码组合作为探测口令;撞库攻击,使用相同信息登录大型信息系统
中间人攻击:监听,篡改
拒绝服务攻击:SYN 洪泛 (SYN flood) / UDP 洪泛 (UDP flood) / DNS 反射攻击
安全防护技术:加密解密,访问控制和身份认证,防火墙,防病毒,补丁技术

# Enigma

反射器虽然没有像转轮那样增加可能的不重复的方向,但是它可以使译码的过程和编码的过程完全一样,大大的提高了使用的简洁性,并不转动
增加强度:设计连接板,让使用者用一根信号线将某一个字母和另外一个字母任意连接,至多有六根
在 Enigma 的连接板上两两交换 6 对字母的可能性数目非常巨大,有 100391791500 种,计算为:
[ \fracC(26, 2) \times C(24, 2) \times C(22, 2) \times C(20, 2) \times C(18, 2) \times C(16, 2)}{2(6 \times 6!)]

# 密码学基础

广泛使用的两种加密形式是传统加密和公钥加密;
传统加密:对称加密、单钥加密,不适合大规模大变动组织
现代加密:非对称加密、公钥加密
密码编码学:研究各种加密方案的学科
特征一、转换明文为密文的运算类型;
置换是将明文中的元素重新排列,代换是将明文中每个元素映射成为另外一个元素,所有的运算都是可逆的
特征二、所用的密钥数
双方使用相同密钥,对称密码;不同密钥,公钥密码
特征三、处理明文的方法
分组 / 块密码,每次处理一个分组;流 / 序列密码,连续处理
无条件安全:无论有多少可以使用密文,都不足以唯一地确定由该体制产生密文所对应的明文
计算上安全:破译密码的代价大于加密数据本身的价值,破译密码的时间超过了密文信息的生命期
大事件:1976 年公钥密码体制,1977 年 DES 标准

# 古典密码 - 代换技术

Caesar 密码:每个字母用它之后第三个字母代换(单表代换)
密钥词密码:设一个密钥词放在前面,其余字母按顺序(单表代换)
Playfair 密码:基于一个由密钥词构成的 5×5 字母矩阵,两个字母对的代换(多表代换)
Hill 密码:将 m 个连续的明文字母代换成 m 个密文字母,由 m 个线性等式决定,C = KP mod 26
Vigenere 密码:包括了 26 行字母表,每一行都由前一行向左偏移一位得到,密钥确定某个字母使用哪一行代换
Verman 密码:选择与明文毫无统计关系并且和明文一样长的密钥,其运算是基于二进制数据而非字母的
一次一密:使用与消息一样长且无重复的随机密钥来加密消息,无条件安全的

# 古典密码 - 置换技术

是把消息一行一行写成矩形块,然后按列读出,同时把列的次序打乱;列的次序就是算法的密钥
多步置换

# 古典密码 - 破译

穷举法
频率分析法:利用语言的统计特性(单码,双码,多码)

# 对称密码

加密解密使用相同的密钥,密钥必须使用秘密的信道分配
SDES—— 重点,见 PPT
Feistel 密码结构 —— 现在使用的对称分组密码算法都基于 Feistel 分组密码结构;
建议交替使用代换和置换,混淆和扩散(香农)
扩散:使明文的统计特征消散在密文中,让每个明文数字尽可能地影响多个密文数字
混淆:尽可能地使密文和加密密钥间的统计关系更复杂,以挫败推导出密钥的企图
每轮迭代都有相同的结构:代换作用在数据左半部分,通过轮函数 F 作用在数据的右半部分后,与左半部分进行异或来完成;代换之后,交换数据的左右两半完成置换

DES 算法:分组加密,对称密钥
首先把明文分成以 64 bits 为单位的块 m,执行初始置换 IP,16 轮迭代 Ti,末尾置换 IP-1
56 bits 的密钥分成两部分,Ci,Di,各 28bits,每一轮循环左移后压缩置换(56 位取 48 位),得到每一轮的密钥
对于每一轮迭代分为左右两个 32 位,经过 E 盒扩展置换(32 位扩展到 48 位),S 盒代换选择,P 盒置换步骤
E 盒目的:输入的一位影响下一步的两个替换,使得输出对输入的依赖性传播得更快,密文的每一位都依赖于明文的每一位
现在,5000$ 的计算机,可以在 3.5 小时找到密钥

最重要的几种对称密码算法,3DES、Blowfish 和 RC5,AES 不是 Feistel 结构,每一轮都使用代换和置换并行的处理整个数据分组(而不是左右分组)
3DES:两个密钥 k1 k2(或三个),三轮 DES,C = Ek1 [Dk2 [Ek1 [P]]]
BlowFish:与古典 Feistel 结构不同,Blowfish 算法每轮运算都是对数据的左右两个部分同时执行运算(左右均经过异或,DES 中下一轮的 L 不再是上一轮的 R),使用可变长度的密钥初始化方法
RC5:密钥长度可取 0~2040 位,最长(BlowFish 最长 448)
AES:分组长度 128 位,密钥长度 128 位;每一轮开始 —— 与当前轮密钥异或 —— 字节代换 —— 行移位 —— 列混淆;密钥被扩展成 44 个 32 位字所构成的数组 w [i];仅在轮密钥加阶段使用密钥(一种 Verman 算法)
补充:行移位,将数据块划分为 4x4 的字节矩阵,对这个矩阵的行进行循环移位操作,目的是提高数据的扩散性;列混淆,在行移位之后,每一列都会通过一个特定的数学变换进行混淆,提高扩散性和混淆性
多种对称密码算法概述 —— 见 PPT
BlowFish,RC5 的密钥扩展阶段都使用了加法,RC5 没有用到 S 盒,使用的是一种基于加法、异或和循环左移的混合操作

问题:1. 必须经过安全的信道分配;2. 不能数字签名;3. O (n^2) 的数量管理复杂

# 公钥密码

基于数学函数而不是代换和置换
公钥公开,用于加密和验证签名;私钥保密,用作解密和签名
任何时刻,系统都可以改变自己的私钥,而公布相应的公钥代替原来的公钥
对于消息,A 向 B 发送消息,用 B 的公钥加密;B 收到密文后,用自己的私钥解密
对于验证,A 向 B 发送消息,用 A 的私钥加密 (数字签名);B 收到密文后,用 A 的公钥解密 (验证)
陷门单向函数:在不知陷门信息下求逆困难的函数,当知道陷门信息后,求逆是易于实现的
需要大量计算,仅限于密钥管理(交换协商对称的对话密钥)和签名这类应用中
传统密码中与密钥分配中心的握手是一件异常麻烦的事情,而公钥密码实现密钥分配则是非常简单的(错误)
RSA 算法和 DH 算法 —— 重点,见 PPT
RSA:蛮力攻击,数学攻击,计时攻击(通过记录计算机解密消息所用的时间来确定私钥)
DH:只用于密钥交换,有效性在于计算离散对数非常困难
DSA:只能用于数字签名

# 密钥分配 - 对称密码

任何密码系统的强度都和密钥分配方法有关
链路加密:指在数据传输过程中,每个传输链路上的数据都被加密。在这种方式下,数据在传输过程中的每个节点(例如路由器或交换机)都会被解密然后重新加密。这意味着数据在从源头到目的地的过程中,每经过一个节点,都会进行一次解密和加密的过程。链路加密可以保护数据在特定链路上的传输安全,但是在每个节点上,数据都可能被暴露,因为节点需要对数据进行处理。
端到端加密:指数据从发送方加密后直到到达接收方之前都不会被解密,确保只有发送方和接收方能够访问原始数据内容。即使数据在传输过程中经过了多个中间节点,这些节点也无法解密数据内容。端到端加密防止了中间人攻击,即使数据被截获,攻击者也无法解读数据内容。
对于端到端加密,使用密钥分配中心 KDC 模式:
STEP1:A 向 KDC 请求一个会话密钥以保护与 B 的逻辑连接;消息中有 A 和 B 的标识以及一个临时交互号 N1;
STEP2:KDC 用 Ka 加密的消息做出响应;此时,A 可知:会话密钥 Ks;含 N1 的原始请求消息;用 Kb 加密了一次性会话密钥 Ks 和 A 的标识符 IDa ;
STEP3: A 存下会话密钥 Ks 备用,将 KDC 消息中的最后两项内容发给 B
层次式 KDC 密钥分配:使得主密钥分配的代价变小,将破坏集中在小区域内

# 密钥分配 - 公钥分配

公开发布 —— 容易伪造
公开可访问目录 —— 某个可信的实体或组织负责这个公开目录的维护和分配,<姓名,公钥>,一旦攻击者获得或者计算出管理员的私钥,带来的危险将很大
公钥授权 —— 只要用户之间通信,就必须向目录管理员申请对方的公钥,成为系统的瓶颈(A 从管理员获取后保存 B 公钥,并将 A 的表示和临时交互号 N1 发给 B,B 获取 A 公钥并核对临时交互号)
公钥证书 —— 证书包含着公钥和其它一些信息,只能由证书管理员产生和更新,并发给拥有相应私钥的通讯方,任何通信方可以读取证书并确定证书拥有者的姓名和公钥,与公钥授权的安全性相同;通信方读取证书后需要验证该证书出自证书管理员

# 密钥分配 - 利用公钥分配传统密码的密钥

公钥密码速度较慢,更适合作为传统密码中实现密钥分配的一种手段
简单的密钥分配:A 将 KUa 和 A 的表示发给 B,B 产生 Ks,用 KUa 加密后发给 A,即可得到;但是通信双方身份难以确定,容易受到主动攻击
具有保密性和真实性的密钥分配:已经交换了公钥,A 发送 IDA 和 N1 给 B,B 发送 N1,N2,A 发送 N2(交互号用于验证关系),A 选择 Ks,用自己的私钥和 B 的公钥加密后发送给 B,B 解密即可得到
也需要密钥分配中心 KDC

# 认证技术

认证 = 比较
网络环境中的攻击:泄密,传输分析,伪装,内容、顺序、计时修改,发送方、接收方否认
对付泄密、传输分析属于消息保密性范畴。
对付伪装、内容修改、顺序修改、计时修改属于消息认证范畴。
对付发送方否认可以使用数字签名。
对付接收方否认需使用数字签名和为抗击此类攻击而设计的协议。
消息认证就是验证所收到的消息确实是来自真正的发送方且未被修改的消息。
认证函数:产生认证符的函数;分为消息加密,消息认证吗 MAC,Hash 函数三类

# 消息加密

对称加密:发送方 A 用 A 和 B 共享的密钥 K,对发送到接收方 B 的消息进行加密
解决对称加密中消息认证的方法是要求明文具有某种易于识别的结构,这种结构可以是特定的格式、字段顺序、特殊的标记或者校验和等
加密前对每个消息附加一个错误检测码,也称之为帧校验序列 FCS 或者校验和
FCS 和加密函数的顺序是很重要的,如果先加密再计算 FCS,攻击者可以构造具有正确错误控制码的消息造成混淆
例子:TCP 协议
不能提供数字签名:接收方可以伪造信息,发送方可以否认信息

公钥加密:只提供保密性,不能提供认证,通过数字签名(用自己私钥加密)提供认证,加密到解密需要进行四次运算
防止发送方否认:接收方提供这个经过签名的消息作为证据,由于只有发送方的私钥能生成这个签名,因此可以证明消息的发送者
防止接受方否认:需要接受方提供回执

# 消息认证码 MAC

MAC 是消息和密钥的函数:MAC=Ck (M) K 是双方共享密钥,与加密过程的区别在于不要求可逆
因收发双方共享密钥,MAC 不能提供数字签名

# Hash

单向的 hash 函数是消息认证码的一种变形,并不使用密钥,它仅仅做为输入消息的函数,成为消息摘要(MD)
Hash 码是所有消息位的函数,它具有错误检测能力,消息任意改变都会导致 hash 码改变
(1) 用对称密码对消息及 hash 码加密:提供了保密性和认证
(2) 用对称密码仅对 hash 加密:提供认证,不提供保密
(3) 用发送方私钥对 hash 码加密:提供认证和数字签名(只有发送方可以产生加密后的 hash 码)
(4) 先用发送方私钥对 hash 码加密,再用对称密码中的密钥对消息和上述加密结果进行加密:提供认证、数字签名和保密性,常用
(5) 双方共享公共的秘密值 S:A 将 M 和 S 联接后再计算 hash 值,并将其附加在 M 后面,提供了认证
(6) 再对 (5) 用 Ks 加密:提供认证和保密性
如果不要求保证保密性,就可以不使用加密函数,从而减少计算代价
抗弱碰撞性:给定 m ,要找到 m’,m’≠ m 且 H (m) = H (m’) 是计算上不可行的
抗强碰撞性:寻找任何 (x,y) ,x ≠ y ,使得 H (x) = H (y) 是计算上不可行的

# Hash 函数

迭代 Hash 函数:典型的安全 hash 函数
将输入消息分为 L 个固定长度的分组,每个分组长度为 b 位,最后一个分组不足 b 位时,需要填充成 b 位
压缩函数 f:输入是前一步中得出的 n 位结果(即连接变量)和一个 b 位分组,输出一个 n 位分组,通常 b>n
如果压缩函数具有抗碰撞能力,那么迭代 hash 函数也具有抗碰撞能力
MD5:512 位分组,缓冲区 128 位;找到两条 hash 码相同的消息的代价是 2^64 数量级,找到具有给定摘要的消息所需代价为 2^128 数量级
填充比特:即填充后的消息比 512 的整数倍少 64 位,再用 64 位表示填充前的报文长度,附加填充比特的后面
初始化 MD 缓存:4 个 32 位的寄存器 ABCD
压缩函数:四轮运算,输入为 512 位分组和 128 位缓冲区寄存器,使用 64 项的随机矩阵 T [i]= 2^32 abs (sin (i)),每轮使用 16 个元素
每一轮对 ABCD 进行 16 步迭代,每一步迭代类似 b ← a + ((a + g (b,c,d) + X [k] + T [i]) <<< s),g 为一个基本逻辑函数(四选一,每轮一个),其中 a 随步数变化;X [k] 为 512 位的第 k 个 32 位字,而 k 是一个预定的非线性顺序索引;迭代结果与前一步相加
(MD4,三轮运算,每轮使用的加法常量(即 T [i])相同且第一轮不用,只使用三个基本逻辑函数,迭代结果不与前一步相加)

SHA-1:512 位分组,缓冲区 160 位,2^63 碰撞攻击代价
填充方法与 MD4/5 相同,初始化使用五个 32 位寄存器 ABCDE
将块分成 16 个 32 位的字,扩展这 16 个字为 80 个 32 位的字,进行 80 步迭代(四轮,每轮 20 步,四个基本逻辑函数),每轮更新 ABCDE 五个寄存器的值,结束后与之前轮结果相加

RIPEMD-160:512 位分组,缓冲区 160 位
由十轮运算组成的压缩函数是算法的核心,十轮运算分成两组,每组五轮(五个基本逻辑函数),每轮执行 16 步迭代
三者对比 —— 见 PPT,困难程度递增
MD5 和 RIPEMD-160 采用低位在前结构,SHA-1 采用高位在前结构

# 数字签名算法 DSS

消息认证不能处理通信双方自身发生攻击(发送方否认,接收方伪造)
直接数字签名只涉及通信双方(自己私钥加密),方法的有效性依赖于发送方私钥安全性
仲裁数字签名:从 X 到 Y 的每条已签名的消息都先发给仲裁者 A,A 对消息及其签名进行检查以验证消息源及其内容,然后给消息加上日期,并发给 Y,同时指明该消息已通过检验
DSS 使用 SHA-1 算法,给出了一种新的数字签名方法,即数字签名算法 DSA
DSS 不能用于加密或者密钥分配,只提供数字签名功能
DSS 使用 hash 函数,hash 码和随机数 k 作为数字签名函数 Sig 的输入,签名函数依赖于发送方的私钥 KRa 和一组通信伙伴共同拥有的参数构成的全局公钥 KUG;签名由两部分构成:s 和 r,发送消息位 M+s+r
接收方对接收到的消息 M 产生 hash 码,这个 hash 码和签名(s+r)一起作为验证函数 Ver 的输入,验证函数依赖于全局公钥 KUG 和发送方公钥 KUa;若验证函数的输出等于签名中的 r,则签名有效

# 电子身份认证

HTTP 是面向一次连接的无状态网络协议
HTTP 的 Basic 认证:在每次发出 HTTP 请求时,把用户身份凭证的明文发送到服务器端,服务器与存储在服务器端的用户凭证进行比较;对账号口令(U,P)进行 Base64 编码,发送到 Web 服务器端,服务器比较后确认用户身份
补充:Base64 是一种基于 64 个可打印字符来表示二进制数 (8Bit) 的方法
缺点:易于被监听、盗取,安全性低;本地需要存储账号口令;每个请求都要经过服务器处理,效率低

改进:账号口令密文传输,无法躲避重放攻击 —— 采用挑战 / 响应 (Challenge/Response) 机制,两次 HTTP 请求,先由服务器发送随机的挑战码 M,客户端抽到后使用 M 计算出一个响应值作为凭据,再使用 MAC 认证发送 MAC 码
基于表单的身份认证:当某个 Session 首次启用时,服务器会产生一个唯一的标识符发送到客户端,客户端收到后会存储下来;在 Session 存活期间,客户端每次向服务器发送的 HTTP 请求都会包含上述唯一标识符,使得服务器能够把前后多次请求关联起来
改进:引入 Challenge/Response 机制,Challenge 码 M 用(k = 口令)计算 Ek [M||U],服务器用相同的手段计算,相同则验证成功
通常在静态口令的基础上加上其他因素的认证方式,形成双因素认证或多因素认证方式
常见不安全做法:账号口令(或其加密形式)存 cookie,如果一定要使用,加密过程中内容加上时间戳 t

手机口令:短信
动态口令:基于时间同步,每隔一段时间更新(计算时包含时间戳对区间除法的取整)
USB KEY:USB 接口的硬件设备,私钥不可导出,仅能用于内置的加密或签名运算
数字证书:权威机构发行,最简单包含一个拥有者的公钥、名称和证书授权中心的数字签名;数字证书拥有者对应的私钥应该另外妥善存储

# 计算机网络安全体系结构

安全目标:CIA
Confidentiality:保密性、机密性
Integrity:完整性
Availability:可用性
安全服务:认证服务 Authentication,保密服务 Confidentiality,数据完整性服务 Integrity,访问控制服务 Access Control,抗抵赖服务 Non-repudiation,可用性服务 Availability
安全机制:普通安全机制(不属于任何协议层或者安全服务)和特定安全机制(在特定的协议层实现的安全机制)
加密机制、通信业务流量填充机制(通过在传输的数据中插入一些额外的、无意义的数据(填充数据),使得外部观察者难以区分实际有用的数据和填充数据,从而保护数据的隐私性);访问控制机制、数据完整性机制;认证交换机制、数字签名机制;路由控制机制、公证机制
安全性攻击分成两类:
主动攻击:试图改变系统资源或者影响系统运行。
被动攻击:试图了解或者利用系统的信息但不影响系统资源(窃听,流量分析)。

# 无线局域网

无线窃听:开放性信道导致信息泄露
假冒攻击:假冒用户身份
信息篡改:将窃听到的信息进行修改
重放攻击:攻击者复制有效的消息事后重新发送或重用这些消息以访问某种资源
重路由攻击:攻击者改变消息路由以便捕获有关信息
错误路由攻击:将消息路由到错误的目的地
删除消息:攻击者在消息到达目的地前将消息删除
网络泛洪:发送大量伪造的或无关消息从而使得 AP 忙于处理这些消息而耗尽信道资源和系统资源,拒绝服务

无加密认证:SSID 为每个 AP 配置标志名(wifi 名),只要使用者能够提出正确的 SSID,AP 就接受用户端的登入请求
有线等效保密协议 WEP:使用对称加密算法(RC4 流加密),无线 AP 首先启用 WEP 功能,创建密钥;然后在每个无线客户端启用 WEP,并输入该密钥(Challenge/Request 模式)
将 24 位初始化向量 IV 和 40 位共享密钥 K0 连接得到 64 位的数据,输入到虚拟随机数产生器中,产生一次性秘钥 KE;KE 与明文 P 和其 CRC32 校验的拼接异或,得到密文;密文在与初始化向量 IV 拼接发送
问题:各个设备与接入点共享一组默认密钥,且 RC4 容易被破译,也不含序列号,无法抵抗重放攻击;24 bits 的初始化向量 IV 明文发送,且过短,容易重复
完整性校验算法 CRC-32 是非加密的线性运算,主要用于检测消息中的随机错误,不是安全的杂凑函数,无法实现消息认证
WPA1:使用 TKIP 协议,动态变化每个数据包所使用的密钥,密钥长度 128 位,传送的每一个数据包都有独有的 48 位序列号,防范重放攻击;使用了称为 “Michael” 的更安全的消息认证码 MIC
IEEE 802.1x:基于客户 / 服务器模式,AP 会要求用户输入用户名和密码,再把这个用户名和密码送到验证服务器上去做验证;需要和上层认证协议 EAP 配合实现用户认证和密钥分发
WPA2:更安全的 CCMP 消息认证代替了 Michael 算法,AES 对称加密算法代替了 RC4 流密码

# VPN

用户不再需要拥有实际的长途数据线路,而是使用公众网络的长途数据线路动态组成
基于数据链路层的 VPN 解决方案:L2TP,在认证、数据完整性以及密钥管理具有严重缺陷
基于网络层的 VPN 解决方案:IPSec,认证,保密,密钥管理
基于传输层的 VPN 解决方案:SSL,SSL VPN 和 IPsec VPN 两种方案往往结合实行

# IPSec

现有 IP 协议:无连接,不保证顺序到达;存在重复包、丢失包;设备简单、无状态
IPsec 的原理在于可以在 IP 层加密和 / 或认证所有流量
IPsec 的实施:主机(能够针对用户的每个会话提供安全保障),防火墙(为内部所有的应用提供安全服务,不改变操作系统),路由器(对通过公用网络在两个子网之间流动的数据提供安全保护)

# IPSec 体系结构

RFC 2402 - 包认证,RFC 2406 - 包加密
IPSec 文档:体系结构,认证头 AH,封装安全载荷 ESP,加密算法,认证算法,密钥管理,解释域(DOI)
DOI:其他文档需要的为了彼此间互相联系的一些值,包括经过检验的加密和认证算法的标识以及操作参数,比如密钥的生存期
使用 AH 协议报头的认证协议和为数据包设计的加密 / 认证协议 ESP,提供安全性

安全关联 SA:一组安全信息参数集合,包括:协议、操作模式、密码算法、认证算法、密钥、密钥生存期等
关联是发送方和接收方之间的单向关系,如果需要双方安全交换,则建立两个安全关联
安全服务不能由 AH 和 ESP 两者都提供
SA 由三个参数唯一确定:
(1) 安全参数索引 SPI,由 AH 和 ESP 携带,使得接收方能够选择合适的 SA 处理接收包,仅在本地有意义
(2) IP 目的地址 IPDA,只允许使用单一地址,表示 SA 的目的地址
(3) 安全协议标识,AH/ESP

安全关联数据库 SADB,由三元组索引
SA 的参数包括
必须实现的:序列号计数器;序列号溢出标志;反重放窗口(计数器是否重复);IPSec 协议模式(隧道,传输);Path MTU
AH 必须实现 AH 信息组;ESP 必须实现 ESP 信息组;分别包括认证算法,密钥,密钥生存期等;其他:SA 的生存期

工作过程:对于收到的数据包,解析出三元组【SPI、目的地址、AH /ESP】,并据此查找 SADB;查找到则比较参数,不一致则丢弃;若未查找到,如果是输入包则丢弃,否则创建一个新的 SA 存入 SADB。

安全策略数据库 SPDB:至少包括定义 IP 流量子集的入口、指向该流量 SA 的指针(要保护的数据包类型和如何保护)
其每个入口由一个 IP 集合和上层协议定义,称为选择子,包括源目的地址 / 端口,用户标识,数据敏感性级别,协议等,用于筛选过滤出特定流量
每个 IP 包经过选择子的过滤在 SPDB 中选择匹配的入口,如果存在 SA,则选定 SA 何其关联的 SPI 执行 IPSec 处理
对于数据包的操作策略包括:Discard,bypass IPSec,apply IPSec(外发提供 + 接受默许)

传输模式:主要为上层协议提供保护,同时增加了 IP 包载荷的保护;ESP 仅加密(认证)IP 载荷,不处理 IP 报头;AH 认证载荷和报头选中部分(主机)
隧道模式:当 IP 包加上 AH/ESP 域后,整个数据包和安全域被当作一个新的 IP 载荷,并拥有一个新的外部 IP 报头;ESP 加密(认证)包括内部 IP 报头的整个载荷;AH 认证内部载荷和外部 IP 报头选中部分(防火墙,路由器)

# AH

支持数据完整性和 IP 包的认证,基于消息认证码 MAC,双方必须共享一个公钥
认证头由 Next Header,Payload Length,保留字,SPI(为 0 表示没有安全关联存在),序列号计数器(防范重放类型攻击),认证数据 AD(ICV 或 MAC)
当建立了一个新的 SA 时,发送方将序列号初值设为 0,每次在 SA 上发送一个包,则计数器加 1 并将值放入序列号域,则使用的第一个值就是 1;序列号达到 2^32-1 后,SA 必须中止,协商新的 SA
反重放攻击:接收方维护窗口,包到达之后,序号小于下边界则丢弃,第一次收到一个窗口中的包,验证通过后标记位置;如果收到已经标记过的包则丢弃;收到超过上边界的包且验证通过,则窗口前移
完整性校验值 ICV:包含在 AD 域,一种 MAC 或者 MAC 算法生成的截断代码(前 96bits);
计算字段包括:IP 报头中传输过程中不变的部分和 AH SA 终点可以预测的部分(除去服务类型,报文分组域,TTL,Header CheckSum 这些可变部分),其余部分置为 0;AH 报头中 AD 域置 0 计算;上层协议数据全体
两种途径使用 IPSec:直接在服务器和客户工作站之间提供传输模式的认证(端到端,主机上);在服务器不支持认证的情况下,远程工作站向防火墙证明自己身份,以便访问整个内部网络的时候,使用隧道模式 SA(防火墙或路由器上)
AH 对输入输出数据包的处理

# ESP

封装安全载荷由 SPI,序列号,padding,pad length,Next Header,AD 组成
载荷数据、填充数据 padding、填充长度 pad length 和邻接头域都在 ESP 中被加密。可用加密算法有:3DES、RC5、IDEA、CAST、Blowfish;支持使用默认为 96 位的 MAC
Padding 的功能:扩展明文长度;对齐;隐藏载荷的实际长度,并提供部分流量保护
传输模式:包括 ESP 尾和整个传输层分段的数据块被加密,块中的明文被密文替代,形成要传输的 IP 包;如果选择了认证,则加上认证(对加密后的数据计算认证码);中间路由器不检查密文;目的节点利用 ESP 报头中的 SPI 解密包的剩余部分,恢复传输层分段数据
ESP 头和 ESP 尾之间传输层以上的数据,之后是 MAC,之前是 IP 头
隧道模式:ESP 加密对象包括 IP 头(即整个 IP 包),再添加新的 IP 头,更常用于建设虚拟专用网
ESP 对输入输出数据包的处理

# 安全关联组合

单个 SA 不能同时实现 AH 和 ESP
安全关联组合(安全关联束)是指提供特定的 IPsec 服务集所需的一个 SA 序列
传输邻接:不使用隧道的情况下,对一个 IP 包使用多个安全协议;组合 AH 和 ESP 的方法仅允许一级组合
[IP1][AH][ESP][upper]
隧道迭代:指通过 IP 隧道应用多层安全协议;由于每个隧道可以在路径上的不同 IPsec 节点起始和结束,因此该方法允许多层嵌套
[IP2][ESP][IP1][AH][IP0][upper]

# IKE

支持两种密钥管理类型:手工和自动
IKE 的精髓在于:永远不在不安全的网络上直接传送密钥
IKE (Internet Key Exchange) 协议为 IPsec 提供了自动协商交换密钥、建立安全关联 SA 的服务,简化了 IPsec 的使用和管理;解决了在不安全的网络环境中安全地建立或更新共享密钥的问题
核心技术是 DH 秘钥交换算法,使得 IKE 具备了完善的前向安全性 (指一个密钥被破解,并不影响其他密钥的安全性,这些密钥间没有派生关系)
不但可自动地为参与通信的实体协商安全关联 SA,还可以维护安全关联数据库 SADB
IKE == “ISAKMP 格式 + Oakley 模式 + SKEME 密钥交换”
IKE 的报文格式继承自 ISAKMP,所以也称为 ISAKMP 报文
ISAKMP:UDP 的 500 端口,在任何传输层和 IP 层上实现,由一个定长的报文头和不定数量的载荷组成
发起者 Cookie + 应答者的 Cookie:唯一标识一个密钥交换会话和该会话生成的 IKE SA
Next Payload:报文第一个载荷类型,Exchange Type:密钥交换类型,Flags:8 位,只定义了最低三位 —— 加密位,约束位(如果置为 1 需要等待 ACK 才能安全通信),认证位(1:有认证,0:没有加密仅认证)
Message ID:第二阶段密钥协商的发起者生成,标志一个第二阶段密钥协商会话;Total Message Length:总长度
13 种载荷:均为 Next Payload (8)+Reserved (8)+Payload Length (8)+Payload

# IKE 体系结构

两个阶段:第一阶段,协商创建一个通信信道(IKE SA),并对该信道进行验证;第二阶段,使用已建立的 IKE SA 建立 IPsec SA
第一阶段中,可以使用主模式(提供对通信双方的身份保护)或积极模式(不必要身份保护)
主模式:SA 交换,密钥交换,身份和交换验证(2+2+2)
消息 1:发起方策略,此时的接受方 Cookie 为 0,报文载荷包括 SA,Proposal,Transform
消息 2:接受方确认策略,设置接受方 Cookie,其余类似消息 1
补充:SA 载荷由解释域 DOI 开始,之后会跟随一个或多个提议(Proposals,包含协议内容及其变换列表)和变换(Transforms,提议附带,包含算法等),定义了安全关联的具体参数
在协商之前,发起者和响应者必须计算产生 cookie,用于唯一的标识每个单独的协商交换过程
消息 3:发起方密钥生成信息,包含了 Key Exchange 载荷和 Nonce 载荷,KE 载荷包含发起者的 DH 公钥,Nonce 载荷为大随机数防止重放攻击
消息 4:接受方密钥生成信息,同消息 3,KE 为接受者的 DH 公钥
消息 5:发起方身份和验证数据,包含标识载荷 ID 和散列载荷 Hash,加密传输
消息 6:接受方身份和验证数据,载荷类似
ID 载荷包含了发起者的标识信息,IP 地址或者主机名;Hash 载荷包含对上一过程中产生的三组密钥进行 Hash 运算得出的值
如果双方在消息 5 和消息 6 中的散列载荷中的 hash 值相同,那么双方的认证成功
cookie 使用源 / 目的 IP 地址、随机数字、日期和时间等信息进行 MD5 计算,其结果写入 ISAKMP 报文头的 “cookie” 域中

快速模式:主模式只能采用 IP 地址作为 ID 进行协商,不能够应用于 IP 地址动态变化的情况
发起方:发送本地 IKE 策略,密钥生成信息;相应方:查找匹配的策略,密钥生成;发起方:接受对方确认策略,密钥生成并发送身份验证数据(3 步)
消息 1:交换 SA、KEY、Nonce 和 ID 等载荷
消息 2:在响应消息 1 内容的同时,增加了 Hash 认证(响应方计算好几个密钥,然后使用这些密钥以及其他信息计算 hash 值)
消息 3:根据消息 2 的 Hash 计算,如果一致再计算一个新的 Hash 值,加载在消息 3,响应方重新计算一致,认证完成
第二阶段使用快速模式,为 IPsec AH 和/或 IPsec ESP 协商安全参数(加密算法,哈希算法,验证方法,DH 组,存活周期,密钥长度等等)
一个 IKE SA 协商(第一阶段)可为多个 IPsec SA 协商(第二阶段)提供服务
(IPSec SA 是单向的,这意味着保护数据流的每个方向(入站和出站)都需要一个单独的 IPSec SA;因此,通常至少需要两个 IPSec SAs 来保护双向通信)

# IKE 工作

端节点到端节点:采用传输模式,IP 头与数据间插入 IPsec 头,用来保护数据载荷
安全网关到安全网关:采用隧道模式
假设一个便携漫游用户通过 IPsec 保护的隧道连接回自己的协作网络,在这种情况中,数据包将使用隧道模式:
从便携漫游用户节点出来的数据包的外部 IP 头将包含和其当前位置相关 的 IP 地址,而内部 IP 头将包含由安全网关赋予的源 IP 地址;外部目的地址总是安全网关的地址,而内部目的地址会是数据包的最终地址
IKE 在协议实现上,是以守护进程的方式在后台运行
两种方式:内核提交请求;同级 IKE 守护进程提交请求
IPSec 先查询 SPDB(保存在内核),对应到相应的 SA,再检查 SADB,如果没有 SA 通过内核提交请求
IKE 守护进程接收到内核发来的请求后,查询 SPDB,得到所有协商参数;然后向远程 IKE 进程发出协商请求;IKE 进程开始协商
删除 SA 也通过 IKE 守护进程协商删除,远程的 IKE 进程可以选择直接删除或者忽略(但是不允许使用)

# 传输层安全协议 SSL

工作在 TCP 协议上,可用于保护正常运行于 TCP 之上的任何应用层协议,与具体的应用层协议无关
为端到端的应用提供保密性、完整性、身份认证
两个实体:客户机 + 服务器
两个概念:会话(Session)+ 连接,会话通过握手协议建立,可以由多个连接共享;一次访问中可能需要多个连接,共享同一个会话协商的密码算法、主密钥等信息
两层协议:握手协议 + 记录协议
SSL 协议由 SSL 记录协议(定义传输格式,为高层协议提供数据封装、压缩、加密等基本功能);SSL 握手协议(协商密钥,在数据传输前,进行身份认证、协商加密算法、交换密钥等);SSL 告警协议;SSL 修改密码规约协议

# 记录协议

保密性:使用 SSL 握手协议定义的共享密钥 (shared secrete Key),用传统密钥算法对 SSL 载荷进行加密;
报文完整性:用握手协议定义的共享密钥 (secrete) 计算报文认证码 (MAC)

操作过程:(对上层报文)分段,压缩(可选),增加 MAC,加密(对压缩报文加上 MAC 进行加密),增加首部(内容类型 (8bit),主要版本 (8bit),次要版本 (8bit),压缩长度 (16bit)),形成 SSL 记录协议数据单元

# 握手协议

在传递应用数据之前使用
允许客户端和服务器端相互认证、协商加密和 MAC 算法,保护数据使用密钥通过 SSL 记录传送
功能包括:协商密码算法;协商主会话密钥;C/S 相互认证,先认证 Server,Client 的认证可选
报文格式:类型 (1):指示 10 种报文中的一个;长度 (3):以字节为单位的报文长度;内容 (>=1):和这个报文有关的参数
四个阶段:
(1) 建立安全能力:客户向服务器发送 client_hello,服务器发送 server_hello(参数相同,包括密钥交换方法,加密算法,MAC 算法,压缩算法等)
(2) 服务器认证和密钥交换:服务器发送其 SSL 数字证书 Certificate;
如果密钥交换算法使用匿名 DH 算法,就不需要服务器发送证书;
如果密钥交换算法使用 DH、RSA 等算法,需要发送 server_key_exchange 报文,用来交换密钥;服务器发送 sever_hello_done 报文,等待客户端响应;
可选:发出 certificate_request 报文,给出可以支持的客户端数字证书类型列表
(3) 客户认证和密钥交换:客户端验证 server 提供的证书是否有效,随后发送 client_key_exchange,包含 pre_master_secret 和消息认证码计算需要的密钥
(不直接发送 master_secret:避免被截获,那么整个会话的安全性都会受到威胁,增加随机性和复杂性)
可选:收到 certificate-request 则发送 Certificate 给服务器,同时发出签有客户端专用密钥的 certificate_verify,用来证明它实际上拥有与该证书关联的私钥
(4) 结束:客户端使用一系列加密运算将 pre_master_secret 转化为 master secret ,派生出用于加密和消息认证的所有密钥,客户端和服务器相继发出 change_cipher_spec 和 finished
客户端 change_cipher_spec:要求服务器转换为新协商的密码对;finished:在新算法、密钥下的报文,如果服务器能正确处理则能验证协商成功
服务器 change_cipher_spec:同上;finished:在新算法、密钥下的报文,让客户端也验证协商成功

# 告警协议

用于向对等实体传递 SSL 相关的警报,和使用 SSL 的其它应用一样,告警消息按照当前状态压缩和加密
每个消息由两个字节组成:第一个字节标识 1(告警)2(致命错误);第二个字节包含了描述特定告警信息的代码

# 修改密码规约协议

在握手协议的结束阶段发送(change_cipher_spec),通知接收方,以后的记录将使用刚才协商的密码算法和密钥进行加密 / 认证
只有一种报文,只有一个字节,只有一个值 (1) 是有效的

# 安全性

为每次安全连接产生一个 128 位长的随机数 “连接序号”,防范 “重放攻击”
对应用层不透明,在涉及多方的电子交易中,SSL 协议并不能协调各方间的安全传输和信任关系

# HTTP + SSL

主动攻击包括伪装成其它用户、篡改客户和服务器之间的消息或者篡改 Web 站点的信息等
被动攻击包括在浏览器和服务器通信窃听、获得原来被限制使用的权限等
Web 的安全威胁:服务器安全,客户浏览器的安全,服务器和客户端之间的通信安全
流量安全方法:IP 级,TCP 级,应用级
HTTP 协议本身采用明文传输通信内容,并且对通信双方不做验证,完全无法防御中间人攻击
可能的攻击:监听嗅探,篡改劫持,伪造服务器,中间人攻击(整个会话都被攻击者完全控制,而且攻击者还可以拦截通讯双方的通话并插入新的内容)

# ARP 欺骗

工作在数据链路层,实现 MAC 地址与 IP 地址的映射
是一种中间人攻击的常用手段,攻击者可以通过制造伪造的 ARP frame (request, reply),修改网内任何计算机的映射表,从而切断目标主机的网络通讯,窃取目标主机关键信息,导致出现了通信数据已经被篡改的现象
ARP 欺骗成功后,可以继续进行 DNS 欺骗
DNS 欺骗:攻击者向 DNS 服务器或客户端发送伪造的 DNS 响应,这些伪造的响应将域名解析到错误的 IP 地址,导致用户在尝试访问特定网站时被重定向到攻击者控制的服务器。

# HTTPS

HTTPS 是 HTTP 和 SSL/TSL 协议的合并,解决了数据加密、完整性校验、对服务器的身份认证等问题
HTTP 端口号为 80,HTTPS 端口号为 443
SSL 在 TCP 之上,HTTP 之下建立了一个加密通道,通过这一层的数据经过了加密(借助下层协议的的信道安全的协商出一份加密密钥)

HTTPS 协议依旧无法避免 ARP 欺骗和嗅探攻击,但是被嗅探到也无法得到明文信息
HTTPS 能够避免报文篡改(无法识别的密文无法篡改)
HTTPS 的加密证书是在证书管理机构申请后发放,所以拥有该证书的单位和个人是唯一的、不可被仿冒(地址栏的小锁)
某些使用 HTTP 的浏览器看起来会做网站身份验证,但是基于网站域名的,当遇到 DNS 劫持 / 欺骗时完全无法抵抗
当用户通过钓鱼 WIFI 或者恶意代理,导致服务器的证书被替换时,浏览器会给出提示
证书替换:攻击者使用自己的证书替换掉服务器的证书,通信过程就是用攻击者的证书进行加密,则对攻击者来说就是明文通信
会话劫持:如果登陆采用 HTTPS,则攻击者无法截取到登录的用户名和密码,但是在登录之后会跳转到 HTTP 页面,此时的会话保持如果采用的是 cookie 验证,攻击者可以偷取用户的 cookie 信息,从而不用输入用户名和密码,直接以用户身份登录

# SSL 攻击

SSLStrip:
通过中间人攻击监听 HTTP 流量;
当受害者尝试访问一个安全网站时,通常会通过 HTTP 连接,然后网站会通过重定向响应来引导用户到 HTTPS 加密连接。SSLStrip 会拦截这些重定向响应,并修改它们,使用户保持在 HTTP 连接上,而不是切换到 HTTPS;
与合法的服务器建立 HTTPS 连接,以建立信任;
更改响应内容中的超链接,替换 HTTPS 为 HTTP,并记录;
与用户进行 HTTP 通信,与服务器进行 HTTPS 通信(记录中本应是 HTTPS 的请求),从而明文获取用户信息

# SET

电子商务安全要求:数据传输的安全性,数据的完整性,身份验证,交易的不可抵赖(以通过时间戳、数字签名和数字证书等技术来实现)
电子商务安全:基本加密算法;以基本加密算法为基础的证书认证体系 CA 以及数字信封、数字签名等基本安全技术;以基本加密算法、安全技术、CA 体系为基础的各种安全应用协议
CA 认证体系:CA 证书标准;SET CA;为上层的安全应用协议提供证书认证功能
SET 协议是一种应用于互联网环境,以信用卡为基础的安全电子交付协议;通过 SET 协议可以实现电子商务交易中的加密、认证、密钥管理机制;对不用卡支付的交易方式则与 SET 无关。
关键特征:信息的机密性,数据的完整性,卡用户账号的认证,商家的认证。
参与方:发卡银行,持卡人,网上商家,支付网关,收款行,证书授权
数字信封:发送方使用接收方的公钥来加密对称密钥后所得的数据,其目的是用来确保对称密钥传输的安全性

# 交易过程

交易前认证:采用电子证书,持卡人(发卡机构发放),网上商家(商家金融机构产生,对应每个支付卡品牌),支付网关(持卡人从支付网关证书中获取其加密密钥,用于加密持卡人账号信息),收款 / 发卡行(从支付卡品牌接收)

购买请求:有四个报文组成 —— 发起请求、发起响应、购买请求和购买响应
发起请求:信用卡品牌,ID
发起响应:商家的交易号,证书(用商家的私钥加密)
这两个报文验证通过后生成以下交易具体信息:
PI:支付信息,金额,卡号等,发送给银行
OI:订购信息,发送给商家
PI 和 OI 必须分开加密和签名,以保证用户的隐私不被泄漏
双签名机制,重点 Dual Signature
生成:
● 客户用 Hash 函数对 PI 和 OI 进行散列处理,分别得到订购信息的消息摘要 OIMD 和支付信息的消息摘要 PIMD。
● 将两个消息摘要连接起来再用 Hash 函数进行散列处理,得到支付订购消息摘要 POMD。
● 客户用他的私钥加密 POMD,最后得到的就是经过双重签名的信息。
使用和认证:
● 客户将 “OI + PIMD + 双重签名” 发给商家,将 “PI + OIMD + 双重签名” 发给银行;
● 商家和银行对收到的信息先生成摘要,再与另一个摘要连接起来,如果它与解密后的双重签名(利用客户的公钥)相等,就可确定消息的真实性。
商家看不到顾客账户信息、银行不知道客户的购买信息,但都可确认另一方是真实的。
实际商家获取到的是 “PI + OIMD + 双重签名” 这些信息通过会话密钥 Ks 加密后的新 PI,以及用发卡行的公钥加密后的 Ks(数字信封),商家无法知道真正的 PI

支付授权:商家需要通过支付网关、发卡行得到授权,才能给用户发货,支付授权交换由两个报文组成 —— 授权请求和授权响应
授权请求:PI,双签名,Es(授权有关信息),客户和商家的证书
授权响应:与授权有关的信息 / 获取权标信息 / 证书
支付网关解密数字信封获得会话密钥,验证证书,验证双签名,验证 transiaction ID,从发卡行申请支付

支付获取:由获取请求和获取响应报文组成
获取请求报文由以下几部分组成:支付的数量、交易 ID、获取权标、商人的签名密钥、证书
获取响应报文由以下几部分组成:网关的签名、加密获取相应数据块、网关签名密钥证书

与 SSL 协议的比较