Skip to content

定义Definition

超性质

Hyperproperty · Hyperproperties

从确定性自组合进入有限非确定程序,以全称运行、存在匹配运行刻画输出集合相等,并构造完整匹配证书。

形式陈述 ​

从轨迹的集合到轨迹集合的集合 ​

固定轨迹语义的行为域 Tr,系统 M 的全部可观察执行构成 TM⊆Tr。普通的轨迹性质是一个允许轨迹集合 P⊆Tr;系统满足它,意味着每一条执行都被允许:

M⊨P⟺TM⊆P.

超性质(hyperproperty)则是

H⊆P(Tr),M⊨H⟺TM∈H.

这里有两层集合:TM 的元素是轨迹,H 的元素是整套轨迹集合。超性质因此能够要求同一系统的不同执行彼此相容,例如“公开输入相同时,秘密输入的变化不能改变公开输出”。这种要求必须同时看到多条执行。[1, §2]

每个轨迹性质都可提升成超性质:

[P]={T⊆Tr:T⊆P}.

提升保留了原来的满足关系,但并非每个超性质都来自这样的 P。规格中的行为包含式描述的是这一逐轨迹情形;跨执行合同需要直接约束整个行为集合。

一个确定性非干扰模型 ​

取顺序、确定性、对全部输入正常终止的整数程序;整数按数学整数计算,没有溢出或异常。输入分为公开量 l 与秘密量 h,程序最后输出一个公开整数 y。只观察公开输入和这一次最终输出,因而可观察终止轨迹编码为

t=(in(l),out(y)).

秘密输入仍然决定程序执行,但不会直接写入公开轨迹。若程序的输出函数为 F(l,h),则

TF={(in(l),out(F(l,h))):l,h∈Z}.

记轨迹中的公开输入、输出分别为 lowIn(t) 与 lowOut(t)。定义全称双运行非干扰超性质

NI={T⊆Tr: ∀t1,t2∈T,lowIn(t1)=lowIn(t2)⇒lowOut(t1)=lowOut(t2)}.

对于上述程序,这恰好是

TF∈NI⟺∀l,h1,h2∈Z,F(l,h1)=F(l,h2).

即使不同秘密输入产生同一条公开轨迹、在集合中被合并,这个等价式也成立:每次运行的公开结果都在 TF 中,而其中每条轨迹都由某个输入产生。

直觉

安全性可以取决于两次执行之间的差异 ​

单独看输出 5,无法断言秘密泄漏了。它可能是公开输入要求的结果,也可能编码了秘密。非干扰固定公开输入,改变秘密输入,再比较输出:若观察者能从输出变化辨别秘密变化,程序就违反了这个合同。

“同一输入运行两次得到相同输出”只检验确定性。非干扰的两次运行允许 h1≠h2,要求相同的只是 l。秘密也不是完全不能参与计算;它可以出现在内部算式中,只要最后公开结果不随它改变。

为什么不能逐条检查轨迹来表达 NI ​

取两条公开输入相同、公开输出不同的轨迹 t1,t2。单元素集合 {t1} 与 {t2} 都属于 NI,因为各自内部不存在冲突的两条轨迹;它们的并集却不属于 NI。

假设存在某个轨迹性质 P,对所有 T⊆Tr 都有

T∈NI⟺T⊆P.

两个单元素集合满足 NI,迫使 t1,t2∈P,于是 {t1,t2}⊆P,按假设它也应满足 NI,矛盾。问题不是某种单轨迹逻辑还不够强,而是固定的逐轨迹允许集无法表达这项跨轨迹约束。

这个证明比较一般的轨迹集合;其中的单元素集合不必来自一个覆盖全部整数输入域的程序。具体程序 F 的验证仍使用上一节给定的完整 TF。

例子与边界

秘密参与计算与秘密影响输出 ​

比较两个程序,内部变量 z 不可观察:

text
安全候选 P                  泄漏程序 Q
z := l + h                  y := l + h
y := z - h                  output y
output y

固定 l=3,选择两个秘密输入:

程序 秘密输入 h 中间量 z 公开输出 y
P 2 5 3
P 7 10 3
Q 2 不使用 5
Q 7 不使用 10

对 P,代数化简给出 FP(l,h)=(l+h)−h=l,所以对任意 l,h1,h2 输出都相等。表格展示了一组实例,代数恒等式才覆盖全部输入。对 Q,表中的两条运行已经构成反例:同一公开输入 3 对应公开输出 5 和 10。

本例观察接口只保留最终 y。若在赋值后公开 z,安全候选也会泄漏;若观察运行时间或控制路径,则需要把那些信息加入轨迹重新验证。终止在本模型中已对所有输入作出保证,因此没有留下秘密依赖的终止差异。

有限非确定模型:先保留秘密输入的索引 ​

现在换一个明确有限的模型。公开输入域 L、秘密域 H 都有限且非空,输出域 Y 有限;程序总是终止,每个 (l,h) 对应一个非空有限完整运行集 Runs(l,h),且能穷尽枚举,例如有限无环控制图上的程序。运行 ρ=(l,h,c,y) 保留输入、完整内部选择记录 c 与最终输出。公开观察仍只有 (l,y),但规格量词在保留 h 的完整运行域上解释。

定义

Out(l,h)={y:ρ=(l,h,c,y)∈Runs(l,h)}.

允许公开非确定性的一项合同为

(M)∀l∈L ∀h1,h2∈H ∀ρ1∈Runs(l,h1) ∃ρ2∈Runs(l,h2),y1=y2.

它等价于固定 l 时所有 Out(l,h) 相等。若 (M) 成立,任取第一集合的一个输出,选产生它的运行,再取匹配运行,便得到集合包含;交换有序输入对 h1,h2 得到反向包含。反之,若集合相等,y1 属于第二集合,按定义就有一条输出它的完整运行。这是两个方向都可直接复核的等价证明。

将 ∃ρ2 换成 ∀ρ2 得到更强的全对相等条件。它推出 (M),因为第二运行集非空;反向不成立。信息流文献也以交替轨迹量词允许选择匹配行为,[1, §2.3; 3, §3] 但这里证明的只是明确规定初始输入与最终输出的有限合同,并未把所有时序版本合并成同一个性质。

四条运行给出匹配,三个结果暴露缺口 ​

取 L={0}、H=Y={0,1}。程序 P 非确定地选择位 r,输出 y=rxorh;Q 在 h=0 时可输出两个位,在 h=1 时只输出零。

程序 h 内部选择 y
P 0 r=0 0
P 0 r=1 1
P 1 r=0 1
P 1 r=1 0
Q 0 选零 0
Q 0 选一 1
Q 1 唯一分支 0

对 P,两个输出集合都是 {0,1}。给定第一条运行的 r1,h1 和目标秘密 h2,取

r2=r1xorh1xorh2,

就有 r2xorh2=r1xorh1,构成显式匹配函数。但它不满足全对相等:即使 h1=h2=0,r1=0,r2=1 也产生不同输出。

对 Q,Out(0,0)={0,1} 而 Out(0,1)={0}。取第一条运行 h1=0,y1=1,目标秘密 h2=1 没有匹配。这次不能靠“另一条运行输出不同”就断言无匹配;关键是已经穷尽了目标秘密下的全部运行。

全称运行需要存在一个匹配见证

若提前删除秘密标签,把两程序都压成公开轨迹集合,两者恰好都是 {(0,0),(0,1)},却只有 P 满足 (M)。所以不存在仅查看这个已遗忘 h 的集合便区分二者的合同;必须先在完整运行集合上陈述 (M),再通过公开投影定义匹配关系。此处与前面的确定性 NI 模型保留信息的需求不同。

推论与应用

自组合:把双运行关系变成单程序断言 ​

复制程序 P,把它读写的全部变量换成新鲜变量,得到 P′:l,h,z,y 分别变成 l′,h′,z′,y′。两份存储完全不相交,再顺序执行 P;P′。因为所有输入都正常终止,每个组合执行都能完成两份计算。

把输出视为终态变量 y,使用Hoare 三元组检验

{l=l′} P;P′ {y=y′}.

前置条件不要求 h=h′,否则只会比较相同输入,失去检测秘密影响的能力。完全换新也包括输入变量和临时变量,避免第二份程序覆盖第一份所依赖的状态。[2]

在此模型中,三元组有效与 P 满足 NI 等价。证明的关键是组合运行与两次独立运行的对应:任取原程序的两组输入,可把它们放在两份不相交的初始存储里;第一份只读写未加撇变量,第二份只读写加撇变量,所以终态恰好同时保存这两次运行的输出。

从三元组到 NI。 任取 l 相同、h 可以不同的两次原运行,把初始存储合并。它满足 l=l′,组合执行后由有效三元组得 y=y′,因此原来的两个输出相同。

从 NI 到三元组。 任取满足 l=l′ 的组合初态。其两个存储分量分别决定原程序的两次运行;由 NI,它们的输出相同。第二份运行不改变第一份的 y,所以组合终态满足 y=y′。这覆盖了所有满足前置条件的初态,三元组有效。

全终止假设在此承担实际工作:若第一份可能发散,串行组合可能根本执行不到第二份;部分正确性的三元组也可能因没有终态而真空成立。当前等价证明因此是在明确的总程序模型上进行的。

对安全候选,执行结果分别为 y=l 与 y′=l′,前置条件直接推出后置条件。对泄漏程序,取 l=l′=3,h=2,h′=7,组合终态为 y=5,y′=10,后置条件失败。自组合使跨执行问题落到已有的程序断言验证工具上。

为非确定匹配建立有限证书 ​

穷尽枚举每个 Runs(l,h),构造表

Wl,h:y⟼一条输出 y 的完整运行.

每个键保留一条见证即可;但键集合必须来自完整枚举。对每个 l 选一个基准秘密 h0,逐一比较所有表与 Wl,h0 的键集合。全部相等便接受;否则,从两个不等集合的差集中选一个输出,并把有该键的一侧作为 h1,缺键的一侧作为 h2,输出 (l,h1,h2,ρ1) 与第二侧的完整枚举结果。

接受可靠性来自:任意第一运行的 y1 都在所有第二侧表中,查表就构造 ρ2。完整性来自:若 (M) 成立,已证明所有键集合相等,检查不会拒绝。拒绝可靠性则使用目标表的穷尽性;它证明没有可能被遗漏的匹配运行。若总运行数为 N、输入对数为 K,输出有固定有限编号,则用 K|Y| 个槽和 O(N+K|Y|) 时间即可构表并比较,另计存储或验证完整运行记录的成本。

普通自组合的全称 Hoare 三元组会检查所有独立选择对,因此验证的是全对相等;它会拒绝上例 P。验证 (M) 必须允许第二侧根据第一侧的运行挑选见证。这里的存在见证可以依赖整条已完成运行,尚未要求一个只能看到前缀的在线策略,也没有加入公平性或任何概率分布。相同可能输出不意味着相同输出概率。

两条有限坏观察与 2-safety ​

超安全性使用有限组有限前缀见证违反。形式化地,令 U 是有限轨迹前缀的集合,写

U⪯T⟺∀u∈U ∃t∈T: u 是 t 的前缀.

超性质 H 是 k-safety,若每个 T∉H 都存在有限前缀集合 U,使

|U|≤k,U⪯T,∀T′⊆Tr,U⪯T′⇒T′∉H.

这一定义要求至多 k 条有限观察,而且无论怎样延长、怎样添加其他轨迹,违反都无法修复。[1, §§3–4]

为与通常基于无限轨迹的表述一致,把本页每条终止轨迹接上无限终态停顿,公开输入和已经输出的值保持不变。这是完整有限执行的编码,不把尚未输出的普通前缀误当作终止结果。

若 T 违反 NI,必有两条轨迹的公开输入相同、公开输出不同。分别截取到最终输出已经出现的有限前缀,组成 U;任何延长都保留两个冲突输出,任何包含这些延长的执行集仍违反 NI。因此该 NI 是 2-safety。前面的单元素集合论证又说明,一个单轨迹坏观察不足以表达这种冲突。

这个 2-safety 结论针对全称 NI。它不直接适用于 (M):在四条异或运行中删去 h=1,y=1 的见证,就得到仍对每个输入有运行、却缺少匹配的集合;把该见证加回来又能修复。只看到两条不相等的输出不能排除未来观察到匹配运行。有限完整枚举能证实“没有”,依赖的是模型已被穷尽,不能与任意扩展下都不可修复的正观察坏前缀混淆。[1, §3]

这种有限见证解释了为什么产品程序适合搜索全称 NI 的泄漏反例:验证器寻找的是两份执行共同到达 y≠y′ 的状态。跨版本等价、关系化程序验证等也采用类似双运行思想,但应按各自的输入关系、输出关系和执行模型重新给出断言。

参考资料

[1] Michael R. Clarkson and Fred B. Schneider, “Hyperproperties,” Journal of Computer Security 18(6), 2010, pp. 1157–1210,作者全文,§2 给出两层集合与信息流性质,§§3–4 定义有限坏观察、k-safety 并讨论自组合。

[2] Gilles Barthe, Pedro R. D’Argenio and Tamara Rezk, “Secure Information Flow by Self-Composition,” CSFW 2004, pp. 100–114,作者上传全文,讨论输入—输出非干扰与变量不相交的自组合。

[3] Michael R. Clarkson et al., “Temporal Logics for Hyperproperties”, POST 2014, pp. 265–284,§§2–3:轨迹量词语义及 observational determinism 与 generalized noninterference 的量词区别。

关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具