安全工程

当你通过 HTTPS 连接一个网站,几毫秒内发生了很多事:你的浏览器和服务器在从未见过彼此的情况下协商出一个只有它们知道的会话密钥;浏览器验证了服务器的身份,而不只是”它看起来像那个网站”;传输的内容对沿途的所有人不可读;会话结束后密钥销毁,下次连接重新协商。整个过程不需要信任网络,不需要信任运营商,不需要信任任何中间节点。

这是密码学的成就:它把信任从社会契约变成了数学证明。你不需要相信对方人品好,不需要相信网络不被监听——你只需要相信数学。

但密码学只是地基。地基之上是一套工程决策:谁被允许访问系统(身份),他们被允许做什么(授权),当你无法再信任网络边界时如何重建安全(零信任),当你依赖的代码本身可能被投毒时如何管理信任(供应链)。

现在,AI 在挑战这些工程决策的根基。传统安全的隐含前提是:系统是确定性的,输入是数据,行为是代码决定的。AI 系统打破了这三点——输入可以是指令(Prompt Injection),行为是概率性的,“代码”本身是用数据(训练集)写的。威胁模型不只是多了几个新漏洞,是底层假设变了。

这个系列把安全工程当作一个统一的问题:在对抗性环境下,数字系统的信任从哪里来,如何被验证,又如何被打破?

密码学用数学回答。安全实践用架构回答。AI 时代迫使我们重新提问。


一、目录

本系列共 11 篇文章,分三层:密码学基础(01-05)提供数学根基,安全实践(06-09)覆盖工程方法,AI 时代(10-11)探索新边界。

80-security/
├── 00-security-MOC.md                                         ← 本文件

├── 10-cryptography/                                           # 密码学基础(40%)
│   ├── 01-密码学:数字信任的数学基础.md                       ← 计算安全定义 / 密码原语组合
│   ├── 02-对称加密:速度与密钥分发的博弈.md                   ← AES / GCM / AEAD / 前向保密
│   ├── 03-非对称加密:公钥如何打破信任的先决条件.md           ← RSA / ECC / DH 密钥交换
│   ├── 04-散列函数:完整性的数学定义.md                       ← SHA-256 / bcrypt·Argon2 / HMAC
│   └── 05-数字签名与 PKI:信任链如何落地.md                    ← X.509 / CA 体系 / TLS 握手

├── 20-practices/                                              # 安全实践(40%)
│   ├── 06-威胁建模:用攻击者的眼睛看系统.md                   ← STRIDE / 攻击树 / 数据流图
│   ├── 07-身份:认证证明你是谁,授权证明你能做什么.md         ← AuthN·AuthZ / OAuth 2.0 / mTLS
│   ├── 08-零信任:边界消失之后.md                             ← BeyondCorp / OPA / Assume Breach
│   └── 09-供应链安全:信任链延伸到哪里.md                     ← SBOM / SLSA / Sigstore

└── 30-ai-security/                                            # AI 时代(20%)
    ├── 10-AI 攻击面:当输入也是指令.md                         ← Prompt Injection / 数据投毒 / 模型提取
    └── 11-AI 时代的防御重构:概率系统的安全边界.md             ← 分层防御 / 扩展威胁建模 / AI 辅助安全

二、概念线索

11 篇文章里反复出现的五条思想脉络。理解这五条线索,就理解了安全工程从密码学地基到 AI 时代的完整逻辑。

mindmap
  root((安全工程))
    密码学基础
      密码学 数字信任的数学根基
      对称加密 速度与密钥分发
      非对称加密 公钥革命
      散列函数 完整性定义
      数字签名与PKI 信任链落地
    安全实践
      威胁建模 攻击者视角
      身份 认证与授权
      零信任 边界消失之后
      供应链安全 信任链延伸
    AI时代
      AI攻击面 输入即指令
      AI防御重构 概率系统边界
    核心主题
      数学保证 vs 工程约定
      最小权限原则
      攻击者视角的内化
      信任的传递性
      确定性假设的崩塌

线索一:「数学保证 vs 工程约定」——安全的两种来源

这是整套系列最重要的区分。密码学提供可以被数学证明的保证;密码学之上的所有安全机制提供的是工程约定——只要所有参与方都遵守协议,它就是安全的。

  • 密码学的数学保证01-密码学:数字信任的数学基础):AES-256 的安全性不依赖于”没人知道我的密钥”这个社会事实,而依赖于”在现有计算能力下穷举密钥空间是不可能的”这个数学事实。SHA-256 的碰撞抗性依赖于哈希函数的单向性,这是可以被形式化定义和证明的性质。
  • 协议的工程约定07-身份:认证证明你是谁,授权证明你能做什么):JWT 的安全性依赖于”私钥没有泄露”和”接收方正确验证签名”这两个工程前提,而不是数学不可能性。OAuth 的安全性依赖于所有参与方都正确实现了协议,任何一方的实现错误都可能引入漏洞。
  • PKI 是两者的结合点05-数字签名与PKI:信任链如何落地):证书签名是数学的(私钥签名无法伪造),但证书颁发机构(CA)的可信度是工程约定的——你信任 CA 是因为你的操作系统内置了它的根证书,而操作系统内置它是因为它通过了 WebTrust 审计。数学不可能被攻破,但 CA 可以被收买、被黑、被政府要求配合。
  • 零信任是工程约定的系统化08-零信任:边界消失之后):零信任不是某个技术,是一套工程原则——永不隐式信任,始终显式验证,每个请求都独立授权。这是对”信任网络边界”这一工程约定失效后的系统性回应。

这条线索的终点:理解哪些安全属性来自数学,哪些来自工程约定,是评估安全方案时最重要的判断能力。数学保证可以被依赖;工程约定需要被验证实施、持续维护。


线索二:「最小权限原则」——贯穿整个体系的单一原则

最小权限(Principle of Least Privilege)是整个安全工程里最有生命力的一条原则:任何主体(人、进程、服务)只应该拥有完成其任务所需的最少权限,不多一点。

  • 密码学层面02-对称加密:速度与密钥分发的博弈 / 03-非对称加密:公钥如何打破信任的先决条件):密钥轮换是最小权限的时间维度——不用一个密钥加密所有历史数据,而是定期生成新密钥,限制单个密钥泄露的影响范围。TLS 的前向保密(Forward Secrecy)是极端形式:每个会话独立密钥,会话结束即销毁,过去的流量永远无法被解密,即使私钥泄露。
  • 身份层面07-身份:认证证明你是谁,授权证明你能做什么):OAuth 的 scope 机制是最小权限——不授予”所有权限”,只授予”读取联系人”。RBAC(基于角色的访问控制)是最小权限的组织化实现:角色只包含必要权限,用户只分配必要角色。
  • 零信任层面08-零信任:边界消失之后):零信任的每个决策都在问”这个主体在这个时刻完成这个操作需要哪些最少的权限”。不是”这个用户在内网,所以信任他所有操作”,是”这个用户要执行这个 API,他的身份、设备状态、上下文是否足够完成这一个操作”。
  • 供应链层面09-供应链安全:信任链延伸到哪里):依赖包应该只有运行时必要的权限。容器不应该以 root 运行。CI/CD 的 secret 应该有最小作用域(只能访问它需要部署的那个环境)。
  • AI 系统层面10-AI攻击面:当输入也是指令):LLM 的系统提示应该只赋予模型完成任务所需的工具权限。一个只需要回答问题的 assistant 不应该能调用发邮件或删文件的 function——Prompt Injection 的危害程度直接取决于模型被赋予了多少权限。

这条线索的终点:最小权限不是一条规则,是一种设计哲学。在每个设计决策上问”这里的权限可以再缩小吗?“,会导向更安全的系统——并且是可以独立于具体威胁来应用的。


线索三:「攻击者视角的内化」——安全思维的核心切换

防御性设计的本质障碍是:设计者和用户都在假设系统按预期使用,而攻击者在寻找所有非预期的使用方式。安全工程的核心技能是学会持续切换视角——用系统的眼睛看,也用攻击者的眼睛看。

  • 威胁建模是结构化的攻击者视角06-威胁建模:用攻击者的眼睛看系统):STRIDE 框架(Spoofing、Tampering、Repudiation、Information Disclosure、Denial of Service、Elevation of Privilege)是对”攻击者可以对系统做什么”的穷举分类。攻击树是对”攻击者如何一步步达成目标”的结构化推演。不做威胁建模的安全设计是在猜——做了威胁建模是在系统性地思考。
  • 密码学的攻击者视角03-非对称加密:公钥如何打破信任的先决条件 / 04-散列函数:完整性的数学定义):密码学的安全性定义本身就是攻击者视角:一个加密算法”安全”意味着”在计算上可行的时间内,没有有效的算法能够在不知道密钥的情况下解密”。这是对一类攻击者能力的假设。碰撞攻击、长度扩展攻击、中间人攻击——理解这些攻击才能理解为什么某些算法被废弃。
  • Assume Breach08-零信任:边界消失之后):零信任的”永不信任,始终验证”背后有一个攻击者视角的假设:网络已经被突破,已经有攻击者在内网里。在这个前提下设计访问控制,比在”边界是安全的”这个前提下设计要鲁棒得多。
  • 供应链攻击的视角09-供应链安全:信任链延伸到哪里):SolarWinds 攻击的教训是:攻击者不需要攻破目标的代码,可以去攻破目标信任的构建工具。xz-utils 后门的教训是:攻击者可以以开发者身份长期潜伏,在关键时刻注入后门。供应链安全的本质是把攻击者视角应用到整个软件生命周期。
  • AI 的对抗性输入10-AI攻击面:当输入也是指令):Prompt Injection 是攻击者视角最直接的应用——不把用户输入当数据,而是把它当潜在的攻击向量,问”如果用户在这里输入恶意指令,模型会做什么?”

这条线索的终点:安全工程师和普通工程师的区别,不在于知道更多工具,而在于在设计时能主动切换到攻击者视角,找到别人没想到的弱点。这是一种思维习惯,需要刻意训练。


线索四:「信任的传递性」——信任链会在最弱的环节断裂

信任是传递性的。你信任 HTTPS 是因为你信任 CA,信任 CA 是因为你信任操作系统,信任操作系统是因为你信任硬件厂商。这条链上任何一个环节出问题,信任就崩塌了——不论链的其他部分多么坚固。

  • PKI 的信任链05-数字签名与PKI:信任链如何落地):证书链从叶子证书到中间 CA 到根 CA,根 CA 的公钥硬编码在你的操作系统里。这条链是 HTTPS 安全性的基础,也是它的弱点——任何一个 CA 签发了假证书(无论是被黑还是被强制),都能对受害者发动中间人攻击。Certificate Transparency(证书透明度)是对这个问题的工程响应。
  • 依赖链的信任传递09-供应链安全:信任链延伸到哪里):你的代码依赖 package A,A 依赖 B,B 依赖 C,C 的某个版本有后门——你的系统也有后门,尽管你的代码本身完全正确。npm 的 left-pad 事件展示了依赖链的可用性风险;xz-utils 事件展示了依赖链的安全风险。SBOM(软件物料清单)是把依赖链显式化的工程工具。
  • 身份的信任链07-身份:认证证明你是谁,授权证明你能做什么):OAuth 的信任链:你的应用信任 Google 说”这个用户是 [email protected]”,Google 信任了用户输入了正确密码,密码系统信任了散列函数的安全性。任何一环被攻破——钓鱼攻击偷走密码,或者 Google 的 OAuth 实现有漏洞——信任就会传递失效。
  • 零信任是对隐性信任链的清算08-零信任:边界消失之后):传统网络安全假设”内网可信”,这是一条隐性的信任链——信任路由器、信任 VPN、信任防火墙。每一层都可能有漏洞,整条链实际上比它看起来脆弱。零信任拒绝这条隐性链,要求每个请求都独立建立信任。

这条线索的终点:安全审计的一个核心任务是把所有隐性的信任链显式化,然后问每一个环节:这里的信任是否有依据?如果这个环节被攻破,影响范围是什么?最弱的环节,就是需要最先加固的地方。


线索五:「确定性假设的崩塌」——AI 对安全模型的根本挑战

传统安全模型有一个从未被明说的前提:系统是确定性的。相同的输入产生相同的输出,程序做什么完全由代码决定,数据和指令是严格分离的。AI 系统打破了这三个前提,要求重新思考安全的基础概念。

  • 输入与指令的边界消失10-AI攻击面:当输入也是指令):在传统系统里,SQL 注入之所以危险,是因为攻击者把用户数据混入了 SQL 指令——这是一个边界被意外打破的 bug。在 LLM 里,这个边界天然不存在:模型处理”用户输入”和处理”系统指令”用的是完全相同的机制,攻击者可以通过精心构造的用户输入来覆盖系统指令。Prompt Injection 不是一个等待修复的 bug,是语言模型工作方式的内在属性。
  • 行为是概率性的,测试无法穷举11-AI时代的防御重构:概率系统的安全边界):传统软件安全测试的假设是:找到所有代码路径,测试每条路径,就能发现安全问题。LLM 的行为空间是无限的——即使测试了一百万个 prompt,第一百万零一个仍然可能触发意外行为。Safety 不是一个可以被完全测试的性质。
  • 训练数据就是程序10-AI攻击面:当输入也是指令):传统软件的”代码”和”数据”是分离的——修改数据不会改变代码的行为(除非有注入漏洞)。ML 模型的”代码”(权重)是从训练数据中学习出来的——污染训练数据(Data Poisoning)等于篡改程序逻辑,但这种篡改是在训练阶段发生的,部署时无法检测。
  • 传统密码学在 AI 层面的边界11-AI时代的防御重构:概率系统的安全边界):密码学可以保证”这个模型文件没有被篡改”(完整性),但无法保证”这个模型的行为是安全的”——因为安全行为是一个语义问题,不是一个数学问题。RLHF 等对齐技术是在用工程约定建立行为约束,但这些约束不是数学保证,是统计倾向。
  • 安全左移到模型设计层11-AI时代的防御重构:概率系统的安全边界):传统的 DevSecOps 把安全检查移到 CI/CD 流水线——在代码合并时扫描,在部署时验证。AI 系统需要把安全考量推到更早——模型架构、训练数据选择、RLHF 目标设定——因为许多 AI 安全属性无法在部署后修复。

这条线索的终点:AI 安全不是传统安全的延伸,是传统安全在一个新的前提下的重建。理解确定性假设在哪里失效,是思考 AI 安全问题的起点。密码学的数学保证仍然成立——但它们解决的是协议层的问题,AI 的核心安全挑战在更高的语义层,那里没有可以依赖的数学证明。


三、密码学系列(01-05)

数字信任的数学基础——所有安全机制最终都建立在这里。

起点:密码学在解决什么问题

核心问题:在没有密码学之前,数字通信的”安全”意味着什么?密码学的三个基本目标(机密性、完整性、认证性)分别对应什么现实需求?“计算安全”是什么意思? 读完之后:理解密码学安全性的形式化定义,理解为什么密码学是可以被信任的(而不是”因为没人破解过”),建立密码原语(primitive)→ 协议(protocol)→ 应用(application)的层次模型。


原语一:对称加密

核心问题:AES 的分组加密和流密码分别适合什么场景?CBC / GCM 等工作模式的作用是什么?对称加密的根本限制——密钥分发问题——是如何产生的,为什么它在互联网规模下无法用对称加密自身解决? 读完之后:理解对称加密的速度优势与密钥管理成本,理解 AEAD(认证加密)的设计动机,理解为什么 TLS 用非对称加密协商密钥、用对称加密传输数据。


原语二:非对称加密

核心问题:公钥密码学的根本突破是什么——它解决了什么对称加密无法解决的问题?RSA 和 ECC 的安全性分别依赖于什么数学难题?Diffie-Hellman 密钥交换是如何在不安全信道上建立共享密钥的? 读完之后:理解公私钥对的数学关系,理解 DH / ECDH 密钥交换协议,理解前向保密(Forward Secrecy)的含义,理解为什么量子计算机会威胁现有非对称加密。


原语三:散列函数

核心问题:碰撞抗性、第一原像抗性、第二原像抗性三个性质的区别是什么?为什么不能用普通散列函数存储密码,而要用 bcrypt / scrypt / Argon2?HMAC 如何在散列函数上构建消息认证?Merkle 树为什么能让区块链和 Git 都用到它? 读完之后:理解散列函数三个安全性质的工程含义,理解密码哈希函数和普通哈希函数的差异,理解 HMAC 的构造,理解 SHA-3 与 SHA-2 的设计差异动机。


原语的落地:数字签名与 PKI

核心问题:数字签名如何同时提供完整性和认证性?X.509 证书里存了什么?证书链如何从叶子证书一路验证到内置的根证书?TLS 握手的每一步分别在做什么?为什么 Certificate Transparency 是必要的? 读完之后:理解数字签名的构造(对消息哈希用私钥加密),理解 CA 体系的信任模型及其已知弱点,理解 TLS 1.3 握手流程,理解代码签名(Sigstore/Cosign)在供应链安全中的作用。


四、安全实践系列(06-09)

信任的工程化——把密码学原语组合成可以运营的安全体系。

思维方式:威胁建模

核心问题:什么是攻击面(attack surface)?STRIDE 六类威胁分别是什么,如何系统地应用它们?数据流图(DFD)和信任边界如何帮助识别威胁?威胁建模的输出是什么,如何转化为工程决策? 读完之后:能够独立对一个系统做基础的威胁建模——画出数据流图,标注信任边界,用 STRIDE 枚举每个组件的威胁类型,输出优先级排序的缓解措施列表。


核心实践:身份

核心问题:认证(Authentication)和授权(Authorization)的根本区别是什么,为什么混淆这两者是常见安全错误?JWT 的签名验证和加密是两件不同的事——区别是什么?OAuth 2.0 的授权码流程中,每一个 redirect 和 token exchange 在防范什么攻击?mTLS 和 API Key 分别适合什么场景? 读完之后:理解 AuthN/AuthZ 的概念分离,理解 session / token / certificate 三种身份载体的信任模型差异,理解 OAuth 2.0 各个 grant type 的适用场景,理解 OIDC 在 OAuth 之上提供了什么。


范式转变:零信任

核心问题:“永不信任,始终验证”在工程上意味着什么,具体要验证什么?BeyondCorp 的核心洞察是什么——为什么 Google 认为 VPN 不够?mTLS 如何实现服务间的零信任,它和 API Key 相比解决了什么问题?Policy Engine(如 OPA)在零信任架构里扮演什么角色? 读完之后:理解零信任的三个核心原则(身份为核心、最小权限、始终验证),理解 BeyondCorp 模型的实现,理解 mTLS 在服务网格中的作用,理解”Assume Breach”心态对安全设计的影响。


供应链:信任的边界

核心问题:SolarWinds 和 xz-utils 攻击分别在供应链的哪个环节发生,防御需要在哪一层建立?SBOM(软件物料清单)的内容是什么,它如何帮助响应一个新发现的 CVE?SLSA 框架的四个级别分别要求了什么保证,为什么构建过程的完整性是核心?Sigstore/Cosign 是如何在不需要中心化 CA 的情况下做代码签名的? 读完之后:理解软件供应链攻击的完整路径(开发→构建→分发→部署),理解 SBOM 的生成和使用,理解 SLSA 作为供应链安全框架的设计逻辑,理解内容寻址(哈希固定)在供应链安全中的核心作用。


五、AI 时代系列(10-11)

当确定性假设失效——重新定义安全的边界。

AI 系统的攻击面

核心问题:Prompt Injection 和 SQL Injection 在结构上有什么相似性,又有什么根本差异?间接 Prompt Injection(通过外部内容注入指令)的攻击路径是什么?为什么 LLM 的 safety 训练无法从根本上防御 Prompt Injection?数据投毒(Data Poisoning)和后门攻击(Backdoor Attack)分别在模型生命周期的哪个阶段发生? 读完之后:理解 LLM 的四类主要攻击面(Prompt Injection、Jailbreak、数据投毒、模型提取),理解为什么”数据和指令不分离”是语言模型的结构性问题,理解最小权限原则如何限制 Prompt Injection 的危害半径。


AI 时代的防御重构

核心问题:传统的”安全左移”(Shift Left)在 AI 系统里需要左移到哪里?当 Safety 属性无法被完全测试时,工程上的替代策略是什么?AI 辅助的安全防御(异常检测、漏洞发现)和 AI 带来的新攻击面之间如何平衡?如何把传统的威胁建模扩展到 LLM 应用? 读完之后:理解 AI 应用的分层防御策略(输入过滤 → 权限最小化 → 输出审计 → 人工监督),理解 AI 辅助安全工具的能力边界,理解在不可完全测试的系统上建立安全信心需要什么工程保证。


六、按场景的阅读路径

路径一:第一次系统学安全

从数学基础到工程实践的完整路径:

01(密码学:理解"安全"的数学定义)
  → 02(对称加密:速度与密钥管理)
  → 03(非对称加密:公钥密码学的突破)
  → 04(散列函数:完整性的基础)
  → 05(数字签名与 PKI:看懂 HTTPS)
  → 06(威胁建模:用攻击者视角思考)
  → 07(身份:理解 OAuth/JWT 背后的逻辑)

路径二:后端 / 全栈开发者

关注日常开发中会遇到的安全决策:

04(散列函数:密码存储为什么用 bcrypt)
  → 07(身份:OAuth 和 JWT 怎么选,如何正确实现)
  → 06(威胁建模:我的 API 的攻击面在哪里)
  → 05(PKI:HTTPS 的握手是怎么保护我的用户的)
  → 09(供应链:我的依赖有多可信)

路径三:平台 / 基础设施工程师

关注系统层安全和云原生安全:

05(PKI 和证书:TLS 的工程实现)
  → 08(零信任:服务间通信和 mTLS)
  → 09(供应链:容器镜像签名和 SBOM)
  → 07(身份:Service Account 和 Workload Identity)
  → 06(威胁建模:基础设施的攻击面)

路径四:关注 AI 系统的工程师

01(密码学:AI 系统的完整性保证依赖什么)
  → 06(威胁建模:如何扩展 STRIDE 到 LLM 应用)
  → 10(AI 攻击面:Prompt Injection 的机制)
  → 07(身份:AI agent 的权限边界)
  → 11(AI 防御:在不可完全测试的系统上建立安全信心)

路径五:理解 HTTPS 的完整链路

02(对称加密:TLS 用什么加密实际数据)
  → 03(非对称加密:密钥协商的数学原理)
  → 04(散列函数:签名需要先哈希)
  → 05(数字签名与 PKI:证书和 CA 体系)
  → 08(零信任:mTLS 如何扩展 HTTPS 到服务间通信)

七、延伸方向

这个系列聚焦于安全工程的核心概念。以下方向与本系列相关,但各自构成独立的学习领域:

  • 密码学数学深入:椭圆曲线的群论基础、格密码(后量子)的数学原理、零知识证明——这些需要较强的数学背景,见离散数学和抽象代数相关资料。

  • 渗透测试与攻防:实际漏洞利用技术、CTF、红队方法论——这是攻击者视角的深度应用,见 Hack The Box / TryHackMe 等平台。

  • 合规与监管:GDPR、CCPA、SOC 2、ISO 27001——安全工程的组织和法律维度,见本系列 70-compliance/ 目录。

  • 可观测性在安全中的应用:安全事件检测、异常行为分析、SIEM——安全与可观测性的交叉地带,见 可观测性与运维工程 MOC

  • Linux 层面的安全加固:seccomp、capabilities、AppArmor/SELinux、auditd——操作系统层面的安全实现,见 Linux 系统 MOC T4-安全专题。


与其他支柱的关联

  • 计算机网络 MOC — TLS / PKI / Netfilter 是安全工程的网络层基础;mTLS 和零信任依赖网络协议栈
  • Linux 系统 MOC — Linux capabilities / seccomp / namespace 是主机安全和容器安全的内核层实现
  • 虚拟化系统 MOC — Confidential Computing(Intel TDX / AMD SEV)是安全信任边界的硬件层延伸
  • 云原生与平台工程 MOC — 容器镜像签名(Cosign)、SBOM、OPA/Kyverno 是云原生供应链安全的实践场景;服务网格 mTLS 是零信任的 K8s 实现
  • 可观测性与运维工程 MOC — 安全可观测性(SIEM、异常行为检测)是运维工程的安全扩展
  • 软件工程与架构 MOC — 威胁建模是架构设计的安全维度;零信任架构是协作线/安全架构的核心主题