计算机和网络安全课程笔记 Week 7
目录
秘密分割 (Secret Splitting) & 秘密共享 (Secret Sharing)
- 秘密分割 (Secret Splitting)
- 问题:如何将一个秘密分发给多人,使得任何单一份都没有用?
- 场景:CEO 保护秘密配方免受工业间谍窃取。
- 使用 XOR 进行秘密分割 (Secret Splitting with XOR)
- 流程:
- Trent 生成与消息 $m$ 等长的随机字符串 $r$。
- 计算 $s = m \oplus r$。
- 将 $r$ 交给 Alice,将 $s$ 交给 Bob。
- 秘密碎片 (shadows):$r$ 和 $s$。
- 恢复秘密:Alice 和 Bob 计算 $s \oplus r = m$。
- 安全性:如果 $r$ 是真随机的,则系统是完美安全的 (类似 One Time Pad)。
- 扩展到 $n$ 人:生成 $n-1$ 个随机字符串 $r_1, \dots, r_{n-1}$。前 $n-1$ 人各持一个 $r_i$,第 $n$ 人持 $r_1 \oplus \cdots \oplus r_{n-1} \oplus m$。
- 目的:通过分发信任增强可靠性,不增加风险。
- 流程:
- XOR 秘密分割的问题 (Issues with secret splitting with XOR)
- 系统由 Trent 裁决 (adjudicated)。
- Trent 可能分发错误信息。
- Trent 可能欺骗参与者数量。
- 所有参与者知道消息长度。
- 消息是可塑的 (malleable)。
- 需要所有参与者才能恢复秘密。
- 系统由 Trent 裁决 (adjudicated)。
- 秘密共享 (Secret Sharing)
- 问题:管理公司资金,需要多于某个门限的参与者同意才能执行操作。例如,(3, 5) 门限方案需要 5 人中的至少 3 人同意。
- 目标:确保没有单个人或一对参与者可以执行操作。
- Shamir 秘密共享 (Shamir’s Secret Sharing - SSS)
- 算法:将秘密分割成 $m$ 份,任意 $n$ 份即可重建秘密。
- 基础:一个 $n$ 次多项式可以由 $n+1$ 个点唯一确定。
- 流程 (Trent 将秘密 $m$ 分发给 $n$ 用户,任意 $t$ 个用户可恢复 $m$):
- 选择素数 $p > \max{m, n}$。
- 创建 $t-1$ 次多项式 $f(x) = m + a_1x + \cdots + a_{t-1}x^{t-1}$,其中 $a_i$ 是 $0 \le a_i < p$ 的随机独立系数。 ($f(0) = m$)
- Trent 选择 $n$ 个不同的点 $x_i$ ($1 \le x_i < p$)。
- Trent 将点 $(x_i, f(x_i))$ 交给第 $i$ 个人。
- 恢复:任意 $t$ 个参与者汇集他们的点 $(x_i, f(x_i))$,通过插值重建 $f(x)$,然后计算 $f(0)$ 恢复 $m$。
承诺协议 (Commitment Protocols)
- 承诺方案 (Commitment Schemes)
- 问题:Alice 向 Bob 发送消息,但只允许 Bob 稍后凭 Alice 提供的信息揭示,且 Bob 能验证消息未被篡改。
- 承诺阶段 (Commitment)
- Bob 生成随机字符串 $r$,发送给 Alice。
- Alice 生成随机密钥 $k$,发送 Bob 加密消息 $E_k(r \parallel m)$。
- 揭示阶段 (Revelation)
- Alice 发送密钥 $k$ 给 Bob。
- Bob 用 $k$ 解密,验证 $r$。
- 讨论:
- $r$ 用于保证新鲜度 (freshness),防止 Alice 寻找碰撞。
- Alice 发送 $E_k(r \parallel m)$ 时必须承诺 $m$。
- Bob 在揭示前不知 $k$。
- 非交互式比特承诺 (Non-interactive Bit Commitment)
- 特点:Bob 无需发送消息。
- 承诺阶段 (Commitment)
- Alice 生成随机 $r, s$,计算 $a = h(r \parallel s \parallel m)$ (blob),$h$ 是密码学哈希函数。
- Alice 发送 $(r, a)$ 给 Bob。
- 揭示阶段 (Revelation)
- Alice 发送 $(s, m)$ 给 Bob。
- Bob 验证 $h(r \parallel s \parallel m)$ 是否等于 $a$。
- 讨论:
- Alice 发送两次消息(承诺和揭示)。
- 哈希函数的抗碰撞性阻止 Alice 更改消息。
- $s$ 保密防止 Bob 暴力破解 $m$。
基于承诺协议/公钥的协议 (Protocols using Commitment/Public Keys)
- 使用承诺方案进行公平掷币 (Fair Coin Flipping using Commitment Schemes)
- 问题:互不信任的 Alice 和 Bob 如何公平掷币决定先后。
- 流程:
- Alice 使用承诺方案承诺一个比特 $b$ (结果)。
- Bob 猜测 $b$。
- Alice 揭示 $b$。猜对者获胜。
- 安全性:依赖承诺方案的安全性 (隐藏性和绑定性)。
- 使用公钥进行公平掷币 (Fair Coin Flipping using Public Keys)
- 要求:可交换的公钥密码系统 (commutative public key cryptosystem) $E_A(E_B(m)) = E_B(E_A(m))$。
- 流程:
- Alice 和 Bob 生成可交换公钥对 $A, B$。
- Alice 生成秘密随机数 $r_H, r_T$。
- Alice 以随机顺序发送 $E_A(\text{heads}, r_H)$ 和 $E_A(\text{tails}, r_T)$ 给 Bob。
- Bob 选择一个加密消息 $E_A(a)$,发送 $E_B(E_A(a))$ 给 Alice。
- Alice 解密 ($E_B(a)$),发回 Bob。
- Bob 解密 ($a$),得知结果,发回 Alice。
- Alice 验证结果是否匹配其 $r_H/r_T$。
- 讨论:
- 自强制 (self-enforcing):双方都可检测作弊,无需第三方。
- Bob 先知结果。他不能改结果,但可延迟 (“扔进井里”)。
- 可用于会话密钥生成,双方不能影响结果。
- 心理扑克 (Mental Poker)
- 问题:如何用可交换密钥公平发牌。
- 流程:
- Bob 用秘密密钥加密 52 张牌,随机顺序发给 Alice。
- Alice 随机选 5 张加密牌发 Bob,Bob 解密得手牌。
- Alice 另选 5 张加密牌,用自己密钥加密发 Bob,Bob 解密再发回 Alice,Alice 解密得手牌 (发更多牌重复 2, 3)。
- 游戏结束,双方揭示秘密密钥验算是否作弊。
- 进一步阅读。
隐蔽信道 (Covert Channels) 与隐写术 (Steganography)
- 隐蔽信道 (Covert Channels)
- 问题:Alice 和 Bob 在 Walter 监听下秘密通信。Walter 可能插入虚假消息。
- 隐写术 (Steganography):信息隐藏技术。
- 不是密码学,是“通过模糊达到安全” (security through obscurity)。
- 通常与密码学结合使用。
- 文本隐写术 (Text Steganography)
- 方法:
- 计算句子词数奇偶性编码比特。
- 同义词替换。
- 句法替换。
- 上下文同义词替换和顶点编码。
- 方法:
- 图像隐写术 (Image Steganography)
- 原理:修改像素值的最低有效位 (least-significant bit - LSB)。
- 对图像质量影响微乎其微,肉眼难以察觉。
- 例如,32x32 灰度图每个像素改 1 比特,可隐藏 1024 比特 (128 字符)。
- 彩色 (RGB) 图像每像素可用 3 比特 (每个颜色分量 1 比特)。
- 分辨率加倍可隐藏数据量翻四倍。
- 可接受更多质量损失,如每像素用 6 比特。
- 存在抵抗有损压缩和调整大小的技术。
- 原理:修改像素值的最低有效位 (least-significant bit - LSB)。
- 网络隐写术 (Network Steganography)
- 方法:
- Loki: 利用 ICMP Echo 请求/回复数据字段。
- ICMP Backdoor: 伪装成 ping 包分段。
- Rwwwshell: 伪装成 HTTP Response 和 HTTP GET。
- AckCmd: 利用 TCP ACK 包。
- 可用于穿透防火墙。
- 方法:
网络安全概述 (Network Security Overview)
- 网络安全的挑战 (Challenges of Network Security)
- 互联网设计时缺乏安全性,存在许多漏洞。
- 操作系统、协议栈 (IP, 802.11/WEP)、用户协议 (Telnet, FTP, HTTP)、网络协议 (BGP, DNS)、管理协议 (SNMP)、编程语言。
- 缺乏合适的基础设施和高质量开发者。
- 糟糕的设计和编程实践。
- 信息泄露风险。
- 系统 24x7x365 暴露于外部。
- 妥协风险增加导致风险提高。
- 攻击者易于发起攻击并逃脱,缺乏国际司法管辖。
- 安全总是滞后的,响应慢。
- 安全常被视为成本中心。
- 互联网的同质性与异质性并存。
- 政治、出口限制、专利问题。
- 使用互联网的人类因素。
- 互联网设计时缺乏安全性,存在许多漏洞。
- 互联网的同质性 (The Internet is a Monoculture)
- 许多软件 (OpenSSL, Windows, Bind, Apache/Nginx) 市场主导。
- 软件副本相同,一个版本漏洞影响所有副本。
- 攻击流行软件导致大规模机器被控。
- IoT 设备快速普及,安全性不足。
- 关于安全的常见信念 (Common Beliefs about Security)
- “保护边界即可保证内部安全”是错误假设。
- 现代网络没有清晰边界。
- 不能信任任何人。
- 进入网络途径众多:互联网连接、未更新的老旧机器、无线网络、第三方连接。
- 用户是 90% 的问题源,且已在内部。
- 安全漏洞 (Security Flaws)
- 现代安全问题与过去相似,只是技术普及导致漏洞增多。
- 许多源于缺乏强认证 (lack of strong authentication)、糟糕编程 (bad programming)、差劲管理 (poor security administration)。
- 特定攻击 (Specific Attacks)
- 分布式拒绝服务攻击 (Distributed Denial of Service - DDOS)
- 目的:使目标服务不可用。
- 原理:利用大量机器发送大量请求淹没目标。
- 历史案例:2000 年 2 月多网站遭遇 DDOS 中断 (Yahoo, Ebay, Amazon, CNN, ZDnet, E*trade)。攻击方式包括放大 Ping 和 SYN floods。
- 僵尸网络攻击 (Botnet Attacks)
- Conficker 蠕虫 (2008):
- 目标:Microsoft Windows。
- 后果:创建了计算能力超强的僵尸网络。
- 特点:能通过变体抵抗,修复自身漏洞,更难阻止。
- 利用漏洞 (MS08-067),即使补丁已发布,大量机器 (>=30%) 未及时更新仍受影响。
- Conficker 蠕虫 (2008):
- 分布式拒绝服务攻击 (Distributed Denial of Service - DDOS)
可能的考法与示例考题
- 理解秘密分割 (Secret Splitting)和秘密共享 (Secret Sharing)的区别及其应用场景。Shamir 秘密共享如何解决 XOR 分割的局限性?
- 承诺协议 (Commitment Schemes)的基本流程和重要属性(如隐藏性 hiding 和绑定性 binding)。它们在公平掷币中的作用。
- 基于公钥的公平掷币协议流程,理解可交换性的作用以及为何它是自强制的。
- 隐写术 (Steganography)的定义、与密码学的区别,以及不同类型(文本、图像、网络)的隐写术原理。
- 互联网安全面临的挑战,如固有漏洞、缺乏基础设施/人才、人类因素等。
- 互联网作为同质化单点故障环境的含义及其对安全的影响。
- 理解常见安全信念的错误性,如“保护边界”,以及现代网络模糊的边界和多种攻击途径。
- 掌握DDOS和僵尸网络等典型网络攻击的原理和危害,能够结合 Conficker 等案例进行说明。