密码学 | Random Oracle 随机预言机

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

🥑答主指出: 英文维基明明对 随机预言机 给出了两个完全不同的理解,但这两个理解之间的连接词却是 "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 字符串,但要求在不同环节使用不同的哈希函数。

相关推荐
Turbo正则16 小时前
量子计算基础概念以及八大分支
密码学·量子计算
网安INF11 天前
公钥加密与签名算法计算详解(含计算题例子)
网络·算法·网络安全·密码学
电院工程师12 天前
基于机器学习的侧信道分析(MLSCA)Python实现(带测试)
人工智能·python·嵌入式硬件·安全·机器学习·密码学
电院工程师14 天前
SM3算法C语言实现(无第三方库,带测试)
c语言·算法·安全·密码学
小七mod15 天前
【BTC】密码学原理
web3·区块链·密码学·比特币·btc·肖臻·北大区块链
电院工程师21 天前
轻量级密码算法PRESENT的C语言实现(无第三方库)
c语言·算法·安全·密码学
电院工程师21 天前
轻量级密码算法CHAM的python实现
python·嵌入式硬件·算法·安全·密码学
电院工程师22 天前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
网安INF22 天前
SHA-1算法详解:原理、特点与应用
java·算法·密码学
渗透好难25 天前
CTF show 数学不及格
安全·系统安全·密码学