伪随机函数 密码学_密码学与理论2:什么是伪随机

伪随机函数 密码学

正如本系列第一部分所得出的结论,没有随机性的安全性是不可能的。 确定性密码无法抵御强大的攻击者, 真正的随机数生成器不切实际或难以获得,因此加密技术基于伪随机数生成器。

这篇文章的前两章定义它们是什么,并解释了哪种安全加密技术需要的伪随机生成器。 第三章介绍了另一种通常如何谈论和思考伪随机发生器和密码的方法。

伪随机数生成器定义

伪随机数发生器(PRG)是产生随机数的函数。 它以较小的数字作为输入,并生成巨大的甚至无限的数字流。 输入称为种子。

定义:伪随机数发生器(PRG)是有效函数G:{0,1} s →{0,1} n ,其中s≪ n(s远小于n)

  • {0,1} s –种子空间,
  • {0,1} n –输出。

根据此定义,偶数仅生成零的函数是伪随机数生成器。 当然,使用这种伪随机生成器实现安全性与不使用伪随机生成器一样好。

安全伪随机发生器

足以用于安全目的的伪随机生成器称为安全伪随机生成器。 不幸的是,我们所能做的就是定义它们。 找到安全的伪随机数发生器或证明某个函数是安全的伪随机数发生器是一个难题。 甚至不知道它们是否存在。

如果可以证明生成器是安全的,则比P≠NP。

本章介绍了两种定义方法,并证明了它们彼此等效。

定义:不可预测性

如果伪随机生成器是不可预测的,则它是安全的。 如果您能够看到来自生成器的数字,那么突然说“停止,下一位将是x”并且正确,那么您就没有在观看安全的伪随机生成器。

如果有可能以非零精度猜测下一位,则生成器计数为可预测的。 通常,预测不必一直都是正确的,只需要比抛硬币更好。

定义:如果存在一个有效的算法A和一个数i,则伪随机数生成器G是可预测的:

  • Pr [A(G(k)| 1,..,i )= G(k)| 对于一些不可忽略的ε, i + 1 ]≥1/2 +ε。

哪里:

  • | 1,..,i表示长度i的前缀
  • | i + 1表示第i + 1位。

转换:算法A将伪发生器G的第i个输出位作为输入,并以非零精度打印其第i + 1个位。

定义:如果无法预测,则伪随机数生成器是不可预测的。

定义:统计检验及其优势

定义安全伪随机数生成器的第二种方法更长且更复杂。 对于数学证明构造而言,它也更实用,因此无论如何我们都必须对其进行解释。

根据此定义,如果不可能编写能够区分其输出和“真正随机”的数字流的计算机程序,则伪随机数生成器是安全的。 该计算机程序将获得很多流,然后确定它们是真正的随机流还是由伪随机生成器生成。

什么是统计检验

首先,我们必须定义统计检验。 统计测试是一种有效的算法,它以数字流作为输入并输出0或1。它通常检查一些随机流应该具有的属性,如果输入流看起来是随机的,则输出1。

例如,统计测试可以比较其输入中零的数目和一的数目。 如果它们以相似的速率发生,则测试将输出1。

定义:统计检验是一个有效函数A:{0,1} n →{0,1}。 它以流作为参数,如果不是随机的,则输出0,如果是随机的,则输出1。

如前所述,“高效算法”意味着可以编写相应的速度较快的计算机程序。

使用统计检验

我们将使用统计测试来区分随机流和伪生成器输出。

取很多随机种子,并将它们用作伪随机发生器的输入。 对所有输出运行统计检验。 然后,使用大量真正随机的流,并对它们进行相同的统计检验。

如果统计测试的行为不同,则可以使用该测试来区分生成器输出和真正的随机流,并且伪随机生成器是错误的。

统计测试质量

我们将使用“统计测试相对于伪随机数生成器的优势”来衡量统计测试的质量。 计算它的标准方法是计算两个概率之差:

  • 静态测试在随机种子k的伪随机数发生器输出上为1的概率。
  • 统计测试在真正随机流上说1的概率。

优势越高,统计测试在区分随机流和伪随机流方面越好。 这是介于0和1之间的实数:

  • 1 –完美区分
  • 0 –无法区分。

定义:令G:K→{0,1} n为伪随机数生成器,A为{0,1} n的统计检验。 G相对于A的优势是:

  • 进阶PRG [A,G]:= | Pr k→ r K [A(G(k))= 1] – Pr r→ r {0,1} n [A(r)= 1] | ∈[0,1]。

安全伪随机发生器

最后,我们准备定义安全的伪随机生成器。 如果所有有效统计测试的优势都可以忽略不计(例如,非常小),则伪随机生成器是安全的。 绝对不能有统计检验可以让我们区分伪随机发生器的输出和真正的随机流。

定义:如果所有有效统计检验的优点都可以忽略不计,则伪随机数发生器G:K-> {0,1} n是安全的PRG:

  • ∀答:Adv PRG [A,G]可忽略不计。

不可预测性与统计检验

安全随机性的两个定义是相等的。 任何安全的伪随机生成器都是不可预测的,任何不可预测的伪随机生成器都是安全的。

如果您能够预测输出的下一位,那么您就可以创建良好的统计检验。 测试将读取流的开头并预测可预测的位。 如果预测正确,则输出1,否则输出0。

由于预测在某种程度上是准确的,因此统计检验在某种程度上能够区分伪发电机的输出和真正的随机流。

定理:安全的伪随机生成器是不可预测的。

证明:我们证明如果伪随机生成器G是可预测的,则它是不安全的。 假设A是一种能够预测G输出的有效算法:

  • Pr [A(G(k)| 1..i )= G(k)| 对于某些不可忽略的ε, i + 1 ]≤1/2 +ε。

我们将统计检验B定义为运行A并返回1的函数(如果A是正确的):

  • B(x)= 1 iff A(x | 1..i )= x i + 1

我们将证明,如果A可以预测伪随机发生器G,那么B可以将其与随机变量区分开,并且G不安全。

B的优点是Adv
PRG [B,G]:= | Pr [B(G(k))= 1] – Pr [B(r)= 1] | = | 1/2 –(1/2 +ε)| = |ε| 其中ε是不可忽略的。 因此,B相对于G的优势是不可忽略的。 B可以利用优势ε来区分发生器G和随机发生器G。

第二项主张,说不可预测的伪随机数发生器是安全的,被当作一项练习。

定理:不可预测的伪随机数生成器是安全的。

证明难题:提示:如果伪随机生成器G是不可预测的∀i∈{0,…,n-1},则G是安全的伪随机生成器。

计算上难以区分

统计测试的思想可以被概括并用于比较任何两个数字流。 概括是使安全伪随机生成器的第二个定义有用的原因。 它使我们能够分析密文和其他难以分析的数字分布。

定义

如果不可能编写能够区分它们的计算机程序,则两个分布在计算上是无法区分的。 该计算机程序将获得大量流,然后确定它们是来自一个发行版还是另一个发行版。

正式定义与上一章完全相同。 将统计测试定义为测量某项并输出0或1的函数。

将统计检验的优势定义为两个概率之差:

  • 静态测试在由第一分布生成的流上说1的概率。
  • 静态测试在由第二分布生成的流上说1的概率。

如果所有有效统计检验的优势都可以忽略不计,则两种分布在计算上是无法区分的。 绝对不能有任何统计检验可以使我们区分这两种分布。

定义:令P1和P2为{0,1} n上的两个分布。 如果对于所有统计检验A,P1和P2在计算上是无法区分的(表示为P1≈P2):

  • | Pr p1←P1 [A(p1)= 1] – Pr p2←P1 [A(p2)= 1] | 可以忽略不计。

安全伪随机发生器的另一个定义

这允许创建安全伪随机发生器的第三等效定义。 如果伪随机生成器的输出在计算上与真正的随机流没有区别,则它是安全的。

定义:伪随机数发生器是安全的,如果{ķ←R:G(K)}≈p均匀({0,1} N)。

语义安全密码的另一个定义

我们还可以重新定义语义上安全的密码 。 如果接下来的两个集合在计算上无法区分,则该密码在语义上是安全的:

  • 与一条消息相对应的所有可能密文的集合,以及
  • 与任何其他消息相对应的所有可能密文的集合。

定义:如果∀m,则加密E在语义上是安全的
设0
1∈M:{E(K,M 0 )}≈ p {E(k,m 1 )},例如,两个分布在计算上是等效的。

先前的结果非常重要。 基本上说,没有计算机程序能够破解使用语义安全密码加密的密文。 换句话说,如果我们愿意经常更改密钥,那么我们只需要语义上安全的密码。

下一个 …

下一部分将说明如何从伪随机生成器构建密码。

参考: 密码学和理论2:什么是我们的JCG合作伙伴 Maria Jurcovicova在This is Stuff博客上的伪随机性 。

翻译自: https://www.javacodegeeks.com/2014/02/cryptography-theory-2-what-is-pseudorandom.html

伪随机函数 密码学

你可能感兴趣的:(密码学,机器学习,python,人工智能,算法)