LELexEdge词汇锋面
网络安全专业术语

SAT

Boolean Satisfiability Problem

NP 完全之祖 · 一切约束求解的起点

二进制安全程序分析计算理论
SAT
定义
SATBoolean Satisfiability Problem网络安全领域的专业术语SAT(Boolean Satisfiability Problem)是计算机科学中第一个被证明为 NP 完全的问题:给定一个布尔公式,判断是否存在一组变量赋值使公式为真。

最后更新:2026-06-16

什么是SAT?

SAT(Boolean Satisfiability Problem)是计算机科学中第一个被证明为 NP 完全的问题:给定一个布尔公式,判断是否存在一组变量赋值使公式为真。SAT 求解器是 SMT 求解器的核心引擎,也是符号执行、模型检验、形式化验证等技术的底层基础。

  • 第一个被证明为 NP 完全的问题(Cook-Levin 定理)
  • SMT 求解器的核心引擎
  • 现代 SAT 求解器可处理数百万变量的实际问题

SAT详解

SAT 问题的输入通常是 CNF(合取范式)形式的布尔公式:多个子句的 AND,每个子句是若干文字的 OR。例如 (x₁ ∨ ¬x₂) ∧ (x₂ ∨ x₃) ∧ (¬x₁ ∨ ¬x₃)。虽然 SAT 理论上是 NP 完全的(最坏情况指数时间),但现代 SAT 求解器(如 MiniSat、CaDiCaL)通过 DPLL/CDCL 算法和大量启发式优化,在实际问题上表现极好,能处理工业级规模的实例。在二进制安全中,SMT 求解器内部将位向量/算术约束最终编码(bit-blasting)为 SAT 问题交给 SAT 引擎求解。

公式提示

CNF 示例:(x₁ ∨ ¬x₂) ∧ (x₂ ∨ x₃) ∧ (¬x₁ ∨ ¬x₃),问是否存在 x₁,x₂,x₃ 的赋值使整体为 true

SAT的应用场景

正式定义

判断给定布尔公式是否存在使其为真的变量赋值的判定问题,是计算复杂性理论中第一个 NP 完全问题

应用场景

  • SMT 求解器的底层引擎(bit-blasting 后归约为 SAT)
  • 硬件电路等价性验证
  • 模型检验中的状态空间搜索
  • 密码学中的约束求解攻击

常见误区

  • NP 完全不等于不可解——现代 SAT 求解器在实际问题上极其高效
  • SAT 不只是理论概念——工业界每天在用 SAT 求解器验证芯片、分析软件
  • SAT 和 SMT 不是竞争关系——SMT 在上层提供更丰富的表达力,底层仍调用 SAT

实际案例

📌 CDCL 算法

现代 SAT 求解器的核心算法——冲突驱动子句学习(Conflict-Driven Clause Learning)。当搜索遇到冲突时学习新子句剪枝,使求解效率提升数量级。

📌 Bit-blasting

SMT 求解器将位向量约束(如 32 位加法)展开为等价的布尔公式,交给内部 SAT 引擎求解。一个 32 位变量展开为 32 个布尔变量。

关于SAT的常见问题

SAT 问题是什么
给定一个布尔公式,判断是否存在一组变量赋值使其为真。是第一个被证明为 NP 完全的问题,也是 SMT 求解的理论基础。
SAT 和 SMT 有什么关系
SMT 在 SAT 基础上扩展了算术、位向量等理论。SMT 求解器内部通常将高级约束编码为 SAT 问题(bit-blasting),再调用 SAT 引擎求解。
SAT 既然是 NP 完全为什么还能用
NP 完全是最坏情况。现代 SAT 求解器通过 CDCL 算法和启发式优化,在实际工业问题上可高效处理数百万变量。

与SAT相关的术语

SMTZ3符号执行NP 完全