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

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

伪随机数生成器定义

伪随机数生成器(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是不可预测的∀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

密码学与理论2:什么是伪随机相关推荐

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

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

  2. 取一定范围内随机小数 c_算伪随机概率中C值的快捷方法

    目前计算伪随机概率C值的方法,一般是二分法.二分法是个非常讨厌的方法,因为虽然简单却麻烦,想算个稍微精确点的数,需要十分巨大的计算量.如果像高中时那样手动计算,真是要算到眼花. 本文给出了一个十分简单 ...

  3. java random 伪随机_真/伪随机、以及随机算法

    伪随机性(英语:Pseudorandomness)是一个过程似乎是随机的,但实际上并不是.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机. 什么是随机数 随机数在计算机应用中使用的比较广 ...

  4. 【转】 DOTA2中的伪随机及其lua实现

    [转] DOTA2中的伪随机及其lua实现 因为单纯的随机确实会影响到竞技性,所以dota2引入的是伪随机机制,在大量的技能中,比如说混沌的混乱之箭.剑圣的剑舞.冰女的冰霜领域之类的技能,都利用了伪随 ...

  5. Matlab生成各种伪随机信号_idinput指令

    1.为何不是冲激信号? 只要是在信号系统这条道上混过的童鞋都知道,冲激信号是测试系统的最理想信号.因为时域的卷积相当于频域的乘积,而冲击信号的频域拥有最广泛的频谱,可以"暴露"系统 ...

  6. 伪随机交织抑制突发噪声的MATLAB仿真(采用(2,1,3)卷积码)

    在上一篇文章中 BPSK调制下(2,1,3).(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现) 伪随机交织抑制突发噪声的仿真曲线不是很明显,虽然之前的程序没问题 ...

  7. 一种伪随机交织器的生成方法

    欢迎同步关注公众号[逆向通信猿] 线性同余交织+m序列寄存器状态→伪随机交织 线性同余交织 A n + 1 ≡ a A n + c   m

  8. 加密生成指定长度_3分钟短文 | PHP伪随机Token生成器,实地测试,效果感人!

    引言 我们经常可能会用到邀请码,邮件验证码,或者需要使用unique 字符串标记用户属性的情况. 今天我们且不说高深的"全局唯一ID"的生成方案,我们说一个简单的,如何生成一个唯一 ...

  9. 信安精品课:第3章密码学基本理论精讲笔记

    第3章 密码学基本理论精讲笔记 一.本章知识框架 二.本章大纲要求 3.1 密码学概况 ●密码学发展简况●密码学基本概念●密码安全性分析 3.2 密码体制分类 ●私钥密码体制●公钥密码体制●混合密码体 ...

最新文章

  1. 杨元庆:兔子要变成狼靠的是体制的激励
  2. 漫水填充算法 - cvFloodFill() 实现
  3. python【蓝桥杯vip练习题库】—BASIC-12十六进制转八进制
  4. 电子电路基础复习 —— 三极管
  5. python用另一个字段替代本字段的null_Python中的数据库
  6. airpods删除别人的配对_怎么不让别人连我的airpods
  7. oracle 常用知识点整理
  8. Ajax(二)-XMLHttpRequest(核心)对象的属性和方法
  9. 赛锐信息:SAP系统用户账号类型介绍
  10. 定了!苹果 10 亿美元收购英特尔调制解调器部门!
  11. 剑指offer所有的题目总结(转)
  12. python生成器_Python生成器
  13. Movie Studio插入的素材支持什么格式?
  14. svn 回退到指定版本无法提交_svn回滚到指定版本
  15. J-flash 的简易使用教程
  16. windows10系统下vue开发环境搭建
  17. Google sheet 设置下拉列表
  18. 8. Zigbee应用程序框架开发指南 - 事件
  19. 未来计算机的硬件发展趋势,整理计算机硬件发展史以及计算机硬件发展趋势
  20. 快来,别人不知道的秘密,QQ空间视频下载教程

热门文章

  1. 分层身份加密(HIBE)技术原理解析(下)
  2. Eclipse背景图片的设置
  3. 物联网感知——无线传感网WSN
  4. 昆仑通态MCGS与3台西门子V20变频器通讯程序 3台变频器通讯
  5. 2b2t服务器生存系列,我的世界全球最大的战争服务器,2B2T入门生存攻略,你能活几天?...
  6. Matlab/dSPACE/永磁同步电机控制 基于dspace的永磁同步电机矢量控制系统模型
  7. RGui的http代理设置
  8. 人工智能带来的影响和趋势分析
  9. Web服务器开发之解决中文乱码问题
  10. vuforia:Invalid file format.Only 8 bit gray scale or 24 bit RGB of file type JPG or PNG are allowed.