密码学 | Random Oracle 随机预言机

本文讨论了随机预言机在密码学中的两种理解:一是视为理论黑箱,对每个输入提供固定长度的均匀随机输出;二是作为随机数学函数,预先选定一个随机映射。作者强调了英文维基中fixed的重要性,并提到随机预言机常用于安全哈希应用,但需在每个环节独立使用以保持安全性。
摘要由CSDN通过智能技术生成

🥑原文:究竟什么才是随机预言机呢? - 玄星的回答

🥑答主指出: 英文维基明明对 随机预言机 给出了两个完全不同的理解,但这两个理解之间的连接词却是 “Stated differently”,即 “换句话说”。此外,中文维基的翻译还有问题。

当然,两个理解都是正确的,答主接下来将对比着中文版和英文版进行解释。



1 理解一

中文版: 在密码学中,随机预言是一个预言(简单说像是理论的黑箱),对任何输入都返回一个真正均匀随机的输出(请参考离散型均匀分布)。不过对相同的输入,该预言每次都会返回一模一样的输出。

英文版: In cryptography, a random oracle is an oracle (a theoretical black box) that responds to every unique query with a (truly) random response chosen uniformly from its output domain. If a query is repeated it responds the same way every time that query is submitted.

相比之下,我觉得英文版说得好清楚啊😇

O ( x ) O(x) O(x) 表示 RO 对于输入 x x x 的输出, L L L 代表 O ( x ) O(x) O(x) 的长度。

在这里插入图片描述

我根据下述流程画的图,不知道对不对😇
后文的 { 0 , 1 } L \{0,1\}^L {0,1}L 应该就是指长度为 L L L 的 01 字符串,即仅由 0 和 1 组成的字符串。

访问者与 RO 的互动如下:

  1. 初始时 RO 维护一张空表,该表共有两列:一列存放输入,一列存放输出;
  2. 如果访问者进行第一次输入 x x x,那么 RO 均匀随机地从 { 0 , 1 } L \{0,1\}^L {0,1}L 中选择一个值 O ( x ) O(x) O(x),并分别把输入 x x x 和输出 O ( x ) O(x) O(x) 记录到表的两列中;
  3. 针对访问者进行第二次及以后的输入 y y y
  4. 如果 y y y 没有出现在表中的输入这一列,那么 RO 均匀随机地从 { 0 , 1 } L \{0,1\}^L {0,1}L 中选择一个值 O ( y ) O(y) O(y),并分别把输入 y y y 和输出 O ( y ) O(y) O(y) 记录到表的两列中;
  5. 反之,如果 y y y 出现过,那么 RO 直接把 y y y 对应的 O ( y ) O(y) O(y) 再次输出。

以上就是中文版中 真正均匀随机对重复值输出相同 的意思。

简而言之,答主认为英文版中的 repeated 是指 “重复出现的”,而不是中文版中翻译的 “相同的”。随后,答主通过对 “与访问者互动来确定 RO 状态” 这一过程的介绍来完成了解释。



2 理解二

中文版: 换句话说,随机预言是一个将所有可能输入与输出作随机映射的函数。

英文版: Stated differently, a random oracle is a random mathematical function, that is, a function mapping each possible query to a (fixed) random response from its output domain.

答主指出:中文版翻译又把 (fixed) 这个词给扔了,而这个词至关重要。

上述理解是指: 在访问者进行第一个输出之前,RO 的状态就以 某种方式 确定了。某种方式 是指,从所有 —— 输入可以是任意的 01 字符串,输出是长度为 L L L 的 01 字符串 —— 的函数集合中,均匀随机地选择一个函数 O O O,作为此次 RO 的状态。随后,以 O O O 的方式来回应访问者。其中, L L L 是安全参数 n n n 的函数。

不太懂什么安全参数?应该就是说 L L L 不是随便定的,而是 n n n 的函数吧?而且这个 n n n 还是系统的安全参数?

看看 Ran Canetti, Oded Goldreich, Shai Halevi 三位大家在 The Random Oracle Methodology, Revisited 这篇论文里对 RO 的描述吧,就是上述的理解:

It is postulated that all oracle queries, regardless of the identity of the party making them, are answered by a single function, denoted O O O, that is uniformly selected among all possible functions. The set of possible functions is determined by a length function L o u t ( ⋅ ) L_{out}(\cdot) Lout(), and by the security parameter of the system.

原论文地址:The Random Oracle Methodology, Revisited



3 题外话

一个 RO 通常被当作安全的 Hash 函数,但通常只能在一次证明中使用。也就是说,你不能把一个已经确定了状态并且已知部分输入输出关系的 RO 用到另一个证明中,即新证明最好使用空白的 RO 。

这就是为什么论文里总是针对不同环节单独设置 Hash 函数,而不是所有环节都使用同一个 Hash 函数?

举个论文的例子:

  • H c o m H_{com} Hcom: hash function { 0 , 1 } ∗ → { 0 , 1 } l \{0, 1\}^∗ → \{0, 1\}^l {0,1}{0,1}l, is used in the commitment phase.
  • H a g g H_{agg} Hagg: hash function { 0 , 1 } ∗ → { 0 , 1 } l \{0, 1\}^∗ → \{0, 1\}^l {0,1}{0,1}l, is used to compute the aggregated key.
  • H s i g H_{sig} Hsig: hash function { 0 , 1 } ∗ → { 0 , 1 } l \{0, 1\}^∗ → \{0, 1\}^l {0,1}{0,1}l, is used to compute the signature.

上面三个哈希函数的功能其实都一样,即将一个任意长度的 01 字符串映射为一个长度为 l l l 的 01 字符串,但要求在不同环节使用不同的哈希函数。



  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值