笔记「计算机安全导论」
第一章
安全的基本概念
- 安全需求
- 安全目标
- 安全威胁
- 安全原则
安全目标
CIA
- 机密性: 确保 非授权 用户无法获取信息
- 加密
- 访问控制
- 认证
- 授权
- 物理安全
- 完整性: 确保信息不被 非授权 修改
- 备份
- 校验和
- 纠错码
- 元数据
- 可用性: 确保 授权 用户能够获取和修改
- 物理保护
- 冗余
AAA
- 保证: 信任系统的管理 (东西是真的, 不是伪造的)
- 策略: 指定如何使用信息的规则行为
- 权限: 指定所允许的行为
- 保护: 确保策略和权限正常, 保护整个信任系统
- 真实性: 不可抵赖
- 数字签名
- 匿名性: 记录不与个体属性有关
- 数据聚集
- 数据混淆
- 代理
- 化名
CIA 相互联系, 缺一不可, AAA 是独立的
安全威胁
-
机密性: 窃听
-
完整性: 篡改 (非授权修改)
-
可用性: DoS
-
保证: 伪装 (e.g. 中间人攻击)
-
真实性: 抵赖 (否认数据来源自己或否认接收数据)
-
匿名性: 相关性和追溯 (取证)
-
被动攻击: 非授权收集信息, 如窃听
-
主动攻击: 非授权修改信息, 如删除, 伪造等
访问控制
预防针对 机密性, 完整性, 匿名性 的攻击
为什么有匿名性? 直接防止读取所有数据?
访问控制矩阵
行主体, 列客体, 中间权限
优点: 控制粒度细, 直观
缺点: 矩阵大
- 访问控制列表: 矩阵的列
- 能力列表: 矩阵的行
缺点: 需要遍历
基于角色的访问控制
定义角色和其权限, 主体作为某种角色具有权限. 主体可以有多种角色
优点: 降低了需要记录的规则总数
缺点: 目前的操作系统中尚未实现
密码学相关概念
-
公开算法, 保密密钥
- 更加健壮
- 漏洞被白帽子发现
- 算法很容易被逆向, 密钥不是代码的一部分
- 标准更容易建立
-
对称加密: 加解密用同一个密钥
- 一个通信过程使用一个密钥, 所需管理密钥多
-
非对称加密 (公钥加密): 加解密使用不同密钥
- 公钥公开, 加密消息发送给对方
- 私钥自己保管, 接受到消息后解密
- 公私钥不能互推
- 公钥私钥可以对调
- 接收方只需要保管一个密钥 (私钥), 公钥公开, 发送者随时获取, 不需要管理
- 算法复杂度高, 密钥较长
-
密码学哈希函数
- 单向性
- 抗碰撞
-
数字签名: 使用私钥加密消息或摘要 (哈希值)
-
消息认证码: 同一个密钥, 加密消息并计算其哈希, 发送消息和哈希值, 接收方解密计算哈希并比较
-
数字证书: 可信第三方确认公钥来源于某个个体
-
对密码体制的攻击
- 中间人攻击
- 对加密机制
- 对数字签名
- 暴力
- 中间人攻击
实现和可用性相关问题
- 效率和可用性
- 高效
- 对用户来说不应该复杂
- 密码
- 口令
- 字典攻击
- 口令
- 社工
- 假托: 编造故事让管理员相信
- 诱饵: 提供一个好处, 让管理员进行不安全操作
- 相等补偿: 提供一个操作或服务, 并期望有所回报 (什么东西)
- 绕过计算安全解决方案的一种非常有效的方法
- 程序代码的脆弱性 ?
第二章 物理安全
- 物理入侵
- 硬件攻击
- 窃听
- 物理接口攻击
锁
略
电子密码锁
- 电子密码
- 磁卡
- 智能卡 SIM
- RFID
- 生物特征识别
身份认证
- 条形码, 二维码
- 容易被复制
- 信息容易泄漏
- 磁条卡
- 容易读取和赋值
- SIM: 有一个微处理器, 可以通过接口读写卡上的数据
- 一张卡对应网络提供商数据库中的一条记录
- ICCID: 集成电路 ID
- IMSI: 国际移动用户标识, 卡的 ID
- 128bit 的密钥
- 访问还可能需要 PIN
- RDFI: 射频识别
- 发送和接收无线电波, 无源
- 需要专用的读写器
- 广泛用于产品跟踪如护照上
生物特征识别
要求:
- 普遍性: 每个人都有这个特征
- 独特性: 每个人的特征差异明显
- 持久性: 特征不随时间变化
- 可收集性: 能够量化, 进行比对确认
优点:
- 安全性高
- 方便快捷
- 难以篡改
缺点:
- 精度问题
- 隐私问题
隐私问题:
- 数据库受到攻击, 可能规避生物特征识别系统, 或者获得个人隐私信息. 而生物特征数据不会随时间改变, 一旦被泄漏, 危害性是永久的
- 生物特征识别并不能完全匹配, 因此比较不能用哈希, 即存储和传输的信息不能用哈希, 难以做到机密性存储和传输
物理攻击
- 环境攻击
- 电力: 断电
- 温度: 加温 / 降温使芯片不工作
- 电导: 短路设备
- 窃听
- 搭线窃听: 窃听同轴电缆 (信道) 的信号
- 防御: 双绞线, 光纤, 信息加密
- 射频辐射: 屏幕射频信号, 可见光反射等
- 声音辐射: 监听声音, 侧信道, 如键盘声音重建输入内容
- TEMPEST, 限制计算机的电磁辐射, 防御侧信道攻击
- 键盘记录器
- 搭线窃听: 窃听同轴电缆 (信道) 的信号
- Live CD: 外部引导 OS, 启动计算机读取内部信息
- 取证
物理入侵检测
保安, 摄像头
ATM
物理安全
- 与地面固定
- 有锁定机制和传感器, 防止物理入侵
- 受到破坏, 现金将不可用 (损坏等)
加密
GSM 挑战 - 响应协议
SIM 有 ID 和密钥, 基站存储了 ID 和其对应的密钥
- SIM 向基站发送 IMSI
- 基站发送 128bit 随机数
- SIM 用密钥加密, 发回给基站
- 基站用对应的密钥解密, 如果匹配, 则允许 SIM 接入网络
伪基站: 由于只有基站认证用户, 所以可能导致伪基站
解决: 增加用户对基站的认证机制
第三章 操作系统安全
只记没见过的东西
进程安全
引导顺序
- 加载 BIOS
- BIOS 决定从哪个设备加载引导程序
攻击:
- hack BIOS!
- 让 BIOS 加载外部介质的引导程序, 启动计算机, 访问内部信息 (Live CD)
防御:
只允许授权用户从外部介质引导启动计算机, BIOS 设置密码
休眠
休眠会将内存存储在硬盘上, 然后恢复
攻击:
- 从休眠文件中获取敏感信息
- 修改休眠文件, 恢复后即可控制计算机
防御:
硬盘加密
监控 管理 日志
OS 监控操作, 管理进程, 记录日志, 用以检查攻击和溯源
内存与文件系统安全
- 虚拟内存安全
- 虚拟内存页面会存储在硬盘上 (换页需要)
- 针对硬盘数据的攻击防御, 与休眠的类似
- 基于口令的身份认证
- 存储口令的哈希值, 对比哈希值
- 口令盐: 用一个随机数对口令加密, 存储其哈希值, 存储随机数 (增加攻击难度)
第四章 恶意软件
内部攻击
内部人员利用漏洞进行攻击
- 后门
- 逻辑炸弹: 一定的逻辑进入后门?
nmd 能讲人话吗
防御:
- 避免单点故障
- 代码审查
- 使用归档和报告工具
- 限制授权和权限
- 物理安全
- 监控员工行为
- 控制软件安装
病毒
能够 自我复制 的一段代码, 通过 修改其他文件 (感染) 来插入代码, 进行进一步自我复制
(和生物病毒很像, 需要宿主复制自己)
复制需要用户的某些操作
特征:
- 传播性: 通过网络等方式进行传播
- 隐蔽性: 难以找到病毒
- 感染性: 感染其他可执行程序, 被执行时便可自我复制
- 潜伏性: 满足条件后才会执行恶意操作
- 可激发性: 有一定的逻辑才被触发
阶段:
- 潜伏阶段: 存在但是什么也不做
- 繁殖阶段: 自我复制, 感染新文件
- 触发阶段: 满足一定条件后, 开始执行一些操作
- 行动阶段: 执行恶意操作
隐藏:
- 加密病毒: 包含加密模块和解密模块, 每次感染使用随机密钥加密自身, 解密模块相同
- 由于解密模块相同, 对比解密模块便可知是否是病毒
- 多态病毒: 包含加密模块和解密模块, 加密模块还有个多态引擎, 每次感染, 多态引擎修改加解密模块, 使得每份病毒的代码都不相同
- 在模拟器上解密病毒后, 才可以对比 (解密后的病毒是一样的)
- 变形病毒: 包含变形引擎, 每次感染, 病毒自身完全更改
- 难以检测
防御:
- 特征码: 唯一标识一个病毒的序列
- 检测与隔离: 定期扫描或检测新文件, 是否包含特征码, 包含则将文件隔离存放
恶意软件
木马
隐藏在系统中用以完成未授权功能的非法程序, 伪装成合法程序
不感染其他程序, 不进行复制传播
基于客户端服务器结构
过程:
- 服务端植入受控机器
- 通过安装或启动服务端
接着就可以链接服务端, 控制计算机
防御:
- 防火墙, 受控计算机启动服务端需要开端口, 容易被检测
蠕虫
不需要注入其他程序能够传播, 不需要与人交互
防御:
- 扫描文件特征码
- 在网络层扫描数据包, 检测蠕虫, 防止传播
Rootkit
隐藏进程的恶意程序, 加载在内核中, 有最高权限
防御:
- 扫描文件, 更新软件, 安装防火墙
有工具可以找出 Rootkit, 删除 Rootkit 必须重装系统
0 day
略
防御:
僵尸网络
控制多个主机, CC 服务器发送命令给僵尸网络, 让他们对某一个目标进行攻击, 如 DDoS.
入侵隐私软件
不破坏系统, 而是获取用户的敏感信息
- 广告软件
- 间谍软件
- 流氓软件
无法检测所有恶意软件
假设有一检测软件为 SuperKiller 可以检测所有恶意软件并阻止其行为, 那么设计恶意软件 UltraWorm 如下:
|
|
如果 SuperKiller 认为 UltraWorm 是恶意软件, 那么 UltraWorm 将什么也不做, 与他是恶意软件矛盾
如果 SuperKiller 认为 UltraWorm 不是恶意软件, 那么 UltraWorm 将进行恶意行为, 与 SuperKiller 可以检测所有恶意软件矛盾
第五章 网络安全
网络安全相关问题
CIA:
- 机密性: 网络协议的任何分层都没有要求数据机密性, 需要修订协议. 如在应用层 (TLS) 或者网络层 (IPSec)
- 完整性: 数据包只有简单的校验和, 但不在密码学意义下安全, 不能够提供安全层面的完整性
- 可用性: 仅考虑了节点故障时的可用性, 没有考虑攻击者存在的问题, 如 DoS 可以轻松影响可用性
AAA:
- 保证: 数据包能在任意两个节点之间传输, 没有控制策略, 权限, 保护
- 真实: 协议没有用户身份的概念, 数据包没有签名之类的东西, 不可溯源. 如需引入, 必须在应用层
- 匿名: 协议没有用户身份的概念, 具有内在的匿名性
数据链路层
ARP 欺骗
ARP 地址解析协议: 将网络层地址解析为硬件地址
- 主机广播 ARP
- 目标机器对比 ARP 中的 IP, 如果是自己的, 则回复 ARP 报文, 包含自己的 MAC
- 主机接收到消息后将 IP 与 MAC 缓存, 共之后查询
ARP 欺骗, 中间人攻击:
- Alice 广播 ARP 请求 Bob 的 MAC
- Bob 给 Alice 发送响应报文, Alice 建立 Bob IP - Bob MAC 的缓存
- Eve 给 Alice, 发送伪造的 ARP 响应报文, Alice 覆盖之前的缓存, 建立 Bob IP - Eve MAC
- Eve 给 Bob 发送伪造的 ARP 回复报文, Bob 覆盖之前的缓存, 建立 Alice IP - Eve MAC
任何接收 ARP 响应报文的计算机, 即使没有发送过请求报文, 都会更新 ARP 表
防御:
- 检测相同的 MAC 地址在网络中出现多次 (ARP 回复报文, 多个 IP 对应同一个 MAC), 将其作为是否存在 ARP 欺骗的标志
- 静态 ARP 表: 手动添加 ARP 缓存
- 使用软件检查 ARP 包, 检测并防止 ARP 欺骗
网络层
ICMP traceroute
IDA*, 不断加 TTL, 知道到目标之间的所有节点以及路程信息(延迟等)
IP 地址欺骗
将发送的 IP 包中的源 IP 地址修改成另一个 (非自己的)
接收不到回复
如 DoS, 受害者可能有策略, 拒绝同一个 IP 的连续请求. 这样使用 IP 地址欺骗可以绕过
用于规避防火墙策略, 进行 TCP 会话劫持
防御:
- 配置边缘路由器 (链接多个子网的路由器). 由于他知道哪些 IP 是在子网内的, 假如有一个源 IP 不在子网内的包从子网发送, 则一定是子网内有 IP 欺骗; 同理一个源 IP 在子网内的数据向子网发送, 那么一定是错误的.
- IP 追踪, 查询到数据包的实际地址
数据包嗅探
抓包
防御:
- 防御抓网络上的流量: 降低能够被抓的流量, 使用交换机而不是集线器 (什么东西), 对无线网无效
- 防御计算机上存在恶意抓包行为: 检测网卡是否被设为混杂模式? 处理数据包较慢, 有对无效的数据包的响应
- 防御隐私泄漏等: 加密流量
传输层
TCP 会话劫持
TCP 序列号预测
- DoS Client, 使其不能与 Server 通信
- 向 Server 发送 SYN, 并将 IP 伪造成受害者 Client, 试图与 Server 建立会话
- 等待 Server 响应 (即使攻击者接收不到), 发送预测的序列号 ACK, 也要改 IP 为受害者的
只有单向的向服务器发送请求, 接收不到响应
盲注入
使用受害者 IP 向 Server 发送某种带命令的数据包 (取决于服务器功能, 执行一些命令), 控制 Server
ACK 风暴
攻击者伪造 Clinet IP 向 Server 发送数据时, Server 向 Client 发送回复, 而此时的 Client 没有发送数据包, 自己的序列号和收到的 ACK 不一致, 于是向 Server 发送 ACK 用以同步. 而 Server 发出了一个数据包, 同样导致序列号不同步, 又发出 ACK 请求同步. 这就导致一直存在 ACK 循环.
完全会话劫持
攻击者 与 Clinet 或 Server 在同一网段时, 攻击者可以在网络上抓包, 得到建立会话时所用的序列号. 配合 ARP 欺骗, 便能够收到 Server 给 Client 的响应, 达到传输层的中间人攻击
DoS
- ping 泛洪
- Smurf 攻击: 广播 ICMP ping, 将回复地址设为受害者, 让网络中的其他主机去给受害者发消息
- 防御: 路由器忽略广播请求; 避免向广播地址转发数据包 (?); 主机忽略 ping 请求
- 泪滴攻击: 伪造分割数据包的位移信息
- UDP DoS
- HTTP DoS
- 僵尸网络 DDoS
- SYN 泛洪
- 防御: SYN Cookie 机制, 带时间戳并加密序列号等
- TCP ACK 攻击: ACK 泛洪?
- 防御: 限制客户端的最大流量
防御:
- 对占用带宽太多的源地址的所有数据进行丢弃
- 随机丢弃一部分请求
应用层
DNS
迭代域名解析 example.com
- 询问 . (root name server), 返回 com.
- 询问 com. (com name server) 返回 example.com
- 询问 example.com (example.com name server) 返回 IP
权威域名服务器 (ANS): 负责某些特定的域名?
攻击:
- 网络嫁接: 将域名解析成假的 IP, 进行网络钓鱼等
- DNS 缓存中毒: 攻击 DNS 服务器, 使得服务器上的某条 DNS 缓存指向恶意 IP 地址
- Eve 向 DNS 服务器发送 DNS 查询一个 ANS 管理的域名, 这样 DNS 服务器会发送请求
- Eve 向 DNS 服务器发送伪造的 DNS 响应, 其源 IP 伪造成 ANS 服务器的 IP, 查询结果设置为恶意 IP
- DNS 服务器更新缓存, 任何向该 DNS 服务器请求该域名时, 均会返回恶意 IP
- (DNS 请求时还有一个事务 ID (标识符), 响应也有一个 ID, 两个 ID 一致, 才会接受响应的结果, 所以必须要知道 DNS 服务器的下一个查询 ID, 并且在真正的 ANS 响应之前, 将伪造的响应发送给 DNS 服务器)
防御 DNS 缓存中毒:
- 随机事务 ID
- 随机端口
- DNSSEC: 数据签名, AAA 中的保证
防火墙
规则:
- 允许
- 丢弃
- 拒绝: 不允许通过, 并通知源端数据包被拒绝
分类:
- 无状态防火墙: 过滤数据包
- 状态防火墙: 记录信息如 IP 地址, 端口, 数据包类型等, 还可以确定会话链接, 比如可以只允许内网的 TCP
- 应用层防火墙: 还会分析 payload 的内容, 恶意 payload 阻止数据包
隧道
加密通信过程, 隧道可以加在任意一层
- ssh: 传输层 TCP 加隧道
- IPSec: 网络层加隧道
- VPN:
- 远程访问 VPN: 通过一个公网服务器接入内网 (隧道在网络层? 应用层的协议都可以通过 VPN?)
- 站点到站点 VPN: 物理隧道, 链接公网服务器与内网
ssh 过程
- Client 通过一个 TCP 会话链接服务器
- Client 与 Server 交换管理细节, 如支持的加密方法, 协议版本. 每一方选择另一方支持的一组协议
- Client 与 Server 进行密钥交换, 用会话密钥加密通信
- Server 发送可以接收的身份验证列表 (验证方法?), 客户端按顺序尝试, 使用公钥或者密码
- 公钥:
- Client 发送公钥
- Server 验证公钥是否存在已授权列表中, 存在则用其加密发送挑战
- Client 用私钥解密发回 Server
- 认证完成, 客户端可以访问服务端相应资源, 如 shell
入侵检测
入侵, 威胁机密性, 完整性, 可用性
- NIDS: 基于网络入侵检测, 位于网络边界, 基于流量模式和内容
- PIDS: 基于协议入侵检测, 专门检测某种特殊协议, 通常部署在特定网络主机中
- HIDS: 基于主机入侵检测, 部署在主机中, 监控主机的网络
IDS 使用的字段:
- 主体: 入侵的发起者
- 对象: 目标资源, 如文件, 命令, 设备或网络协议
- 操作: 主体对对象正在执行的操作
- 异常条件: 操作所产生的任何错误消息或异常条件 (操作的返回值或报错)
- 占用的资源: 系统执行或响应该操作所需的定量项
- 时间戳
IDS 还可能利用其他字段, 取决于实现
类型:
- 基于规则: 匹配特定操作
- 基于统计信息
谬误:
假阳性, 假阴性, 真阳性, 真阴性
准确率, 样本不平均时, 准确率高不代表模型好, 要考虑 recall 什么的
比如 99% 准确率, 但是 1,000,000 个良性中检测出了 10,000 个假阳性, 100 个恶性中检测出了 1 个假阴性, 那么有 10,000 + 99 个警报, 其中很大部分都是误报
蜜罐
引诱入侵, 收集入侵的信息和证据
主动防御
无线网
略, 不是会了, 是看不下去了
第七章 Web
网络钓鱼
URL 混淆: 域名使用用相似的字母, 但是 Unicode 不同
移除 / 伪造地址栏: 在顶部伪造假的地址栏 (全屏时才可能达到效果, 好没用啊)
图像崩溃
IE 的 bug? HTML 里写非常大的图片, 会造成浏览器崩溃
可移动代码
什么东西?
ActiveX 控件: IE 浏览器的插件, 可以代表浏览器执行二进制代码, 没沙箱, 非常不安全. 任何站点都可以允许控件
Java 程序: 站点自行嵌入, 运行在沙箱, 用户允许可以不在沙箱中运行
Cookie
在会话中保存状态信息, 下次访问时发送给服务器, 无需再次填写
cookie 可以在 本地 保存任何信息, 容易被非法利用
cookie 攻击:
- 直接访问文件
- 传递时截取
- 修改 cookie
防御:
- 不保存敏感信息
- 加密
- 校验
- …
XSS
跨站脚本
略
防御:
- 基于代理:
- 分析浏览器和服务器之间的 HTTP 通信量
- 寻找特殊字符
- 执行 Web 页面前进行编码
- 应用层防火墙:
- 分析可能泄漏信息的超链接
- 停止不良请求链接
- 审计:
- 监视代码的执行, 检测恶意行为
SQL 注入
略
防御:
- 预编译语句, 绑定变量
- 过滤用户输入
- 使用安全函数
- 不使用动态 SQL, 使用存储过程等
- 最小权限, 避免 Web 应用直接使用 root 等
第八章 密码
- 唯密文攻击: 只知道 c
- 已知明文攻击: 知道一组 m 和 c
- 选择明文攻击: 知道任意 m 对应的 c
- 选择密文攻击: 知道任意的 c 对应的 m
加密算法应该满足:
- 混淆性: 明文, 密文, 密钥之间的关系要相当复杂, 使得无法分析
- 扩散性: 明文或密文的一个比特的变动, 能够使密文发送极大的变动
- 非线性: 线性的话明文, 密文, 密钥关系就不复杂了, 不行. 这里的线性不止一次方程, 任意次多项式方程也算 (除非够多?)
- 差分均匀性: ?
- 密钥量大, 不可枚举
流密码
key 为随机生成的比特流, 对明文的每个对应的比特进行加密 (如对应位异或)
一次一密
不过由于完全随机做不到, 所以不是真正意义上的一次一密
分组密码
明文流分成等长的串, 每串用相同的算法和密钥加密
弱明文, 弱密钥: 一组 (m, c), 能够轻易解出 k, 则 m 是弱明文, z 是弱密钥
分组密码要求不存在弱明文和弱密钥
设计准则:
- 安全性: 抗已知明文/密文攻击
- 简洁性
- 有效性
- 透明性
- 灵活性: 明文分组长度可变, 算法可变形
- 加解密相似性: 加解密算法相同, 仅密钥不同, 密钥可互推
一些分组密码:
- DES
- IDEA
- AES
AES 128
128 位分为一组
明文写成 $4 \times 4$ 的状态矩阵, 共 16 个字节, 128 bit
先对 128 位的密钥进行变换, 得到 11 个 128 bit 的 轮密钥
先用第一个轮密钥异或上明文 (状态矩阵)
接下来进行 10 轮操作, 每轮如下:
- S 盒替换: 一张表, 以字节为单位, 把状态矩阵的每个字节都替换掉
- 行移位: 移动行的位置
- 列混合: 与一个固定的矩阵相乘
- 轮密钥加: 异或上轮密钥 (每次的轮密钥都不一样)
EBC / CBC
电子密码本: 每个一样的明文都会加密成一样的密文, 在图像中可能会出现加密后可识别的模式
密码分组链接: 这一块加密(明文异或上一次的密文), 即 $C_i = E_K(C_{i-1} \oplus P_i)$, $C_{-1} = V$, 初始化向量, 多传输一个这个
CBC 优点:
- 没有在密文中泄漏明文的模式
- 最常用的模式之一
- 快速且相对简单
CBC 缺点:
- 数据块需要有序可靠传输
- 不使用于允许丢失的传输, 如视频流
公钥密码
单向函数: 已知 x 求 f(x) 简单, 已知 f(x) 求 x 非常困难
陷门单向函数: 知道陷门后, 求逆简单
RSA
取一个 $n = pq$, $p, q$ 是质数, $\Phi(n) = (p-1)(q-1)$
取一个 $e$ 满足 $(\Phi(n), e) = 1, 1 < e < \Phi(n)$, (即 $e$ 在 $\Phi(n)$ 下有逆元)
- 公钥: $n, e$, 加密 $E_{(n, e)}(M) = M^e \mod n$
- 私钥: $d = e^{-1} \mod \Phi(n)$, 解密 $D_d(M) = M^d \mod n$
密码学哈希函数
- 抗原像攻击: 已知 $x = H(P)$, 难以求出 $P$
- 抗第二原像攻击 (抗弱碰撞): 已知 $x = H(P)$, 难以找出 $Q \ne P$, 使 $H(Q) = H(P)$
- 抗碰撞攻击 (抗强碰撞): 找出不同 $P, Q$, 使 $P \ne Q$
生日攻击:
20 多个人一定有两个人生日相同
看不懂 qaq
生成 n 个不同的哈希值 (hash(人) = 生日, 哈希空间 365), 找到碰撞 (生日相同) 的机率较大?
结论: 哈希函数的安全长度是原长的一半
第九章 安全模型
策略 模型 信任
策略:
- 主体
- 客体
- 动作 (操作)
- 权限
- 保护
模型:
- DAC: 访问控制矩阵等
- MAC: 主体和客体被赋予安全等级, 等级之间有一些安全约定
信任管理:
- 主体: 可以在系统上执行操作的用户, 进程或其他实体
- 策略: 就是制定的规则, 制定赋予主体哪些权限, 能执行那些操作
- 凭证: 数字签名的文件, 将主体身份与允许的行为绑定, 包括允许主体将权限委托给其他主体的权限
- 操作: 与系统安全相关的结果
Kerberos
基于可信第三方
- 身份验证服务器 (AS)
- 票据授予服务器 (TGS)
- 目标服务器
AS + TGS = KDC
- 票据授予票据 (TGT): 向 TGS 要服务票据
- 服务票据: 向 Server 要服务
过程:
KeyA: Client, KDC KeyB: KDC 生成的, 给 Client 和 Server 用 KeyC: KDC, Server
- Client 向 AS 发送自己的信息
- AS 产生 TGT 并用 KeyA 加密, 发回给 Client
- Client 有了 TGT
- Client 将 TGT 和所要请求的服务发给 TGS
- TGS 产生 KeyB, 并用 KeyA 加密
- TGS 产生 Service Ticket (包含 KeyB), 并用 KeyC 加密
- TGS 向 Client 发送 $K_{KC}(Service_Ticket + KeyB)$, $E_{KA}(KeyB)$
- Client 有了 KeyB, $K_{KC}(Service_Ticket + KeyB)$
- Client 向 Server 发送 $K_{KC}(Service_Ticket)$, $KeyB(\text{身份信息})$
- Server 解密得到 Service Ticket, KeyB
- Server 用 KeyB 解密得到 Client 的身份信息
优点:
- 分布式, 可在不安全的网络中安全通信
- 每次传输都加密, 无法伪造票据
- 防止重发攻击?
- 对称加密, 快速高效
缺点:
- 单点故障整个 KDC 不可用
- KDC 保存大量信息, 如果被攻击则会泄漏
- 使用时间戳, 要求同步