欢迎光临散文网 会员登陆 & 注册

密码工程读后感-第二章-第四节

2021-06-15 22:50 作者:子烨紫冶籽  | 我要投稿

书还是同一本书,作者还是同一个作者。

这一节主要说的是DRNG。

第一部分是“纯种”的DRNG(Pure DRNG), PDRNG。

在这个系统中,我们有两个类,分别是S和R。

S叫state space,R叫output space。在这里可以简单地当成seed和"result"。

s_%7B0%7D%EF%BC%8C%20s_%7B1%7D%2C...%2Cs_%7Bn%7D%20%5Cin%20S

s_%7B0%7D也叫seed,就是第一个数,然后s_%7B1%7D之后的就是接下来的随机数种子。

r_%7B1%7D%2C%20r_%7B2%7D%2C...%2Cr_%7Bn-1%7D%5Cin%20R

r_%7B1%7D和之后的r都是生成的随机数。

整个随机数的过程就是,这个过程有些抽象:

  1. s_%7B0%7D“产生”了s_%7B1%7D,这个过程可以简单地s_%7B1%7D%3A%3Ds_%7B0%7D,或者用其他方法生成。

  2. 生成第一个随机数,r_%7B1%7D%3D%5CPsi%20%EF%BC%88s_%7B1%7D)%5CPsi%20是“随机数生成函数”(Output transition function),并没有特指某个方法。

  3. 与此同时,s_%7B2%7D%3A%3D%5Cvarphi%20(s_%7B1%7D)%5Cvarphi%20是“状态转化函数”(State transition function),这一步是生成下一个s,以用来进行下一个随机数的生成,和%5CPsi%20一样,并不特指某个方法。

简单地说就是,一个DRNG的设计由5个元素组成:状态空间(种子),“结果”空间(随机数),新状态生成器,随机数生成器和p_%7BS%7D

最后一个p_%7BS%7D是随机种子的概率分布(Probability of random seed)。

一般上种子是由TRNG生成的。

如果说这DRNG有什么缺点的话,那应该就是结果完全依赖种子,而接下来的随机数完全依赖当前的“种子”。也就是说这玩意儿某种意义上很容易被预测。

当然,这玩意儿有个好,就是弄起来便宜,不需要特定的设备来完成。一般智能卡这种东西是用这个的。

在我们无法假设随机数的生成,和“新状态生成”是保密的情况下(Kerckhoff principle也不鼓励这样设计),我们需要加一个新的规则,就姑且称之为R3吧。一个合格的DRNG,需要确保……

R3:知道了内部状态,或者是状态生成的方法之后,谁也也无法透过这一点来“反推”下一个或者前一个的状态,也就是说,没有人能透过现在的种子数去反推上一个或者下一个种子数是什么。

R3的具体意思就是,理论上不可能透过S_%7Bn%7D%5Cvarphi%20去反推S_%7Bn-1%7D是什么,就跟哈希函数一样。

接下来就是“混种”DRNG,Hybric DRNG

混种DRNG有个特点,就是纯DRNG的两个函数中加了个E(不一定全都一样)。正式来说,所有纯粹的DRNG其实都是混种DRNG,只不过E%3D%5Cleft%5C%7B%20%5Cinfty%20%5Cright%5C%7D%20,这个符号的意思是说,整个过程没有E。

所以,混种DRNG需要添加两个额外的东西,一个就是E,额外的输入值,另一个是(q_%7Bn%7D)_%7Bn%5Cin%20N%7D,也就是E的概率分布。

因为E的存在增加了随机性和不可预测性,所以DRNG的安全性提升了,但是如果E的衍生方式过于简单,那么安全性的提升可能会很有限。

在某些情况下,攻击者可能可以获取“当前内部状态”(Current intenal state),也就是“当前种子”,而生成接下来的随机数。所以就有了第四个要求,R4:

R4:简单的说就是,知道内部的当前种子后,也无法自行推测出下一个随机数,增加了几率,但是微乎其微。

还有什么要说的话,大概就是敏感的东西别贪小便宜用简单的随机数生成方式,比如什么线性同余之类的。或者说如果这些随机数是用在加密方面,就挑些不好破解的,比如RSA-2048(bushi)

密码工程读后感-第二章-第四节的评论 (共 条)

分享到微博请遵守国家法律