参考文献:
- [BCK98] Mihir Bellare, Ran Canetti, Hugo Krawczyk. A Modular Approach to the Design and Analysis of Authentication and Key Exchange Protocols (Extended Abstract). STOC 1998: 419-428.
- [CK01] Ran Canetti, Hugo Krawczyk. Analysis of Key-Exchange Protocols and Their Use for Building Secure Channels. EUROCRYPT 2001: 453-474.
- [Kra01] Hugo Krawczyk. The Order of Encryption and Authentication for Protecting Communications (or: How Secure Is SSL?). CRYPTO 2001: 310-331.
- [Kra05] Hugo Krawczyk. HMQV: A High-Performance Secure Diffie-Hellman Protocol. CRYPTO 2005: 546-566.
- [LLM07] Brian A. LaMacchia, Kristin E. Lauter, Anton Mityagin. Stronger Security of Authenticated Key Exchange. ProvSec 2007: 1-16.
- [FSXY15] Atsushi Fujioka, Koutarou Suzuki, Keita Xagawa, Kazuki Yoneyama. Strongly secure authenticated key exchange from factoring, codes, and lattices. Des. Codes Cryptogr. 76(3): 469-504 (2015).
- [PWZ23] Jiaxin Pan, Benedikt Wagner, Runzhi Zeng. Lattice-Based Authenticated Key Exchange with Tight Security. CRYPTO (5) 2023: 616-647.
文章目录
- AM & UM
- Emulation of Protocols
- Message Transmission
- Key Exchange
- CK Model
- CK+ Model
- CKI
- wPFS
- MEX
- CK+ Security
- HMQV
- eCK Model
- key registration
- matching sessions
- adversary
- freshness
- General AKE Security
- eCK Security
- NAXOS
AM & UM
[BCK98] 提出了 authenticated-links model(AM)以及 unauthenticated-links model(UM),并定义了两者之间的 compiler / authenticator,特别地构造了消息传递的 MT-authenticator,基于此获得了 AM 安全协议到 UM 安全协议的通用转换。
Emulation of Protocols
Message-driven Protocols:
-
该协议被某个参与方调用(根据该协议代码运行的会话),根据协议输入、随机带、参与者 ID 等等,设定它的初始状态;
-
协议挂起,等待被激活,包括两种事件:
- 消息达到,从网络中递交到本会话的消息;
- 外部请求,本参与者中的其他进程发出的信息。
-
某参与方上的协议被激活后,形式化地执行如下的随机化函数:
π ( 当前状态, 输入消息, 外部请求 ) = ( 内部状态, 输出消息, 输出请求, 输出日志 ) \pi(\textbf{当前状态, 输入消息, 外部请求})=(\textbf{内部状态, 输出消息, 输出请求, 输出日志}) π(当前状态, 输入消息, 外部请求)=(内部状态, 输出消息, 输出请求, 输出日志)
这里的输入消息来自网络,输出消息被发送到网络中;内部状态是私有的,输出日志是公开的;该函数的某些输入输出可以为空。 -
继续等待激活,或者会话终止。
Authenticated-links Model:网络中有多个参与者 P 1 , ⋯ , P n P_1,\cdots,P_n P1,⋯,Pn,它们各自运行协议 π \pi π 的若干副本。敌手具有如下能力:
- 监听到 π \pi π 的输出消息、输出请求、输出日志,但是不知道它们的内部状态;
- 任意决定 π \pi π 的调用和激活顺序;
- 任意决定 π \pi π 的外部请求;
- 任意决定输出消息的是否递交、递交顺序,但是被约束为只能忠实递交消息( P i P_i Pi 收到来自 P j P_j Pj 的消息,那么 P j P_j Pj 曾经向 P i P_i Pi 发出了该消息)。
假设各个参与方的输入是 x = ( x i ) , r = ( r i ) x=(x_i),r=(r_i) x=(xi),r=(ri),在敌手 A A A 的控制下执行 π \pi π,简记 A d v π , A ( x , r ) Adv_{\pi,A}(x,r) Advπ,A(x,r) 是敌手的视图, A u t h π , A , i ( x , r ) Auth_{\pi,A,i}(x,r) Authπ,A,i(x,r) 是各个参与者的视图,定义这些视图的联合:
A u t h π , A ( x , r ) = ( A d v π , A ( x , r ) , A u t h π , A , 1 ( x , r ) , ⋯ , A u t h π , A , n ( x , r ) ) Auth_{\pi,A}(x,r) = \left(Adv_{\pi,A}(x,r),Auth_{\pi,A,1}(x,r),\cdots,Auth_{\pi,A,n}(x,r)\right) Authπ,A(x,r)=(Advπ,A(x,r),Authπ,A,1(x,r),⋯,Authπ,A,n(x,r))
Unauthenticated-links Model:
- 除了上述能力,敌手还可以:修改消息、插入假消息;
- 协议 π \pi π 具有初始化函数 I ( r ) = I 0 ( r ) ∥ I 1 ( r ) ∥ ⋯ ∥ I n ( r ) I(r) = I_0(r)\|I_1(r)\|\cdots\|I_n(r) I(r)=I0(r)∥I1(r)∥⋯∥In(r),其中 r r r 是随机带, I 0 I_0 I0 是公共信息, I i I_i Ii 是 P i P_i Pi 的私有信息。该初始化函数用于 “引导安全”(the Bootstrapping of security),通常会假设 PKI-based Model(例如 certificate authority, CA)。
类似的,定义联合视图:
U n a u t h π , A ( x , r ) = ( A d v π , A ( x , r ) , U n a u t h π , A , 1 ( x , r ) , ⋯ , U n a u t h π , A , n ( x , r ) ) Unauth_{\pi,A}(x,r) = \left(Adv_{\pi,A}(x,r),Unauth_{\pi,A,1}(x,r),\cdots,Unauth_{\pi,A,n}(x,r)\right) Unauthπ,A(x,r)=(Advπ,A(x,r),Unauthπ,A,1(x,r),⋯,Unauthπ,A,n(x,r))
协议的模拟:令 π , π ′ \pi, \pi' π,π′ 分别是 AM 和 UM 下的消息驱动协议;我们说 π ′ \pi' π′ 在无认证网络中模拟 π \pi π,如果关于 π ′ \pi' π′ 的任意敌手 U U U,总存在关于 π \pi π 的某敌手 A A A,使得对于任意的输入 x x x,在随机带 r r r 下两者的视图(计算)不可区分,
A u t h π , A ( x ) ≡ c U n a u t h π , A ( x ) Auth_{\pi,A}(x) \overset{c}{\equiv} Unauth_{\pi,A}(x) Authπ,A(x)≡cUnauthπ,A(x)
它主要是描述了不同敌手模型下两个协议的功能等价性(equivalent behavior)
Message Transmission
[BCK98] 给出了从 AM 下任意的消息驱动协议,加强为 UM 下协议的通用转换:
- 考虑 AM 下的消息传输协议,
- 在 P i P_i Pi 上发起外部请求 ( P j , m ) (P_j,m) (Pj,m),它将 ( P i , P j , m ) (P_i,P_j,m) (Pi,Pj,m) 发送到网络,并输出日志 “ P i P_i Pi sent m m m to P j P_j Pj”;
- 若 P j P_j Pj 收到消息 ( P i , P j , m ) (P_i,P_j,m) (Pi,Pj,m),它输出日志 “ P j P_j Pj received m m m from P i P_i Pi”。
- 假设协议 λ \lambda λ 模拟了上述 MT 协议,将它称之为 MT-authenticator,基于它可以定义如下的 compiler,
- 编译器 C λ C_\lambda Cλ,输入 AM 下的消息驱动协议 π \pi π,输出另一个协议 π ′ \pi' π′,它调用 λ \lambda λ 和 π \pi π 作为子程序;
- P i P_i Pi 上的 π \pi π 输出某个消息时, π ′ \pi' π′ 用相应的外部请求激活 λ \lambda λ;
- 协议 π ′ \pi' π′ 被输入消息激活时,使用该消息激活 λ \lambda λ,仅当日志记录了 “ P j P_j Pj received m m m from P i P_i Pi” 再用 m m m 激活 P j P_j Pj 上的 π \pi π。
- 可以证明, π ′ \pi' π′ 模拟了 π \pi π,我们称 C λ C_\lambda Cλ 是 authenticator。
[BCK98] 给出了两种 MT-authenticator 的构造,
基于数字签名算法:
基于公钥加密和消息验证码:
为了避免敌手的消息重播攻击,第二条网络流是必须的,因此三轮通信不可避免;在这三轮通信中,消息 m m m 可以仅在第一轮或第三轮中实际发送,其他两轮仅使用唯一的消息 ID 占位;在认证算法中,身份 B B B 必须被包含在内。
Key Exchange
虽然上述算法满足了 UM 安全,但是每次消息传递都需要执行公钥密码算法,因此计算效率很低。[BCK98] 基于 KE 协议给出了更加高效的 authenticator 构造。
Ideal KE process:参与方 P i P_i Pi,可信方 T T T,敌手 S S S。KE 协议有四种激活方式,
- 调用 P i P_i Pi 作为初始者,和 P j P_j Pj 建立新的会话密钥;输出日志 “ P i P_i Pi established key ( k , s : = ( P i , P j , c , Initiator ) ) (k,s:=(P_i,P_j,c,\text{Initiator})) (k,s:=(Pi,Pj,c,Initiator)) with P j P_j Pj”,其中 c c c 是 P i P_i Pi 和 P j P_j Pj 之间已有会话的计数器(确保 ID 的唯一性),元组 s s s 是新会话的 ID(记录到全局集合 I I I 中),而 k k k 是可信方 T T T 产生的会话密钥
- 调用 P j P_j Pj 作为接收者,和 P j P_j Pj 建立关于会话 s s s 的密钥;仅当会话 s ∈ I s \in I s∈I 已经存在,输出日志 “ P j P_j Pj established key ( k , s ′ : = ( P i , P j , c , Responder ) ) (k,s':=(P_i,P_j,c,\text{Responder})) (k,s′:=(Pi,Pj,c,Responder)) with P i P_i Pi”,并且从 I I I 中删除 s s s,这里的 k k k 等于会话 s s s 对应的 k k k
- 腐坏已有的会话 s s s(在或曾经在 I I I 内),获得对应的 k k k;输出日志 “'Session s s s is corrupted"
- 腐坏参与者 P i P_i Pi,获取其所有已知的 k k k;输出日志 “' P i P_i Pi is corrupted"
令 r T r_T rT 和 r S r_S rS 分别是可信方和敌手的随机带,敌手和参与者的视图为 A d v S ( r S , r T ) Adv_S(r_S,r_T) AdvS(rS,rT) 和 I d e a l S , i ( r S , r T ) Ideal_{S,i}(r_S,r_T) IdealS,i(rS,rT),定义联合视图:
I d e a l S ( r S , r T ) = ( A d v S ( r S , r T ) , I d e a l S , 1 ( r S , r T ) , ⋯ , I d e a l S , n ( r S , r T ) ) Ideal_S(r_S,r_T) = \left(Adv_{S}(r_S,r_T),Ideal_{S,1}(r_S,r_T),\cdots,Ideal_{S,n}(r_S,r_T)\right) IdealS(rS,rT)=(AdvS(rS,rT),IdealS,1(rS,rT),⋯,IdealS,n(rS,rT))
KE protocol:我们说 π \pi π 是安全的密钥交换协议,如果任意 UM 敌手 U U U,都满足 U n a u t h π , U ( ) ≡ c I d e a l S ( ) Unauth_{\pi,U}() \overset{c}{\equiv} Ideal_S() Unauthπ,U()≡cIdealS()
[BCK98] 证明了 Diffie-Hellman 协议( g , ( x , g x ) , ( y , g y ) , g x y g,(x,g^x),(y,g^y),g^{xy} g,(x,gx),(y,gy),gxy)是 AM 安全的,然后用 MT-authenticator 将它加强为 UM 安全的 KE 协议。
然后基于 KE 协议,[BCK98] 构造更加高效的 MT-authenticator,
- 初始时,参与者之间两两运行 KE 协议,获得会话密钥 K i j K_{ij} Kij
- 参与者 P i P_i Pi 维护一个发送消息到 P j P_j Pj 的计数器 c i j c_{ij} cij
- 在 P i P_i Pi 上发起外部请求 ( P j , m ) (P_j,m) (Pj,m),它将 ( m , c i j , M A C K i j ( m , c i j ) ) (m,c_{ij},MAC_{K_{ij}}(m,c_{ij})) (m,cij,MACKij(m,cij)) 发送到网络,并输出日志 “ P i P_i Pi sent m m m to P j P_j Pj”
- 若 P j P_j Pj 收到消息 ( m , c i j , t ) (m,c_{ij},t) (m,cij,t),先验证 t = M A C K i j ( m , c i j ) t=MAC_{K_{ij}}(m,c_{ij}) t=MACKij(m,cij),再输出日志 “ P j P_j Pj received m m m from P i P_i Pi”
将上述协议记为 λ K E \lambda_{KE} λKE,利用它可以构造出通用协议的编译器。
CK Model
[BCK98] 给出的 KE 安全性定义是基于模拟的,仅定义了理想世界中的敌手行为,并没有刻画真实世界中敌手的能力。[CK01] 给出了基于游戏的模型和安全性,被称为 CK 模型和 CK 安全性。
Sessions:某个参与方上执行某协议代码的交互式子例程,具有唯一的会话标识 ( P i , P j , s ) (P_i,P_j,s) (Pi,Pj,s),其中 s s s 是用于区分 P i , P j P_i,P_j Pi,Pj 之间不同会话的 ID;在其执行过程中,维护它的本地状态(local state)和本地输出(local output),前者记录了独立于其他会话的极大信息(session-specific information,不直接包含全局秘密);当会话完成后,立即擦除(erase)其本地状态。
Key-exchange protocols:用于在参与者之间两两产生会话密钥的消息驱动协议。上层协议使用输入 ( P i , P j , s , role ∈ { Initiator , Responder } ) (P_i,P_j,s,\text{role} \in \{\text{Initiator}, \text{Responder}\}) (Pi,Pj,s,role∈{Initiator,Responder}) 在参与者 P i P_i Pi 上调用此协议,上层协议选取恰当的 s s s 确保它是会话的唯一标识。我们说 P i P_i Pi 和 P j P_j Pj 上的两个会话是匹配的(matching),如果它们的输入分别是 ( P i , P j , s , Initiator ) (P_i,P_j,s,\text{Initiator}) (Pi,Pj,s,Initiator) 和 ( P j , P i , s , Responder ) (P_j,P_i,s,\text{Responder}) (Pj,Pi,s,Responder)。两个匹配的会话不需要同时完成,只有完成的会话才输出会话密钥。
Attacker capabilities:它是一个完全控制了通信链路的 PPT 敌手,可以监听所有消息,可以决定消息是否递交和何时递交,可以任意修改消息、插入新消息,可以安排会话的初始化顺序和激活顺序。即,它是一个 UM 敌手。
除此之外,敌手还可以发起一些查询,获得指定参与者或者指定会话的某些秘密信息。
- Session-state reveal:对于未完成的会话,敌手获得它及其子例程的本地状态。对于本地状态应该包含哪些信息,[CK01] 将它留给了具体的协议设计。
- Session-key query:对于完成的会话,敌手获得它生成的会话密钥;这捕获了上层协议中会话密钥的部分/全部、直接/间接泄露。
- Party corruption:敌手获得指定参与方的全部内部状态,包括长期秘密、未完成会话的本地状态、以及已完成会话构建的会话密钥。
我们称某会话本地泄露(locally exposed),如果它遭受了上述的三种查询;如果它自身或者其匹配会话(如果存在)本地泄露了,那么称该会话泄露(exposed)。
Session expiration:会话过期,将指定的会话密钥或者本地状态从参与者的内存中擦除。上述的三种查询只能发生在指定会话过期之前;注意一个会话属于某个参与者,其匹配会话不一定过期,因此该会话密钥仍有泄露风险。
Test-session:敌手可以对于已完成、未过期、未发生泄露的会话,发起特殊的 test-session query,随机掷币 b ∈ { 0 , 1 } b \in \{0,1\} b∈{0,1},决定敌手获得该会话的会话密钥,还是获得同分布的随机数。随后敌手可以继续执行上述的 UM 动作和三种查询,但是不允许对选定的 test-session 做这些查询(保证它最终没有泄露,排除平凡攻击);除非该会话或者其匹配会话过期了,那么相应的参与方允许被腐坏(其内存已经擦除了会话状态和会话密钥)。
SK-Security:我们说某 KE 协议 π \pi π 是安全的,如果对于任意的 UM 敌手 U \mathcal{U} U,
- Consistency / Completeness:如果两个未腐坏的参与方完成了一对匹配的会话,那么这一对会话的输出是相同的会话密钥;
- Core property / Soundness:敌手 U \mathcal{U} U 执行 UM/AM 动作和三种查询,指定某个 test-session 然后猜测 b ′ ∈ { 0 , 1 } b'\in \{0,1\} b′∈{0,1},它赢得游戏(即 b = b ′ b=b' b=b′)的概率不超过 1 / 2 + negl ( λ ) 1/2+\text{negl}(\lambda) 1/2+negl(λ),其中 λ \lambda λ 是安全参数。
该安全性定义仅关注已完成会话,但是并没有对协议的终止属性做出要求;如果所有的会话都被敌手挂起,那么也满足该安全定义。为了简洁性,[CK01] 排除了对协议终止的要求。
该安全性定义捕获了如下的安全属性(反之不然):
- 只要交换过程中没有参与方被腐坏,那么将获得正确的会话密钥分布;
- 会话密钥和参与者身份的正确且一致的绑定;
- 抵御 MitM 攻击、已知密钥攻击(known-key attacks);
- 具有前向安全性(perfect forward secrecy, PFS),等等。
如果禁止会话过期(那么敌手始终无法腐坏 test-session 及其匹配会话所在的参与者),那么上述的安全性定义弱化为 SK-security without PFS。注意 key-transport protocols(或者说 KEM)和 key exchange protocols 的区别:前者直接基于 PKE 传输会话密钥(发送单个密文消息),一旦参与方被腐坏,敌手用长期密钥解密监听到的密文,所有的会话密钥都被完全泄露,因此不具备 PFS 性质。
[CK01] 证明了原始 DH 协议(Two-move Diffie-Hellman)满足 AM 下的上述安全性,然后使用基于签名的 MT-authenticator 得到 UM 下安全的 KE 协议,如下:
CK+ Model
[Kra05] 考虑了一些没有被 CK Model 捕获的攻击,然后给出了 [CK01] 安全性的加强版本,被后续文章称为 “CK+” 模型/安全。
CKI
在 CK 模型中,敌手具有 Party corruption 能力,即敌手 A \mathcal{A} A 获得 P P P 的长期密钥,同时也获得了对于 P P P 的完全控制;因此 test session 排除了长期密钥泄露的参与者上的所有会话。
但是这过于简化了:实际场景中,敌手可能获得了 P P P 的长期密钥,但是也许并没有获得 A A A 计算机的访问权限(因此看不到内存中的会话状态)。此时我们希望:如果是 P P P 自身运行的会话,那么 A \mathcal{A} A 无法破坏该会话的安全性。
我们说一个会话是干净的(clean),如果:
- 在该会话的执行过程中,敌手没有执行 Session-state reveal
- 在该会话完成后(擦除前),敌手没有执行 Session-key query
如果敌手 A \mathcal{A} A 获得了参与方 P P P 的长期密钥(但是没有获得 P P P 的控制权),那么敌手可以假冒为 P P P 和其他的参与方交互;现在考虑 A \mathcal{A} A 对于 P P P 上会话的安全性破坏。
Key-Compromise Impersonation Attacks:敌手 A \mathcal{A} A 执行一些 UM/AM 动作和三种查询,并且通过某种手段(仅)获得了某个参与方 P P P 的长期密钥。然后关于 P P P 上的某个会话执行 test-session query,给出猜测 b ′ b' b′;要求该会话是干净的,该会话的对等方没有被腐坏,并且该会话的匹配会话(如果存在的话)也是干净的。
wPFS
Perfect Forward Secrecy (PFS):敌手 A \mathcal{A} A 执行一些 UM/AM 动作和三种查询,然后指定某个会话为 test-session,等到该会话过期后(注意,并不对其匹配会话做要求),对该会话所在的参与者 P P P 执行 Party corruption(获得长期密钥和本地内存),然后给出猜测 b ′ b' b′,其成功概率不超过 1 / 2 + negl ( λ ) 1/2+\text{negl}(\lambda) 1/2+negl(λ),其中 λ \lambda λ 是安全参数。
所有的 2 2 2-message protocols 都无法达到 full PFS:参与者 P 1 P_1 P1 作为协议启动方,发送消息给另一个参与者 P 2 P_2 P2,那么 P 2 P_2 P2 立即完成会话并输出会话密钥 K K K,但此时 P 2 P_2 P2 上的会话仍未完成(敌手控制消息的递交)。等到 P 2 P_2 P2 的会话过期后,敌手 A \mathcal{A} A 腐坏 P 1 P_1 P1 获得会话状态和长期密钥(是否腐坏 P 2 P_2 P2 无所谓),从而重构出 K K K,这就破坏了 P 2 P_2 P2 的前向安全。
[Kra05] 考虑了 PFS 的弱化版本,限制敌手不能获取 test-session 及其匹配会话的状态。将这个安全属性作为 2 2 2-message protocols 的替代要求。
weak PFS (wPFS):敌手 A \mathcal{A} A 执行一些 UM/AM 动作和三种查询,然后指定某个会话为 test-session,并且通过某种手段获得了该会话两个对等方的长期密钥;要求该会话是干净的,并且该会话的匹配会话(如果存在的话)也是干净的。给出猜测 b ′ b' b′,其成功概率不超过 1 / 2 + negl ( λ ) 1/2+\text{negl}(\lambda) 1/2+negl(λ),其中 λ \lambda λ 是安全参数。
MEX
如果某个参与方的长期密钥泄露了,同时该参与者上运行的某会话的短期秘密也完全泄露了,那么敌手可以很容易构造出该会话的会话密钥。[Kra05] 考虑针对泄露攻击的最大抵御能力:只要不是某一方的长期密钥和短期秘密同时泄露,那么 KE 协议应当保证会话密钥的随机性。
maximal resistance to exposure attacks:敌手 A \mathcal{A} A 执行一些 UM/AM 动作和三种查询,然后指定某个会话为 test-session,并且通过某种手段获得了
- 该会话的短期秘密 + 对等方的长期密钥;
- 会话拥有者的长期密钥 + 匹配会话(如果存在的话)的短期秘密;
- 该会话的短期秘密 + 匹配会话(如果存在的话)的短期秘密。
给出猜测 b ′ b' b′,其成功概率不超过 1 / 2 + negl ( λ ) 1/2+\text{negl}(\lambda) 1/2+negl(λ),其中 λ \lambda λ 是安全参数。
CK+ Security
[Kra05] 给出的增强安全性:满足 CK 安全性,抵御 CKI 攻击和 MEX 攻击,并且满足 wPFS 属性。
这里按照 [FSXY15] 的写法,描述 PKI-based 2 2 2-message AKE protocols 的 CK+ 安全性。
参与者 U i U_i Ui 具有长期/静态私钥 s i s_i si 和公钥 S i S_i Si,其上运行的会话具有短期密钥 x i x_i xi 和公钥 X i X_i Xi,并且 S i S_i Si 被绑定到 U i U_i Ui 的身份上(基于 PKI,比如 CA)
-
上层协议使用消息 ( Π , I , U A , U B ) (\Pi,\mathcal I,U_A,U_B) (Π,I,UA,UB) 激活启动者,该会话的外部输出为 X A X_A XA
-
上层协议使用 ( Π , R , U B , U A , X A ) (\Pi,\mathcal R,U_B,U_A,X_A) (Π,R,UB,UA,XA) 激活响应者,该会话的外部输出为 X B X_B XB,并且计算出会话密钥 S K SK SK,完成会话并擦除状态
-
上层协议使用消息 ( Π , I , U A , U B , X A , X B ) (\Pi,\mathcal I,U_A,U_B,X_A,X_B) (Π,I,UA,UB,XA,XB) 激活启动者,计算出会话密钥 S K SK SK,完成会话并擦除状态
其中, Π \Pi Π 是协议 ID, I , R \mathcal I,\mathcal R I,R 是角色 ID(启动者、响应者), U A , U B U_A,U_B UA,UB 是参与者 ID, X A , X B X_A,X_B XA,XB 是网络消息。双方都以当前视图作为会话 ID(原始 [CK01] 中则由敌手选取;两者不能转化的,导致的 AKE 安全性相互独立),即启动者使用 s i d = ( Π , I , U A , U B , X A ) sid=(\Pi,\mathcal I,U_A,U_B,X_A) sid=(Π,I,UA,UB,XA) 或者 s i d = ( Π , I , U A , U B , X A , X B ) sid=(\Pi,\mathcal I,U_A,U_B,X_A,X_B) sid=(Π,I,UA,UB,XA,XB),响应者使用 s i d = ( Π , R , U B , U A , X A , X B ) sid=(\Pi,\mathcal R,U_B,U_A,X_A,X_B) sid=(Π,R,UB,UA,XA,XB);以会话 ID 作为匹配的依据。
敌手 A \mathcal A A 是一个完全控制信道的 PPT 图灵机,可以执行如下的四种 adversary query,
会话新鲜度,定义如下:
安全游戏,定义如下:
CK+ 安全性,定义如下:
此外,[FSXY15] 还给出了 ID-AKE 相应的 id-CK+ 安全性,不再基于公钥基础设施,而是基于 IBE 方案(也需要中心服务器)。
HMQV
MQV 协议是一种相当高效的 KE 协议,被许多组织标准化。但是,该协议没有安全性证明;事实上,它基本什么安全目标也没有达到!
[Kra05] 给出了 MQV 的哈希变体,它同样高效,且被证明在 ROM 下满足 CK+ 安全性。MQV 和 HMQV 的步骤如下:
MQV 基本就是原始 DH 协议,双方额外持有长期私钥 a , b a,b a,b 和通过 CA 发布的长期公钥 A , B A,B A,B。由于 e , d e,d e,d 长度为 l = ∣ q ∣ / 2 l=|q|/2 l=∣q∣/2,因此 B e , A d B^e,A^d Be,Ad 的计算代价仅为正规求幂运算的一半。换句话说:原始 DH 协议中每个参与方需要 2 2 2 个求幂运算,而 MQV 协议中每个参与方需要 2.5 2.5 2.5 个求幂运算;两者的总通信开销都是 2 2 2 个群元素。
原始 DH 协议是无认证的,只有短期秘密 x , y x,y x,y,容易遭受 MitM 攻击。让双方都具有长期秘密 a , b a,b a,b,同时使用 x , y , a , b x,y,a,b x,y,a,b 构造会话密钥,一种直观办法是计算 S K = ( Y B ) x + a = ( X A ) y + b = g ( x + a ) ( y + b ) SK = (YB)^{x+a} = (XA)^{y+b} = g^{(x+a)(y+b)} SK=(YB)x+a=(XA)y+b=g(x+a)(y+b)。但是, A A A 是公钥,敌手可以使用 x ∗ , X ∗ = g x ∗ / A x^*,X^*=g^{x^*}/A x∗,X∗=gx∗/A 冒充 A ^ \hat A A^,然后计算出 S K = ( Y B ) x ∗ = ( X ∗ A ) y + b SK=(YB)^{x^*}=(X^*A)^{y+b} SK=(YB)x∗=(X∗A)y+b。
避免上述攻击的办法是,改成 S K = g ( x + d a ) ( y + e b ) SK=g^{(x+da)(y+eb)} SK=g(x+da)(y+eb),其中 d , e d,e d,e 分别是关于 X , Y X,Y X,Y 的变量。MQV 将变量 d , e d,e d,e 设置为了 X , Y X,Y X,Y 的比特截断,但是并不安全;HMQV 基于 RO 计算它们,达到了 CK+ 安全性。
eCK Model
[Kra05] 定义的 CK+ 安全性,由于它包含了 CK 模型以及 CK 模型未能捕获的三种攻击,导致其安全性证明极为繁琐。[LLM07] 修改了敌手问询的方式,定义了一种相似的 KE 协议安全性,但可以对所有攻击的抵御给出统一的安全证明,被后续研究称之为 eCK 模型/安全性。
CK+ 和 eCK 是不可比的,前者捕获了 Session State Reveal 攻击,后者捕获了 Adaptive Key Exposure 攻击。因此 CK+ 严格比 CK 更强,但是 eCK 并不比 CK 更强。两者都是强大的 KE 安全模型,但似乎 CK+ 用的更普遍/现实一些。它们捕获的攻击类型如下:
[Kra05] 模块化地考虑了 AKE 安全性的各种组件。
key registration
在 PKI-based AKE 协议中,公钥注册有多种做法。
- Honest key registration:各个参与方(包括本来就被敌手控制的)的密钥都是诚实生成的,其公钥被正确绑定到相应的参与者;仅当公钥注册完成后,敌手才能腐坏参与方,并且敌手不能再注册公钥。
- Proof-of-possession:在公钥注册时,CA 会执行某种有效性检查(例如 ZKPoK);敌手(腐坏的参与方)可以随时注册公钥。
- Arbitrary key registration: 参与者可以随意注册公钥,CA 不做任何检查;敌手(腐坏的参与方)可以随时注册公钥。
matching sessions
哪些会话被认为是相互匹配的,也有不同的方式。
- Matching conversations:使用视图/对话(发送和接受的所有消息)作为会话 ID
- Partner functions:根据某个函数,将视图/对话的函数值作为会话 ID
- Session IDs are assigned by the adversary:敌手激活某诚实参与方上的会话时,给它提供一个字符串作为会话 ID,约束敌手不能为同一个参与者上的不同会话提供相同字符串
adversary
敌手完全控制了网络,并可以做出如下查询(的子集)。
- Send ( M , U , s i d ) \text{Send}(M,U,sid) Send(M,U,sid),将消息 M M M 发送到参与者 U U U 上的 s i d sid sid 会话
- Reveal ( U , s i d ) \text{Reveal}(U,sid) Reveal(U,sid),泄露参与者 U U U 上已完成会话 s i d sid sid 的会话密钥
- Session-State Reveal ( U , s i d ) \text{Session-State Reveal}(U,sid) Session-State Reveal(U,sid),泄露参与者 U U U 上未完成会话 s i d sid sid 的会话状态
- Corrupt ( U ) \text{Corrupt}(U) Corrupt(U),腐坏参与者 U U U,获得完全控制权
- Test ( U , s i d ) \text{Test}(U,sid) Test(U,sid),将参与者 U U U 上已完成会话 s i d sid sid 设为 test session,限制敌手只能做一次该问询
freshness
会话的新鲜度,也有多种定义方式。
- 基础定义:敌手没有腐坏该会话的 owner 及其 peer,并且没有对该会话或者其匹配会话(如果存在的话)发起 Reveal \text{Reveal} Reveal 或者 Session-State Reveal \text{Session-State Reveal} Session-State Reveal 攻击。
- 在上述的基础定义上,额外禁止敌手对任意参与者执行 Corrupt \text{Corrupt} Corrupt 攻击。
- 在上述的基础定义上,允许敌手腐坏 owner,前提是该会话已经完成;允许敌手腐坏 peer,前提是其匹配会话已经完成。
General AKE Security
不同的组件,将会组合出不同的 AKE 安全性。[LLM07] 定义了如下的 “一般” 安全性,
eCK Security
[LLM07] 重新定义了敌手的问询方式,以解放 CK 模型中敌手的能力,从而把 CKI, MEX, wPFS 都自然地捕获。此外,[LLM07] 不再像 [CK01] 那样要求协议本身给出会话状态的泄露,而是把所有 session-specific information 视为短期密钥;会话的行为由长期密钥、短期密钥和对话所完全确定。事实上,短期密钥可以被设定为会话的全部随机带。
eCK 模型中的敌手问询包含:
- Send ( M , U , s i d ) \text{Send}(M,U,sid) Send(M,U,sid),将消息 M M M 发送到参与者 U U U 上的 s i d sid sid 会话
- Reveal ( U , s i d ) \text{Reveal}(U,sid) Reveal(U,sid),泄露参与者 U U U 上已完成会话 s i d sid sid 的会话密钥
- Ephemeral Key Reveal ( U , s i d ) \text{Ephemeral Key Reveal}(U,sid) Ephemeral Key Reveal(U,sid),泄露参与者 U U U 上未完成会话 s i d sid sid 的短期密钥
- Long-Term Key Reveal ( U ) \text{Long-Term Key Reveal}(U) Long-Term Key Reveal(U),泄露参与者 U U U 的长期密钥
- Test ( U , s i d ) \text{Test}(U,sid) Test(U,sid),将参与者 U U U 上已完成会话 s i d sid sid 设为 test session,限制敌手只能做一次该问询
原始 CK 模型中的 Corrupt ( U ) \text{Corrupt}(U) Corrupt(U),可以使用 Reveal ( U , s i d ) \text{Reveal}(U,sid) Reveal(U,sid), Ephemeral Key Reveal ( U , s i d ) \text{Ephemeral Key Reveal}(U,sid) Ephemeral Key Reveal(U,sid) 和 Long-Term Key Reveal ( U ) \text{Long-Term Key Reveal}(U) Long-Term Key Reveal(U),还有敌手监听到的对话,给构造出来。 不过会话状态是由短期密钥、长期密钥和对话联合确定的,所以原本的 Session-State Reveal ( U , s i d ) \text{Session-State Reveal}(U,sid) Session-State Reveal(U,sid) 无法构造出来(需要知道长期密钥的间接信息,但是又不能直接得到长期密钥)。 反过来,CK+ 模型也没有捕获任意的密钥泄露。因此 eCK 和 CK+ 是不可比的。
利用上述的敌手问询,新鲜度被定义如下:
- Freshness for Strong AKE Security. 考虑一个已完成会话 s i d sid sid,其拥有者是 A A A,对等方是 B B B,其匹配会话是 s i d ∗ sid^* sid∗(如果存在的话)。我们说该会话是新鲜的,如果:
- 敌手没有执行 Reveal ( A , s i d ) \text{Reveal}(A,sid) Reveal(A,sid) 或者 Reveal ( B , s i d ∗ ) \text{Reveal}(B,sid^*) Reveal(B,sid∗)
- 敌手没有同时执行 Long-Term Key Reveal ( A ) \text{Long-Term Key Reveal}(A) Long-Term Key Reveal(A) 和 Ephemeral Key Reveal ( A , s i d ) \text{Ephemeral Key Reveal}(A,sid) Ephemeral Key Reveal(A,sid)
- 如果存在匹配会话 s i d ∗ sid^* sid∗,敌手没有同时执行 Long-Term Key Reveal ( B ) \text{Long-Term Key Reveal}(B) Long-Term Key Reveal(B) 和 Ephemeral Key Reveal ( B , s i d ∗ ) \text{Ephemeral Key Reveal}(B,sid^*) Ephemeral Key Reveal(B,sid∗)
- 如果不存在匹配会话,在会话 s i d sid sid 完成之前,敌手没有执行 Long-Term Key Reveal ( B ) \text{Long-Term Key Reveal}(B) Long-Term Key Reveal(B)
- Freshness for Strong AKE Security for Two-Pass Protocols. 对于两轮消息的协议,需要将 full PFS 放松为 weak PFS,因此做如下的修改
- 前三个要求保持不变;
- 第四个要求修改为:如果不存在匹配会话,在整个实验阶段内,敌手没有执行 Long-Term Key Reveal ( B ) \text{Long-Term Key Reveal}(B) Long-Term Key Reveal(B)
上述的各个条件排除了各种平凡攻击,并要求 Test Session 可以抵御其余的所有攻击(包含了 CKI, MEX 以及 full/weak PFS)。这就把 CK 模型及其未能捕获的三种攻击,都统一在了单个模型里。
使用 General AKE Security 来定义 eCK 安全性,指定 AKE 实验的组件如下:
- 公钥注册采用 Arbitrary Key Registration
- 伙伴关系采用 Matching Conversations
- 敌手可以执行 Send, Reveal, Ephemeral Key Reveal 和 Long-Term Key Reveal
- 新鲜度采用 Freshness for Strong AKE Security (for Two-Pass Protocols)
eCK 安全性考虑了最强的公钥注册和敌手能力,因此它可以导出采用 Matching Conversations 作为伙伴关系的其他全部安全性。
NAXOS
[LLM07] 基于 DH 假设和 DLOG 问题,构造了 eCK 安全的 AKE 协议 NAXOS,如下图所示:
其中 H 1 , H 2 H_1,H_2 H1,H2 是相互独立的随机谕言机。这里将临时秘密 esk 和静态秘密 ssk,都输入到 RO 里以生成 DH 指数(随机带),从而抵御 MEX 攻击;该方法被称为 NAXOS technique,后续的很多研究都使用该技术。