加密消息
Tamarin根据密码学的符号模型分析协议。这意味着加密消息被建模为术语而不是位字符串。
所采用的密码算法的性质用方程来建模。更具体地说,一个加密消息要么是一个常数c,要么是一个消息f(m1,...,mn),对应于n元函数符号f对n个加密消息m1,...,mn的应用。在指定方程时,除了常量之外,我们还允许使用变量。
常量
我们区分两种类型的常量:
•公共常量建模:公开已知的原子消息,如代理标识和标签。我们使用符号"ident"来表示Tamarin中的公共常量。这些常量的排序为pub,因此可以与公共变量统一。他们总是被对手知道。
•函数的密度为0(见下文):函数的类型总是msg,因此不能与公共变量统一。默认情况下,该函数是公开的,攻击者知道它。如果将函数声明为私有,则攻击者不会知道它。然而,新鲜值通常是更合适的秘密值建模。
函数的符号
Tamarin支持一组固定的内置函数符号和额外的用户定义函数符号。每个tamarin文件中唯一可用的函数符号是用于配对和投影的。
二元函数符号对对两个消息进行建模,函数符号fst和snd对第一个和第二个参数的投影进行建模。投影的性质由以下方程表示:
bash
fst(pair(x,y)) = x
snd(pair(x,y)) = y
Tamarin 还支持 <x,y> 作为 pair(x,y) 的语法糖,以及 <x1,x2,...,xn-1,xn> 作为 <x1,<x2,...,<xn-1,xn>...> 的语法糖。
附加的内置函数符号可以通过包含以下消息理论之一来激活:散列、非对称加密、签名、揭示签名、对称加密、diffie-hellman、双线性配对、xor和multiset。
要激活消息理论 t1、...、tn,请在文件中加入内置行:t1、...、tn。内置消息理论的定义在内置消息理论一节中给出。
要定义参数为 a1,..., an 的函数符号 f1, ..., fn,请在文件中包含以下一行:
bash
functions: f1/a1, ..., fn/an
Tamarin还支持私有函数符号。与常规函数符号不同,Tamarin假定攻击者不能应用私有函数符号。私有函数可以用来对隐式使用所有(诚实)用户共享的某些秘密的函数进行建模。
要使函数私有,只需在函数声明后添加属性[private]。例如
bash
functions: f/3, g/2 [private], h/1
定义私有函数g和公共函数f和h。我们将在下一节描述如何定义形式化函数性质的方程。
方程理论
方程理论可以用来模拟函数的性质,例如,对称解密是对称加密的逆,只要两者使用相同的密钥。将方程添加到上下文的语法是:
bash
equations: lhs1 = rhs1, ..., lhsn = rhsn
lhs和rhs都可以包含变量,但不包含公共常量,并且右侧的所有变量也必须出现在左侧。Tamarin使用的符号证明搜索支持某一类用户自定义方程,即具有有限变性质的收敛方程理论(common - lundh and Delaune 2005)。注意Tamarin不会检查给定的方程是否属于这个类,所以在这个类之外编写方程可能会导致不终止或不正确的结果而没有任何警告。
还请注意,Tamarin的推理在只考虑子项收敛方程时特别有效,即,如果右侧是基项(即,它不包含任何变量)或左侧的适当子项。因此,如果这些方程足以模拟所需的性质,则首选这些方程。然而,例如,由内置消息理论diffie-hellman、双线性配对、xor和多集建模的方程不属于这个受限类,因为它们包括例如结合性和交换性。所有其他内置消息理论都可以通过使用函数等效地定义:...方程:...下一节我们会看到一些允许方程的例子。
内置消息理论和其他内置特性
在下面的例子中,我们用f/n表示函数符号f是n元的。
散列:
该理论是哈希函数的模型。它定义了函数符号 h/1,没有方程。
非对称加密:
该理论模拟公钥加密方案。它定义了函数符号 aenc/2、adec/2 和 pk/1,它们之间的关系式为 adec(aenc(m, pk(sk)), sk) = m。请注意,如语法说明中所述,aenc{x,y}pkB 是 aenc(<x,y>, pkB) 的语法糖。
签名:
该理论是签名方案的模型。它定义了函数符号 sign/2、verify/3、pk/1 和 true,它们的关系式为 verify(sign(m,sk),m,pk(sk)) = true。
揭示-签名:
该理论是信息揭示签名方案的模型。它定义了函数符号 revealSign/2、revealVerify/3、getMessage/1、pk/1 和 true,它们之间的关系式为 revealVerify(revealSign(m,sk),m,pk(sk)) = true 和 getMessage(revealSign(m,sk)) = m。
对称加密:
该理论模拟对称加密方案。它定义了函数符号 senc/2 和 sdec/2,它们之间的关系式为 sdec(senc(m,k),k) = m。
Diffie-hellman:
该理论模拟 Diffie-Hellman 群。它定义了函数符号 inv/1、1/0 以及符号 ^ 和 *。我们用 g ^ a 表示群中的幂级数,用 *、inv 和 1 表示指数的(乘法)阿贝尔群(群阶的整数模)。定义方程组为
bash
(x^y)^z = x^(y*z)
x^1 = x
x*y = y*x
(x*y)*z = x*(y*z)
x*1 = x
x*inv(x) = 1
双线性配对:
该理论模拟双线性群。用函数符号pmult/2和em/2扩展了diffie-hellman理论。其中,pmult(x,p)表示点p乘以标量x, em(p,q)表示对点p和q的双线性映射的应用。附加方程为:
bash
pmult(x,(pmult(y,p)) = pmult(x*y,p)
pmult(1,p) = p
em(p,q) = em(q,p)
em(pmult(x,p),q) = pmult(x,em(q,p))
xor:
这个理论模拟了异或操作。它添加了函数符号/2(也写为XOR/2)和零/0。是结合能交换的,满足消去方程:
bash
x ⊕ y = y ⊕ x
(x ⊕ y) ⊕ z = x ⊕ (y ⊕ z)
x ⊕ zero = x
x ⊕ x = zero
multiset:
该理论引入了通常用于多集建模的结合交换算子+
可靠通道:
该理论在过程演算中引入了对可靠通道的支持。
通道上的消息(即公共名称)'r'最终一定会到达。只有另一个频道,即不可靠的公共频道"c"。注意,可以使用模式匹配对多个可靠通道进行建模:
bash
out('r',<'channelA','Hello')
| out('r',<'channelB','Bonjour')
| in('r',<'channelA',x); event PrepareTea()
| in('r',<'channelB',x); event PrepareCoffee()
保留函数符号名
由于在内置消息理论中使用,以下函数名不能是用户定义的:mun、one、exp、mult、inv、pmult、em。
如果理论包含其中任何一个作为用户定义的函数符号,解析器将拒绝该文件,并指出重新声明了哪个保留名称