我偶然发现了这篇文章,内容是“没有袖手旁观”。它上面写着:
在密码学中,我的袖子上没有任何数字是根据其构造超出怀疑的隐藏属性的任何数字。 [...]这样的数字可以看作是Chaitin–Kolmogorov随机数的相反极端,因为它们看起来是随机的,但信息熵却很低。
其中一个数字,我遇到了这个Crypto Beta问答,回答者说:[M]运动常数,例如2√(或其他数字的根)之类的无理数的二进制展开),e,π可以用来表明没有选择数字来创建后门。
这是维基百科关于信息熵的说法:
熵通常以位,小数或禁令来度量。香农熵是随机变量的平均不可预测性,等同于其信息内容。香农熵提供了对任何通信的最佳可能的无损编码或压缩的绝对限制,假设该通信可以表示为一系列独立且分布均匀的随机变量。
这,我不明白为什么这些数字(或任何可能的数字)可以具有较低的熵。似乎所有数字都有相同的可能性作为“随机变量”生成,只要该数字在生成的范围内即可(例如,如果该数字为1564631 [假定为这些数字之一],而我m寻找介于1到2000000之间的数字,则产生的可能性相同,无论如何)。
谁能解释这个概念?我看了熵的定义,但我承认数学有点麻烦。我不确定有人会如何使用没有这些属性的数字来“创建后门”。
#1 楼
您是完全正确的:数字(或给定的二进制字符串)没有熵。但是,可以从具有熵的分布中采样数字。换句话说,熵是用于生成数字的过程的属性,而不是数字本身。因此,如果我只给您数字4,并向您保证我选择了这个数字从1到6之间随机地均匀分布,您无法知道我是否在说真话。视情况而定,也许我有一个选择4的别有用心,而不是随机选择一个数字。
问题出现在密码学中,因为当需要为算法选择常数时(例如SHA1或您链接的Wikipedia文章中的任何其他示例),可能存在数学上的争论,即:“如果常量是随机选择的,则很有可能没有攻击者能够破坏它。”但是密码学家是一个偏执狂,当有人说:“让我们使用这组常数时,我会发誓。我是随机选择它们的。”因此,作为一种折衷,他们将使用常量,例如π的二进制扩展。虽然我们不再具有从大量数字中随机选择它们的数学好处,但我们至少可以更确信没有破坏活动。
这些无所谓我的袖子常量熵很低,因为选择它们的过程并不涉及很多随机选择-将“合理的”无密码保护的数字的数量与它们习惯用于的例如128位字符串的数量进行比较生产。这是设计使然。如果有很多没有选择的数字可供选择,那么恶意算法设计人员将更容易找到一些适合他的议程。
Dual EC DRBG标准是一个最近的非常令人震惊的情况,该人没有使用无袖子编号来创建后门,该标准用于生成随机数。该算法包含两个常数P和Q,如果没有人可以计算
f(P, Q)
的特定函数f
,它将是安全的。鉴于随机选择的P和Q,这将很难。但是,如果选择P和Q,则可以选择P,确定想要的f(P,Q),然后相当容易地求解Q。现在您有了后门。#2 楼
首先,我们说熵是生成过程的一个属性。数字本身没有任何熵。具有熵的是产生该数字的算法或过程,而熵衡量该数字可能是多少。从这个意义上讲,Wikipedia页面上的表述不够严格。对于“无所求事”的数字,我们想要一个数字,使得对于选择“无所作为”的人,没有选择或选择的越少越好。数。 “邪恶数字”将是生成器可以选择整数某些特征的数字。使用π这样的直观想法是,尽管π的数字“似乎是随机的”(可以计算,但它们不是全零或规则的),但它们是固定的,攻击者无法随意选择。生成过程不应包括“随机性”,因为攻击者可以选择这种随机性。但是像π的数字这样的“自然随机性”是公平的游戏,因为攻击者没有选择π的数字。
重要的是要意识到问题的一部分是心理上的。如果我是定义新算法的坏人,并且可以选择一个可能会被后门使用的常量值,那么我的目标将是为该常量找到一个体现后门的定义,同时附带一个故事,会让别人相信我没有出于恶意而选择确切的价值。
在某些情况下,仍有攻击的空间。假设我作为攻击者确定十亿分之一的值允许后门。然后,对于某些确定性PRNG H和种子值x,我可以将我的常数定义为H(x)。然后,我继续枚举“可能的”种子值x,直到找到一个隐含后门常数的值。我可以首先尝试所有的圣经经文,莎士比亚作品的节选,历史日期,人物和地方的名字...因为我可以为所有人建立一个故事,使种子的价值显得无害(例如“种子的价值”)。是'Phuntsholing',因为那是我祖母出生的地方”(*)。我可以使用大小写变体(全部为大写,全部为小写...),并且非拉丁语脚本也提供了很多可能性。因此,我可以尝试数十亿个这样的“合理种子值”。此数字乘以PRNG本身的变体数量(其中有几个变体)。
如果我们想将其视为“熵”,那么种子就是变体的来源。熵。但是我们在这里看到了熵形式主义的局限性:关键点不是过程中是否存在随机性,而是在一个好故事的掩饰下我可以走私多少非故意的选择。这是一个心理学问题,数学术语是不合适的。
编辑:JP Aumasson几个月前写了这个脚本,作为生成数百万个看起来像NUMS的常量的概念证明,并且注意到这是我在上面的文本中谈论的那种攻击的体现。 >
#3 楼
维基百科文章的数学部分对信息熵没有很好的介绍。为了获得直观的感觉,请将熵替换为相关的Kolmogorov复杂度概念。 (具有低Kolmogorov复杂度的事物将具有较低的信息熵;具有高复杂度的事物将具有大量的熵)。数字/字符串的Kolmogorov复杂度只是对如何用某种形式的语言生成该数字的最小描述的长度-没有具体的方法可以计算这种复杂度,但是它仍然是一个有用的概念。例如,字符串
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
(32个a
)或11235813213455891442333776109871597258441816765...
(将前一百个斐波那契数连接在一起)具有较低的复杂度。尽管类似gwhobkghgylxuelc
的东西会具有更高的复杂度,因为没有明显的模式,您必须指定所有字母以允许某些字母重新生成它(因此它将具有更高的复杂度)。 像pi的前512个二进制数字之类的东西,或者熵/ Kolmogorov复杂度低-只有少数非常重要的数学常数(pi,e,phi,sqrt(2)),然后取前512位是一个简单的描述。但是,如果我只是给您一个任意的512位二进制数字字符串,那么它将具有很高的复杂性-您必须指定每个数字。通过自由选择,您可以有目的地选择一个弱版本,其中有一些特定的属性可让您对其进行攻击。如果要证明自己没有选择一个有目的的弱数,可以基于简单的简单选择。
信息熵并不是一个概念的复杂化,尽管维基百科的文章将其混淆了。最好将熵视为对等可能性可能性的对数(以避免一直都必须处理非常大的数,而在信息论中,我们通常使用以2为底的对数来衡量熵) 。只需S = log2(可能性数)。因此,如果要计算50位十进制密码的熵,它将为log210 ^ 50 = 166位。但是,如果您拥有一个众所周知的数学常数的前50个十进制数字(并从8个数字的列表中选择),那么您的信息熵将为log2 8 = 3位。
当所有事件均等时,复杂的方程S =-ΣP log P等效于另一种形式。如果存在N =#个可能性,并且它们的可能性均等,则任何一个的可能性为
P = 1/N
。那么S =-Σ(1 / N)对数(1 / N)=Σ(1 / N)对数N =对数N. 评论
$ \ begingroup $
@PaulUszak-如果我需要向某人发送1万亿个0,那么您不必说熵就是一万亿比特。您仅同意针对该类型数据的适当压缩方案,例如一个数字以及该数字重复多少次。然后,它最终不足100位(〜40以存储一万亿,再加上重复的数字(可能为8位)和一些开销来指示压缩方案,分隔符,传输结束)。同样,如果需要有效发送pi的前几位,则可以使用压缩方案,该方案传输pi的公式和要计算的位数。
$ \ endgroup $
– jimbob博士
16年1月14日下午5:31
$ \ begingroup $
Shannon熵的公式为S =-Σp_i log(p_i),在其中迭代所有可能性。例如,如果您有一个1位数的密码,其中所有i均从10位数统一选择p_i = 1/10(从0到9),则S =-10 *(1/10 lg(1/10))= lg 10〜3.322。类似地,对于两位数,存在N = 100个可能性,每个概率为p = 1/100,因此S = lg 100 = 2 * lg 10〜6.644。因此,对于50位数字的密码,每个密码在p = 10 ^ -50处选择,并且有10 ^ 50个,因此生成随机50位数字的Shannon熵正好是S = 50 * lg 10(大约166.096)。
$ \ endgroup $
– jimbob博士
16年1月14日在6:05
$ \ begingroup $
@PaulUszak-我从未说过Shannon熵和Kolmogorov复杂度是等价的概念,但事实并非如此。我说过它们是相关的概念(例如,请参见:en.wikipedia.org/wiki/Kolmogorov_complexity#Relation_to_entropy或homepages.cwi.nl/~paulv/papers/info.pdf或www-isl.stanford.edu/~封面/纸/transIT/0331leun.pdf)。其次,我阅读了香农(Shannon)在1948年发表的论文,并看到他的定理2将熵定义为H =-Σpᵢlogpᵢ。这不是一个近似值或上限,如果这是一个高估,请证明它。
$ \ endgroup $
– jimbob博士
16年1月25日在21:41
$ \ begingroup $
@PaulUszak-只需生成N = 100,000个随机的50位数字密码,然后将其写入文本文件即可。尝试使用任何编码或压缩方法(不了解某些隐含的现象,这些现象隐含了如何生成50位密码的随机性;例如,无法访问PRNG种子)。如果您可以在不到166 * N = 16,609,640位(约2.07 MB)的范围内编码100k这样的密码,那么您就表明它被高估了。作为快速检查,应用标准压缩(添加诸如校验和之类的东西),我可以将这样的文件压缩为约2.15 MB(bzip2),即172位/ pw。
$ \ endgroup $
– jimbob博士
16年1月25日在21:59
$ \ begingroup $
@PaulUszak H =-Σpᵢlogpᵢ是一个精确的公式,表示概率为pᵢ的随机字符串的熵。如果您生成的许多随机字符串的总熵为N位,则不可能(合计)无损压缩少于N位的此类数据。这确实意味着H是熵的估计值或上限;这意味着此计算出的熵为无损压缩数据的大小(总和)设置了一个下限。此外,11.9位不少于7.3。请参阅:en.wikipedia.org/wiki/…
$ \ endgroup $
– jimbob博士
16-2-5在4:43
评论
如果我要求您猜测“随机”序列31415中的下一个数字...,您可能会猜测为9,这是正确的。用(可能是过于简化的)外行术语来说,熵=不可预测性。@TimS。好吧,我的猜测应该是1,然后是6 :-)。 (我可以识别π的前五个数字,但五个数字也是前两个后跟1的整数345。)
@FreeRadical-您是正确的;但是两个“最可能”的猜测少于“ 10个同样可能的猜测”,因此它的熵仍然很低。
@asteri这个数字不是1564631,这就是重点。