Minimal Symmetric PAKE and 1-out-of-N OT from Programmable-Once Public Functions:可一次编程公共函数的最小对称PAKE和N取1 OT
前述
坐标2021.1.23
本周最后一篇啦~ 这篇看的是真的迷糊,主要是对于密钥协商这一块的知识比较淡薄,用到的一些支撑技术也不太了解= =
先大致一读,后续研究用到参考了再来细看
关于paper
密钥协商协议
其中一种基于加密密钥交换的EKE协议:用共享密钥p加密随机产生的公开密钥K,建立会话密钥k。论文是对该模型的推广
Symmetric password-authenticated key exchange (sPAKE) :对称口令认证密钥交换,可以看作是传统密钥交换的扩展,当且仅当双方共享一个公共秘密(可能是低熵)口令时,双方就共享密钥达成一致。。。
还提出了一个 N取1不经意传输oblivious transfer (OT) 协议。
不经意传输协议快速入门
(看论文是真的nb啊,知识一波接一波的输入。。。
概括就是A发给B一些消息,他不知道B选择了哪条,B也不知道除了选择的那个之外的消息,保护双方隐私。(密码学真是博大精深
1 of N:A发出去N个消息,B取1
可编程一次性公共函数 programmable-once public function (POPF):POPF是一个函数,它的输出可以由一方在一个点上编程。在可证明的意义上,该函数的所有其他输出都不受任何一方的控制。
Keyword:Encrypted Database; Database Reconstruction; Attack
正文
一些概念
- 安全模型:基于博弈的PAKE安全模型,为了处理密码的低熵特性,假设密码是独立于固定分布而选择的。这无法有效地模拟密码选择和输入之间有趣的、真实的关系。本文基于 可组合universally-composable(UC)定义,基于仿真的定义允许外部环境选择密码,因此不对密码的分布进行任何假设。UC定义更适合于处理密码之间的依赖关系,例如输入错误或在不同服务器上使用类似的密码。
- 显式/隐式身份验证:在隐式身份验证下,如果两个参与者不共享相同的密码(包括诚实的一方错误键入其密码的情况,或者攻击者未能成功猜出密码),那么每一方都会输出一个看起来随机的密钥。在双方继续使用各自的密钥并且随后的一些任务失败之前,他们可能不会收到任何协议失败的通知。在显式身份验证下,诚实的一方在PAKE实例结束时立即知道协议是否成功。本文采用隐式,避免额外工作流
- 测量环复杂度:用流来描述,流由来自每一方的消息组成,消息可以按任意顺序连续发送。
- 理想模型和设置假设:理想密码-其中所有参与方都有对于一系列随机排列{E(k,·)}k和相应的逆{E−1(k,·)}的oracle访问。本文的结构依赖于较弱的随机oracle模型。另一种是 公共引用字符串(CRS),其中所有参与方都可以访问诚实生成的公共字符串(多项式长度)(上一篇生成过)
本文的贡献:用可编程的一次公共函数(POPF)代替理想的密码,一个POPF只需要对一个随机oracle进行2次调用就可以构造出来【理想需8次】
准备工作
(1)未经认证的密钥协议:通用2轮密钥协商协议的结构
如果两个分布 KA.key1(a,M2) 、KA.K 不可区分,则2轮KA协议是安全的。
如果两个分布XXX不可区分,则2轮KA协议是伪随机的。
如果对于所有PPT A,两种分布XXX不可区分,则2轮KA协议具有强随机响应。
如果对于所有PPT A,分布XXX不可区分,则2轮KA协议KA是健壮的。
可编程一次公共函数
(1)EKE:Alice使用密码pw1生成一个普通KA协议消息M1并发送Φ1=E(pw1,M1),其中E是一个理想的密码。Bob对称地发送Φ2=E(pw2,M2)。现在,Alice将E−1(pw1,Φ2)解释为KA协议消息,并计算相应的KA输出作为她的sPAKE输出。
我们的贡献是用一个更简单的对象来实例化理想的密码(E,E−1),这个对象称为可编程的一次性公共函数(POPF)。
Alice: Φ1=Program(pw1,M1);Bob: ^M1=Eval(Φ1,pw2)
(2)诚实一方的POPF就像一个随机函数:Eval函数调用一个随机的oracle H
(3)可编程一次:在经典的EKE中,假设一个破坏的Bob发送Φ*=Φ2。
a在看到Φ*时,模拟器可以识别唯一的pw*,以便Bob能够选择E−1(pw*,Φ*)。本文让模拟器能以1/q概率对这些输出进行编程,其中q是攻击者进行的随机oracle查询数。它通过“猜测”oracle的哪些查询将见证攻击者选择pw*来实现这一点。
定义:一个可编程一次的公共函数(POPF)由算法EvalH:X×{0,1}*→Y和 ProgramH:{0,1}*×Y→X组成。H表示POPF所需的任何全局设置(如随机oracle).
HSim1是一种交互式算法,它代替H并输出一个值Φ∈X及其内部状态。HSim2是第二个交互算法,它使用这个状态和一个oracle Y{0,1}来代替H。同样,Extract1与攻击者交互,代替H,并输出其内部状态。Extract2然后使用这个内部状态以及攻击者选择的Φ∈X来计算哪个X∈{0,1}*是攻击者编程的。Extract3还使用内部状态。
一个元组(Program,Eval,HSim,Extract)是一个安全的POPF:正确性、诚实的模拟、直线提取、不可控输出。。。
架构概述
Alice是如何编程的?假设Alice有一对(x*,y*),其中y∈G,则Program(x,y*)可被计算以得到(s,T)如下:
(1)选择随机r ←{0,1}3κ 并查询H(x*,r)。
(2)求解方程H(x*,r)·T=y* 中的T。
(3)求解方程r=s⊕H′(x,T)中的s。
可以很容易地检查Eval(Φ,x*)=y是否符合要求。
此外,如果y是随机的,那么s和T都是随机分布的(在各自的组中),因此隐藏x*。
然后是对于上述安全性的证明。。。
下图是安全的POPF构造:
对称PKE
•Program(pw,M)=E(pw,M)
•Eval(Φ,pw′)=E−1(pw′,Φ)
单流变体:构造基于一个允许顺序的底层KA协议,因此M2依赖于M1。在某些情况下,例如在Diffie-Hellman密钥协议中,每一方的密钥协议消息可以独立于另一方的密钥协议消息生成。在这些情况下,通过并行发送KA消息,协议可以从2流协议折叠为1流协议。
对于这种单流KA协议,我们可以编写KA.msg2(b)而不是KA.msg2(b,M1)。
实例化和开销。。。
隐式身份验证:在协议结束时,任何一方都不知道它们是否使用相同的会话密钥终止。
1-OPRF结构
OPRF协议允许Alice和Bob联合实例化一个随机函数,其中一方(Bob)可以对有限个输入求值,而Alice可以对任意个输入求值。在这项工作中,我们只考虑Bob在1个输入上计算函数的情况,我们称之为1-OPRF。
安全的说明。。。。
和一些细节。。。。
实例化。。。
心得
这一篇最大的收获还是在于掌握了一些概念吧,论文做的工作还是挺多的,理解起来还需要一些钻研= =
特此声明,该博文所写均为本人自己理解,如有争议以论文原作者为准,(鞠躬