我是一名软件工程师,所以我一般认为是积木。而且我不太熟悉冷冻术中的数学符号,所以我将继续使用函数调用和函数蓝图(我认为这将是直观的)。
最近,我在这里问和读了几个问题,还有一些关于这些主题的相关论文。因此,我将首先列出如何理解它们的定义,并提出使用OT和PRF的OPRF协议。
请你评论一下这个协议的有效性和安全性。
以下是我的定义,它们是相互独立的。
Alice启动带有任意种子的PRG。Alice可以生成任意长度n的随机输出,如果Alice在另一个时间,而另一个系统用相同的种子为PRG种子,则输出的前n个比特将与先前得到的输出相同。
爱丽丝有把钥匙。爱丽丝用这把钥匙启动她的PRF。给定任意长度比特的任何输入,Alice都可以确定地得到任意长度k的随机输出。(大小k和n不一定相互有任何关系)
Alice创建两个长度相同(n位)的m0和m1消息。Bob选择0或1并获取相应的消息。爱丽丝不知道鲍勃得到了哪一个,如果他选择了0,鲍勃就会得到m0,也永远不会知道m1 (反之亦然)。
鲍勃有个输入。爱丽丝有OPRF功能的钥匙。在执行OPRF期间,Alice交互地根据Bob的输入生成一个随机的输出,但是Bob的输入对Alice隐藏。爱丽丝永远不会知道鲍勃的输入,鲍勃也永远不会知道爱丽丝的钥匙。然而,如果Alice要与Bob共享她的密钥,或者Bob要与Alice共享他的输入,那么同样的“随机外观输出”可能会被重新生成。
根据我所列出的定义,我现在尝试提出一项符合上述OPRF定义的协议。
首先,我将提出一个天真且可能不太安全的版本;并尝试用一个小的转折来解决我所看到的安全问题。
爱丽丝有一个PRG,她就是这样用它来构建PRF的。
//输入和输出是任意大小的位数组。//输出用0初始化(XOR的标识元素)
prf(key, input[], output[]) {
prg.setSeed(key)
for(i = 0; i < input.length; i++) {
bits0 = prg.nextBits(output.length)
bits1 = prg.nextBits(output.length)
if(input[i] == 0)
output (XOR) bits0
else
output (XOR) bits1
}
}这种利用PRG创建PRF的方法建立在以下前提之上:
现在Bob想用Alice的密钥来使用这个PRF。OPRF如下。
该协议相当于上述PRF。
上述议定书将是安全的:
因为在第二次运行时,Bob可以切换输入中的位,并从Alice的PRG中学习完整的随机序列。
然而,上述任何一项要求都不现实。要使这一议定书具有安全性,需要采取以下措施:
因为掩码会互相取消,这个协议的每一个执行都会包含一个随机的掩码。该议定书仍应等同于上文所界定的PRF,不应受到前一议定书所界定的问题的影响。
这个OPRF的最后一个目标是将它用于专用集交叉协议。见问题中@Mikero的答案:爱丽丝如何使鲍勃能够在私有映射中查找值?
请你评论一下这个协议的有效性和安全性。如果你看到它的任何缺点,我该如何改进它。
发布于 2021-12-07 13:13:27
基本上,如果我正确理解,您希望创建一个协议,允许Alice和Bob一起计算一个随机值,而不向对方透露它们的秘密(Alice的密钥和Bob的输入)。如果是这样的话,这种协议已经有了一个推广,叫做秘密共享。秘密共享协议的思想是计算只能使用密钥获得的秘密值。这些密钥是在各方之间分配的,每一方都不愿意共享其密钥。
https://crypto.stackexchange.com/questions/61004
复制相似问题