假设客户端有一个秘密密码\pi。服务器有一系列索引0..n-1和一个与set相关的值s_i,用于所有i \in \{0,n-1\}调用它为每个客户端设置S=\{s_i | i \in \{0,n-1\}\}。客户端希望计算OPRF函数f(\pi,s),这样他就不会学习s,服务器也不会学任何东西。这基本上就是对f(\pi,s)=H(\pi,H'(\pi)^s)所做的不透明操作,其中H'对子组元素进行散列处理。因为服务器只看到盲目的H'(\pi) (随机组元素),所以它可以模拟它的视图,不管查询客户端做了多少次,它都不会学习s。
但我需要更进一步,并要求它允许匿名登录。也就是说,我需要一个函数g(i,\pi,S)=f(\pi,s_i),以便服务器不了解i或\pi,客户机也不了解S或S中的任何其他元素。至少不包括f(\pi,s_j),因为另一个j允许一个人同时使用蛮力/字典攻击攻击多个帐户。
对于与不透明功能相同的功能,一种方法是使用不透明和不经意的传输。客户机不需要一次发送多个值,但在这里简单地使用OT意味着服务器必须完成对每个f(\pi,s_i) (即n指数/标量乘)的计算,并且每次客户机尝试登录时都需要发送n密码文本。这超出了OT本身的计算范围。毕竟,OT可以用来传递任意消息,而不仅仅是计算某些函数,所以在一般情况下,n密码文本是合理的。但这在这里是不切实际的。
那么,是否有人知道这方面的任何工作,或者正在做的任何事情,能够在恒定或至少次线性的客户端数为practical.It的时间内更有效地实现这一点,可能是在S中使用某种累加器,可以预先计算或其他什么的。它不一定是相同的功能,在不透明,任何具有上述属性的工作。
编辑:我不是建议执行完全不透明的匿名,因为它持有加密的客户ID私密DH密钥和服务器公共DH密钥要求不匿名执行。但只对OPRF部分进行匿名计算,并分别执行密钥交换的其余部分。
发布于 2022-03-28 13:57:16
因此,是否有人知道这方面的任何工作,或正在做的任何事情,可以更有效地在固定或至少次线性时间的客户数量是实际的。
那么,根据您的基于不透明的建议,您不需要OT的所有安全保证;您不关心客户端是否了解其他客户端的加密有效载荷。因此,私有信息检索(PIR)就足够了,因为它为您提供了您所关心的唯一安全保证(服务器不知道客户端正在检索哪个客户端加密的有效负载)。现在,我们不知道如何在次线性时间内进行PIR (没有事先与客户端的通信--在这种情况下是不可能的,也不需要假设至少有一个服务器是可信的);但是,我认为现有PIR机制的比例常数足够小,足以使这一点成为现实。
另一方面,如果您不介意泄露客户机数量的上限,一个实际的解决方法可能是将所有加密的客户端有效负载列表放在公共服务器上(自然是由服务器的公钥签名);任何人都可以在任何时候免费向服务器下载。
https://crypto.stackexchange.com/questions/99346
复制相似问题