为什么有效加密需要大量随机性?

时间:2009-01-31 19:45:57

标签: algorithm encryption

我已经看到它在许多地方提到随机性对于生成对称和非对称加密密钥以及使用密钥加密消息很重要。

如果没有足够的随机性,有人可以解释如何破坏安全性吗?

8 个答案:

答案 0 :(得分:13)

随机性意味着不可思议的输入。如果输入是可猜测的,则可以容易地计算输出。那很糟糕。

例如,Debian在其SSL实现中存在一个长期存在的错误,即在创建密钥时无法收集足够的随机性。这导致软件生成仅32k个可能密钥之一。因此,通过尝试所有32k的可能性,可以很容易地解密用这种密钥加密的任何东西,这在当今的处理器速度下非常快。

答案 1 :(得分:4)

大多数加密操作的重要特征是,如果您拥有正确的信息(例如密钥),它们很容易执行,如果您没有这些信息,则无法执行。

例如,对称加密:如果您有密钥,加密和解密很容易。如果你没有钥匙(并且对它的构造一无所知)那么你必须开始做一些昂贵的事情,比如对密钥空间进行详尽的搜索,或者对密码进行更有效的密码分析,但这仍需要一些极端的密码。大量的样本。

另一方面,如果您有关于密钥可能值的任何信息,则您可以更轻松地搜索密钥空间(或者您的密码分析所需的样本数量要低得多)。例如,(当前)执行2 ^ 128个试验解密以发现128位密钥实际上是什么是不可行的。如果您知道密钥材料来自一个您知道的十亿分钟内的时间值,那么您的搜索就变得更容易了340282366920938463463374607431。

答案 2 :(得分:2)

要解密邮件,您需要知道正确的密钥。

您必须尝试的密钥越多,解密邮件的难度就越大。

举一个极端的例子,假设根本没有随机性。当我生成一个用于加密我的消息的密钥时,我总是以完全相同的密钥结束。无论我在何时或何时运行keygen程序,它总会给我相同的密钥。

这意味着任何有权访问我用来生成密钥的程序的人都可以轻易解密我的邮件。毕竟,他们只需要让它生成一个密钥,然后他们得到一个与我使用的密钥相同。

因此,我们需要一些随机性来使您无法预测哪个键最终会被使用。正如David Schmitt所提到的,Debian有一个错误,它只生成少量的唯一密钥,这意味着要解密由Debian上的默认OpenSSL实现加密的消息,我只需要尝试这么少数量的可能密钥。我可以忽略大量其他有效密钥,因为Debian的SSL实现永远不会产生这些密钥。

另一方面,如果密钥生成中有足够的随机性,则无法猜测关于密钥的任何。你必须尝试所有可能的位模式。 (对于128位密钥,这是很多组合。)

答案 3 :(得分:1)

这与加密的一些基本原因有关:

  • 确保邮件在传输过程中未被更改(不可变)
  • 确保邮件未在传输中读取(安全)
  • 确保消息来自(正式)
  • 的消息
  • 确保消息与之前发送的消息不同(无重播)

然后,您需要包含一些内容,以确保上述内容属实。其中一个重要的事情是随机值。

例如,如果我用密钥加密“Too many secrets”,它可能会出现“dWua3hTOeVzO2d9w”

这有两个问题 - 攻击者可能更容易破解加密,因为我使用的是非常有限的一组字符。此外,如果我再次发送相同的消息,它将会完全相同。最后,攻击者可以记录它,并再次发送消息,接收者不会知道我没有发送它,即使攻击者没有破坏它。

如果我每次加密时都会在字符串中添加一些随机垃圾,那么它不仅会使其更难破解,而且每次加密的消息都不同。

上述子弹中加密的其他功能是使用除随机性之外的方法(种子值,双向身份验证等)来修复的,但随机性会解决一些问题,并有助于解决其他问题。

一个糟糕的随机源会再次限制字符集,因此它更容易中断,如果它很容易被猜测或受到其他限制,那么攻击者在进行暴力攻击时尝试的路径就会减少。

- 亚当

答案 4 :(得分:1)

密码学中的常见模式如下(从alice发送文本到bob):

Take plaintext p
Generate random k
Encrypt p with k using symmetric encryption, producing crypttext c
Encrypt k with bob's private key, using asymmetric encryption, producing x
Send c+x to bob
Bob reverses the processes, decrypting x using his private key to obtain k

这种模式的原因是对称加密比非对称加密快得多。当然,它取决于一个好的随机数生成器来产生k,否则坏人就可以猜到它。

答案 5 :(得分:1)

这是一个“纸牌游戏”类比:假设我们用同一副扑克牌玩几轮游戏。在轮之间改变甲板是随机性的主要来源。如果我们没有正确地进行洗牌,你可以通过预测牌来击败游戏。

当您使用较差的随机源生成加密密钥时,会显着降低密钥值的熵(或不确定性)。这可能会破坏加密,因为它可以更轻松地在密钥空间进行强力搜索。

答案 6 :(得分:0)

解决Project Euler中的this问题,它将真正推动“大量随机性”将为您做的事情。当我看到这个问题时,这是我脑海中浮现的第一件事。

使用他在那里谈论的方法,你可以很容易地看到“更随机”会让你获得什么。

答案 7 :(得分:0)

一篇非常好的论文,概述了为什么不注意随机性会导致不安全感:

这描述了1995年Netscape浏览器的关键SSL实现如何因为PRNG播种问题而容易猜测SSL密钥。