2023年7月31日发(作者:)
DES雪崩效应和密码强度和随机性测试《密码学导论》实验报告1、实验内容及要求题⽬⼀:分组密码的轮数对雪崩效应的影响1. 编写 DES 或 AES 加密/解密算法, 算法中迭代轮数可⾃由设定。2. 针对不同的迭代轮数, 测试并统计当明⽂改变 1 个⽐特, 或密钥改变 1个⽐特时, 密⽂的变化。a) ⾄少测试 3 种不同的迭代轮数b) 统计时, 应当考虑到在不同密钥、 不同明⽂基础上, 改变 1 ⽐特时, 密⽂所发⽣的变化c) 统计结果应以图的形式直观表⽰出来(a)DES加/解密算法的背景和原理⾸先,为了编写DES加/解密程序,我们必须了解DES加密算法:DES全称为Data Encryption Standard,即数据加密标准,是⼀种使⽤密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在⾮密级政府通信中使⽤,随后该算法在国际上⼴泛流传开来。需要注意的是,在某些⽂献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。以下为DES加/解密算法的详细步骤图⽰:算法的主要步骤为:利⽤64位的初始密钥产⽣N轮迭代所需要的密钥,具体步骤如下:对64位密钥进⾏压缩换位产⽣56位密钥(第⼋位⽤作奇偶校验位)将56位密钥分为两组前28位和后⼆⼗⼋密钥C和D,分别对C,D进⾏移位操作,再把56位密钥进⾏⼀次压缩变换形成每⼀轮所需要的最终的48位密钥对明⽂进⾏分组进⾏N轮的迭代变换,具体步骤如下:对明⽂进⾏分组,每64位⼀组对每⼀个分组⾸先进⾏⼀次初始置换IP在该轮中,把64位分组分为左32位Li和右32位Ri,然后Li+1=Ri,⽽Ri+1=Li⊕f(Ri,Ki)。f为给定的轮函数。经过N轮这样的迭代之后,形成64位数据。最后对64位数据进⾏逆置换IP−1,得到最终的64位密⽂。在开始对于DES雪崩效应的研究之前,先讲讲完备性和雪崩效应:“完备”的概念是由Kam和Davida提出来的。如果⼀个密码变换是完备的,那么它的每⼀个密⽂⽐特都依赖于所有的明⽂⽐特。所以,完备的密码变换意味着:若能根据明⽂⽐特找到每⼀个密⽂⽐特的最简布尔表达式,那么这些表达式⼀定包含所有的明⽂⽐特。如果明⽂⽮量和X和Xi仅在第i位不同,对于所有的i,j,f(X)和f(Xi)⾄少在第j位不同,那么f是完备”雪崩效应“是由Feistel提出来的,我们可以这样描述雪崩效应,对于⼀个给定的密码变换,若在任何时候,对单个输⼊⽐特求补,致使有⼀半的输⼊⽐特发⽣取补,则认为发⽣了雪崩。(b)Python下的DES加密算法细讲在这⾥对DES算法的python实现并不多做描述,主要讲解⼀些⽐较特殊的地⽅:在我们的算法中,为了增加DES算法的普遍适⽤程度,我们使⽤了unicode编码,将输⼊的明⽂字符由UTF-8码转换为unicode码(每个字符编码占两个字节)以兼容中⽂。然后再将unicode编码转化成⼆进制⽐特串进⾏加解密。因此,在我们这⾥每4个字符(4∗16=64)即组成⼀个明⽂分组。迭代轮数由标准的16轮迭代变成可控的N轮,由⼀个全局变量控制。此时,我们的密钥处理也要发⽣改变,由于之前的移位处理只考虑了16位,在这⾥我们将原来的移位表进⾏简单的平移得到了新的N轮密钥移位表。对于输⼊的加/解密密钥,我们这⾥没有进⾏编码转换,因此采⽤的为ASCII码,64位的密钥需要8个字符来⽣成,因此输⼊的密钥限制必须要满⾜8个字符的限制。©DES中的雪崩效应与算法迭代轮数的关系1、明⽂变化1个⽐特产⽣的雪崩效应的研究为了研究明⽂变化⼀个⽐特产⽣的雪崩效应和迭代轮数的关系,我们的思路如下:1. ⾸先产⽣不同的明⽂-密钥对,保证明⽂和密钥的内容对实验结果的影响能够得到⼀定程度的消除。2. 对于每⼀组明⽂-密钥对(M−K对),⾸先对明⽂(迭代轮数分别为1−N)进⾏加密,得到密⽂组(C0),⾥⾯包含N组密⽂。然后再随机改变明⽂的⽐特串中的⼀位,再次加密得到新的密⽂组(C1)。这样重复在原来明⽂⽐特串上修改⼀位,得到密⽂组C2,C3。3. 下⾯则研究密⽂的改变程度。研究的内容主要是C0分别与C1,C2,C3相⽐,迭代相同轮数的密⽂的变化的位数,即:Result1[i]=Sum[C0[i]⊕C1[i]]其中i代表密⽂的迭代轮数4. 再依次对另外两组明⽂-密钥对重复2-3步处理即可得到下⾯的实验结果。实验说明:为了便于实验处理和研究,在这⾥我们的明⽂仅仅使⽤了4个字符,这是为了使其恰好形成⼀个分组且⽆需进⾏⽐特填充,便于我们⽐较。且对于迭代轮数,由于雪崩效应的发⽣⾮常迅速,对于较⼤的轮数来说,其效果不明显,只是在⼀个固定的范围之内进⾏波动,因此这⾥我们着⼒于研究1-16轮中密⽂的变化情况。text = “love”key = “hellustc”text = “lol+”key = “profwhli”text = “1234”key = “c++andc#”
通过三组实验结果的⽐较,我们可以看到,随着迭代轮数的变化,密⽂的变化情况主要分为两个阶段:雪崩阶段:该阶段主要特征为增长速度⾮常快,密⽂初始变化位数只有1位,但是随着迭代轮数的增加,密⽂的变化位数达到⼀个相当⾼的⽔平,雪崩效应相当明显,普遍在第四轮迭代的时候就可以达到稳定值。波动阶段:该阶段主要是在围绕着⼀定的⽔平进⾏上下波动,不再有所增长,雪崩效应已经结束。且我们可以看到,对于明⽂改变⼀个⽐特来说,不管该⽐特的变化的位置在何处,均会对密⽂产⽣重⼤影响,其雪崩效应相当接近。在本试验中,由于采⽤的是unicode编码,ASCII码转unicode码会产⽣⽐较多有规律的0,所以导致变化的⽐特位数具有较⼤的波动性。2、密钥变化1个⽐特产⽣的雪崩效应研究对于密钥变化⼀个⽐特的研究思路和明⽂变化的思路相近,仅仅是由对明⽂⽐特串的改变变为对密钥⽐特串的改变,于是在这⾥不再进⾏赘述。实验说明:同样,明⽂采⽤⼀个分组4个字符。text = “love”key = “sisongjr”text = “2333”key = “cindy+++”text = “±a1”key = "通过三组实验结果的⽐较,我们也可以看到,随着迭代轮数的变化,密⽂的变化情况主要分为两个阶段:雪崩阶段:和前者相似,不再赘述。波动阶段:和前者相似,不再赘述。(d) 新问题的探讨由于DES加密算法中唯⼀的⾮线性部分是⼋个S盒,故DES的安全性研究主要是花在S盒的设计和分析上,以上给了设计应遵循的严格雪崩准则.80年代以来,各国学者们提出了⼀系列的准则来衡量密码变换抵抗某种密码分析的能⼒强弱,其中包括代数次数、⾮线性度、线性结构及扩散准则、相关免疫准则、对称性等等,DES的S⼀盒是否满⾜这些准则还有待进⼀步研究。来⾃S盒的替换的交替和来⾃P盒和E扩展的⽐特的置换分别提供了所谓的“混淆和扩散”,Claude Shannon在1940年代时认为这是安全的必要条件。我仔细考虑DES的加密过程,通过查阅相关⽂献,发现雪崩效应主要和S盒的关系更⼤,因此做了以下的⼀些补充实验。把S盒替换成有序列表改变四个S盒改变六个S盒和上图类似改变⼋个S盒可以看到,不管是密钥变化⼀个⽐特,还是明⽂变化⼀个⽐特均会产⽣相似的雪崩效应,但是在密钥的改变中会有⼀些特殊的改变位数,它们的改变对于密⽂的结果不产⽣任何影响:如下图,我们可以看到,改变第⼗六个⽐特和第三⼗⼆个⽐特对于密⽂的结果不产⽣任何的影响,这是由于上⾯所提到的输⼊的64位密钥中的每8位⽐特中的最后⼀个⽐特⽤作奇偶校验位所导致的,即实际上参与加密的密钥只有56位。密钥名义上存储或传输为8字节,每个具有奇偶校验。 根据ANSI X3.92-1981(现在,称为ANSI INCITS 92-1981)[1],第3.5节:KEY的每个8位字节中的⼀个位可以⽤于密钥⽣成,分配和存储中的错误检测。 位8,16,…,64⽤于确保每个字节具有奇数奇偶性。我们看到既然雪崩效应在第四轮之前就已经发⽣,且基本达到⼀个稳定的状态,那为什么在DES标准中我们要使⽤N=16轮呢?若轮数设置地更少的话,我们的加密速度和加密效率会得到较⼤的提升。出于计算量的考虑,为了保证计算安全。对于DES算法的破解来说,⼀般会采⽤穷举攻击,如果迭代轮数过少,会降低攻击难度。硬件⽔平完全可以承载该部分的负担,所以经过权衡利弊使⽤16轮。题⽬⼆:设计⼀个检查⽤户⼝令的随机性的⼯具1. 设计⼀个⼝令随机性的评价标准2. 设计算法实现该测试, 输⼊⼀个⽤户设定的⼝令, 输出评价结果。 评价结果可以是⼀个分数, 可以是个图, 也可以是……, 只要能直观地表达出该⼝令的好坏(a)主流的⽤户⼝令强度规则设置和背景在这⾥,对于⼀个⽤户⼝令来说,其组成的⽅式可以说是有各种各样的,因此对其进⾏随机性检测可以等同于对其进⾏强度测试,⼀个越是随机的⼝令其强度越强,因此在这⾥我们设计了如下的标准,来对⽤户⼝令进⾏随机性检测。⾸先,在这⾥我参考了⼀下,当今主要的web⽹站的密码强度规则设置:MicorSoft:⼀、不包含全部或部分的⽤户账户名⼆、长度不少于6个字符三、⾄少包含以下四类中的三类字符1、⼤写英⽂字母2、⼩写英⽂字母3、数字4、⾮字母字符(如!、$、#、=、%等)其它的标准⼤同⼩异,因此在这⾥不做过多的赘述。可以看到,⼤家的思路都是类似的:考虑⼝令长度考虑与账户名不重复(或部分重复)包含的字符种类要尽可能多由此我们设计如下的⼀套评价⽤户⼝令随机性的标准。(b)⽤户⼝令随机性评价测试标准⾸先需要说明我们的评价把⼀个⼝令的随机性分为五个维度进⾏描述,分别为:⼝令长度:⼀般来说⼝令的长度越长越能体现随机性,主要是保证样本充⾜,在⼀定程度上长度越长,得分越⾼,⼀旦超越⼀个阈值,即可保证统计充分。均匀分布:该项内容主要测试在输⼊的⼝令中的各个字符占整个的⽐例,观察是否平均分布。该维度主要是⽤于观察⼝令中的重复字符数。若重复的字符越少,即字符均只在⼝令中出现⼀次,我们可以认为该⼝令的随机性越好,因此该项得分越⾼则说明越均匀分布。字符类型:该项内容主要是测试输⼊的⼝令是否包括⼏类的密钥允许字符。若包含的字符种类越多,则可以认为其随机性越好。该项得分和字符种类有关。不规则性:该项主要是测试⼝令的分布是否为按照某种特定模式。特定模式的⼝令往往易于被Hack猜到进⽽缩⼩密钥空间,导致⼝令安全性下降。该维度得分越⾼,则说明⼝令的不规则性字典测试:该项内容尝试对密钥进⾏字典攻击,字典中包含了⼀些常⽤的有规则的密钥,若能被字典攻破则说明随机性不够强。该项得分越⾼,则说明随机性越强。下⾯我们再来仔细讲解每⼀维度的具体衡量标准:⼝令长度该特性主要由⼝令的长度来体现。对于随机性测试⽽⾔,⾸先就要保证⼝令的长度⼤于⼀个定值,这样⼦进⾏随机性测试才有意义。并且对于⼀般的密码破解⽽⾔,其采取的⽅式之⼀即为暴⼒破解,强⾏穷举所有可能的⼝令来达到破解的⽬的,因此在这⾥我们考虑测试⽤户⼝令的长度,⼀般认为⽤户的⼝令越长,那么该⼝令的安全性越⾼,但是需要注意的问题是,在于我们的安全系统中,由于存储的需要,⼀般要求⽤户的⼝令不能过长,否则会超出限定的存储空间,⽽且对于⽤户⾃⾝⽽⾔,记忆起来也会更加困难。实际上长度对于随机性的影响并不⼤,只要超过了⼀定的长度,均认为有效,所以做了⼀个开根号乘⼗平滑处理。grade_init=(key_len/len_max)∗100grade_final=2grade_init频率分布性该特性主要是测试⽤户⼝令的字符分布。对于随机性测试⽽⾔对于⽤户⼝令来说,⼀般随机性越强的⼝令其字符越均匀。且若其重复的字符越多,则往往会造成⼝令的安全性较低,虽然更加容易记住,但也是会易于被他⼈窃取。因此在这⾥我们统计⽤户⼝令的频率分布,倘若频率分布越均匀,则可以认为⽤户⼝令的安全性越⾼,这⾥的得分主要由重复的字符数决定。这⾥我们采⽤了熵值来衡量随机性,热⼒学第⼆定律。熵值的计算:H(X)=ΣiPi∗Log21/Pi$Max{H(X) }= Log_2||X|| $grade=100∗(H(X)/MaxH(X))def check_key_frequency_distribution(key): key_init = list(key) key_list = list(set(key)) diff_key_len = len(key_list) key_dict = ys(key_list, 0) for x in key_list: num = 0 for i in key_init: if (str(x) == str(i)): num = num + 1 key_dict[x] = num/len(key) entropy = 0 print(key_dict) for akey, avalue in key_(): entropy = entropy + 2((1/avalue))*avalue return 100*(entropy/2(len(key)))字符复杂性该特性主要体现⽤户⼝令所使⽤的字符种类的数⽬。我们很容易想到,对于⼀个⽤户⼝令来说,所使⽤的字符种类越多,其随机性越⾼,且其安全性越强。⼀般的弱⼝令都包括⼀些由纯数字,纯字母组成的⼝令,这样往往会使⼝令空间较⼩,密码破解⼯作变得更加简单。且在这⾥,我们将⽤户⼝令所使⽤的字符分为以下种类:数字:1~9⼩写字母:a-z⼤写字母:A-Z部分特殊字符:如波浪号,感叹号等等。在这⾥需要特殊说明,部分特殊字符应该不予作为密码输⼊。因为在SQL注⼊攻击中,往往就会使⽤这些特殊字符来对⽹站进⾏爆库。之所以可以这样做,是由于在SQL语法中,特定的字符是作为SQL的保留符使⽤的,如+,=,“等等。若使⽤了这些字符,但⽹站管理员没有对输⼊字符进⾏特定地限制和保护,就会使得⽹站的安全性⽆从可求。在这⾥我们把得分分成了四个等级:包含字符种类/种1234得分25507599包含字符种类/种得分⼝令不规则性这⾥主要是考虑到⽤户的输⼊习惯问题。对于⽤户来说,⼀般为了便于记忆,往往会采⽤⼀些具有特殊形式的字符串作为⼝令,主要的形式为:“0-9”或者“a-z”:纯数字或者纯字母的随机性⽐较差。“a-z”+“1-9"或者"0-9”+“a-z”: 这种组合⼀般是姓名缩写或者有规律字符串加上电话号码,因此规律性较强,破解起来也较为容易,随机性也⽐较差。“a-z”+“1-9”+“a-z”或者“0-9”+”a-z“+”0-9“:同理在这⾥我们分为了如下⼏个等级:字符模式“a-z”或“0-9”“a-z”+“1-9"或"0-9”+“a-z”“a-z”+“1-9”+“a-z”或“0-9”+”a-z“+”0-9“其它正则表达式[0-9]*$|[a-zA-Z]*$[a-zA-Z]+[0-9]*$|[0-9]+[a-zA-Z]*$[a-zA-Z]+[0-9]+[a-zA-Z]*$|[0-9]+[a-zA-Z]+[0-9]*$得分255075100包含特定的格式如(⽇期,电话等等):字符模式电话⽇期邮编正则表达式d{3}-d{8}|d{4}-d{7}19+d{1}|20+d{1}[1-9]d{5}(?!d)得分扣15分扣5分扣10分字典测试这⾥我们收集了222万条的常⽤⼝令,⽤于对⼝令进⾏测试。这222万条的⼝令,⼀般都是那种规则性⽐较强的⼝令。这⾥我们的得分主要由两种可能:如若⼝令可以被字典破解,那么得分的组成为:grade=10+50∗(time_succeed/time_base)其中time_succeed为在找到字典中的⼝令所需要的时间,⽽time_base为遍历整个字典中的所有⼝令所需要的时若⼝令没有被破解,可以认为该⼝令的随机性在该⽅⾯较好,因此得分为:grade=100©评价体系的实例下⾯我们利⽤⼏个⼝令来测试我们体系的有效性:password = “abcedfghijk”可以看到,该⼝令的均匀分布性很好,但是随机性还是很差,易于被字典攻击,且包含的字符种类很少,且纯字母⼝令的随机性很差。password = “rusisong6257976”password = “rss123abc”password = “sdefAG12#@OP89&lmn0”2、实验创新点分析及实验总结下⾯我们来分析本次实验的⼀些创新之处以及不⾜需要改进的地⽅:题⽬⼀分析:在我的实验设计中的⼀些优点有:DES加/解算法采⽤了unicode编码,使得加密内容也可以是中⽂,对于各种的特殊字符和⽂字的兼容性也变得更⾼,DES的实⽤性更强。在对于DES的雪崩效应的研究中,我采⽤了多个明密⽂对进⾏研究,排除了明密⽂对于实验结果的影响。并且在研究过程中,选择了多个位置的单⽐特变换,保证了⽐特的变化位置没有对实验结果产⽣影响。额外补充研究了S盒对于雪崩效应的影响,对于迭代轮数的设定以及特定密⽂的变化没有产⽣雪崩效应的原因进⾏了探讨。当然在我们的实验之中也存在⼀些不⾜之处,需要我们进⾏改进:加密模式单⼀,仅仅采⽤了ECB的加密模式,没有考虑加密模式对于雪崩效应的影响。应该多做⼏组实验,考虑采⽤不同加密模式时的变化。没能够做出⼀个GUI界⾯。在终端内进⾏操作,体验不够好。题⽬⼆分析:本次实验设计的⼀些优点:在我的随机性测试的标准采⽤了五个维度的特征,对于⼀个⼝令的好坏判断利⽤了⼀个五维的雷达图进⾏展⽰,较为直观,展⽰效果更加好。多个维度综合考虑了⼀系列的可能,随机性检测的效果较好。
2023年7月31日发(作者:)
DES雪崩效应和密码强度和随机性测试《密码学导论》实验报告1、实验内容及要求题⽬⼀:分组密码的轮数对雪崩效应的影响1. 编写 DES 或 AES 加密/解密算法, 算法中迭代轮数可⾃由设定。2. 针对不同的迭代轮数, 测试并统计当明⽂改变 1 个⽐特, 或密钥改变 1个⽐特时, 密⽂的变化。a) ⾄少测试 3 种不同的迭代轮数b) 统计时, 应当考虑到在不同密钥、 不同明⽂基础上, 改变 1 ⽐特时, 密⽂所发⽣的变化c) 统计结果应以图的形式直观表⽰出来(a)DES加/解密算法的背景和原理⾸先,为了编写DES加/解密程序,我们必须了解DES加密算法:DES全称为Data Encryption Standard,即数据加密标准,是⼀种使⽤密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在⾮密级政府通信中使⽤,随后该算法在国际上⼴泛流传开来。需要注意的是,在某些⽂献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。以下为DES加/解密算法的详细步骤图⽰:算法的主要步骤为:利⽤64位的初始密钥产⽣N轮迭代所需要的密钥,具体步骤如下:对64位密钥进⾏压缩换位产⽣56位密钥(第⼋位⽤作奇偶校验位)将56位密钥分为两组前28位和后⼆⼗⼋密钥C和D,分别对C,D进⾏移位操作,再把56位密钥进⾏⼀次压缩变换形成每⼀轮所需要的最终的48位密钥对明⽂进⾏分组进⾏N轮的迭代变换,具体步骤如下:对明⽂进⾏分组,每64位⼀组对每⼀个分组⾸先进⾏⼀次初始置换IP在该轮中,把64位分组分为左32位Li和右32位Ri,然后Li+1=Ri,⽽Ri+1=Li⊕f(Ri,Ki)。f为给定的轮函数。经过N轮这样的迭代之后,形成64位数据。最后对64位数据进⾏逆置换IP−1,得到最终的64位密⽂。在开始对于DES雪崩效应的研究之前,先讲讲完备性和雪崩效应:“完备”的概念是由Kam和Davida提出来的。如果⼀个密码变换是完备的,那么它的每⼀个密⽂⽐特都依赖于所有的明⽂⽐特。所以,完备的密码变换意味着:若能根据明⽂⽐特找到每⼀个密⽂⽐特的最简布尔表达式,那么这些表达式⼀定包含所有的明⽂⽐特。如果明⽂⽮量和X和Xi仅在第i位不同,对于所有的i,j,f(X)和f(Xi)⾄少在第j位不同,那么f是完备”雪崩效应“是由Feistel提出来的,我们可以这样描述雪崩效应,对于⼀个给定的密码变换,若在任何时候,对单个输⼊⽐特求补,致使有⼀半的输⼊⽐特发⽣取补,则认为发⽣了雪崩。(b)Python下的DES加密算法细讲在这⾥对DES算法的python实现并不多做描述,主要讲解⼀些⽐较特殊的地⽅:在我们的算法中,为了增加DES算法的普遍适⽤程度,我们使⽤了unicode编码,将输⼊的明⽂字符由UTF-8码转换为unicode码(每个字符编码占两个字节)以兼容中⽂。然后再将unicode编码转化成⼆进制⽐特串进⾏加解密。因此,在我们这⾥每4个字符(4∗16=64)即组成⼀个明⽂分组。迭代轮数由标准的16轮迭代变成可控的N轮,由⼀个全局变量控制。此时,我们的密钥处理也要发⽣改变,由于之前的移位处理只考虑了16位,在这⾥我们将原来的移位表进⾏简单的平移得到了新的N轮密钥移位表。对于输⼊的加/解密密钥,我们这⾥没有进⾏编码转换,因此采⽤的为ASCII码,64位的密钥需要8个字符来⽣成,因此输⼊的密钥限制必须要满⾜8个字符的限制。©DES中的雪崩效应与算法迭代轮数的关系1、明⽂变化1个⽐特产⽣的雪崩效应的研究为了研究明⽂变化⼀个⽐特产⽣的雪崩效应和迭代轮数的关系,我们的思路如下:1. ⾸先产⽣不同的明⽂-密钥对,保证明⽂和密钥的内容对实验结果的影响能够得到⼀定程度的消除。2. 对于每⼀组明⽂-密钥对(M−K对),⾸先对明⽂(迭代轮数分别为1−N)进⾏加密,得到密⽂组(C0),⾥⾯包含N组密⽂。然后再随机改变明⽂的⽐特串中的⼀位,再次加密得到新的密⽂组(C1)。这样重复在原来明⽂⽐特串上修改⼀位,得到密⽂组C2,C3。3. 下⾯则研究密⽂的改变程度。研究的内容主要是C0分别与C1,C2,C3相⽐,迭代相同轮数的密⽂的变化的位数,即:Result1[i]=Sum[C0[i]⊕C1[i]]其中i代表密⽂的迭代轮数4. 再依次对另外两组明⽂-密钥对重复2-3步处理即可得到下⾯的实验结果。实验说明:为了便于实验处理和研究,在这⾥我们的明⽂仅仅使⽤了4个字符,这是为了使其恰好形成⼀个分组且⽆需进⾏⽐特填充,便于我们⽐较。且对于迭代轮数,由于雪崩效应的发⽣⾮常迅速,对于较⼤的轮数来说,其效果不明显,只是在⼀个固定的范围之内进⾏波动,因此这⾥我们着⼒于研究1-16轮中密⽂的变化情况。text = “love”key = “hellustc”text = “lol+”key = “profwhli”text = “1234”key = “c++andc#”
通过三组实验结果的⽐较,我们可以看到,随着迭代轮数的变化,密⽂的变化情况主要分为两个阶段:雪崩阶段:该阶段主要特征为增长速度⾮常快,密⽂初始变化位数只有1位,但是随着迭代轮数的增加,密⽂的变化位数达到⼀个相当⾼的⽔平,雪崩效应相当明显,普遍在第四轮迭代的时候就可以达到稳定值。波动阶段:该阶段主要是在围绕着⼀定的⽔平进⾏上下波动,不再有所增长,雪崩效应已经结束。且我们可以看到,对于明⽂改变⼀个⽐特来说,不管该⽐特的变化的位置在何处,均会对密⽂产⽣重⼤影响,其雪崩效应相当接近。在本试验中,由于采⽤的是unicode编码,ASCII码转unicode码会产⽣⽐较多有规律的0,所以导致变化的⽐特位数具有较⼤的波动性。2、密钥变化1个⽐特产⽣的雪崩效应研究对于密钥变化⼀个⽐特的研究思路和明⽂变化的思路相近,仅仅是由对明⽂⽐特串的改变变为对密钥⽐特串的改变,于是在这⾥不再进⾏赘述。实验说明:同样,明⽂采⽤⼀个分组4个字符。text = “love”key = “sisongjr”text = “2333”key = “cindy+++”text = “±a1”key = "通过三组实验结果的⽐较,我们也可以看到,随着迭代轮数的变化,密⽂的变化情况主要分为两个阶段:雪崩阶段:和前者相似,不再赘述。波动阶段:和前者相似,不再赘述。(d) 新问题的探讨由于DES加密算法中唯⼀的⾮线性部分是⼋个S盒,故DES的安全性研究主要是花在S盒的设计和分析上,以上给了设计应遵循的严格雪崩准则.80年代以来,各国学者们提出了⼀系列的准则来衡量密码变换抵抗某种密码分析的能⼒强弱,其中包括代数次数、⾮线性度、线性结构及扩散准则、相关免疫准则、对称性等等,DES的S⼀盒是否满⾜这些准则还有待进⼀步研究。来⾃S盒的替换的交替和来⾃P盒和E扩展的⽐特的置换分别提供了所谓的“混淆和扩散”,Claude Shannon在1940年代时认为这是安全的必要条件。我仔细考虑DES的加密过程,通过查阅相关⽂献,发现雪崩效应主要和S盒的关系更⼤,因此做了以下的⼀些补充实验。把S盒替换成有序列表改变四个S盒改变六个S盒和上图类似改变⼋个S盒可以看到,不管是密钥变化⼀个⽐特,还是明⽂变化⼀个⽐特均会产⽣相似的雪崩效应,但是在密钥的改变中会有⼀些特殊的改变位数,它们的改变对于密⽂的结果不产⽣任何影响:如下图,我们可以看到,改变第⼗六个⽐特和第三⼗⼆个⽐特对于密⽂的结果不产⽣任何的影响,这是由于上⾯所提到的输⼊的64位密钥中的每8位⽐特中的最后⼀个⽐特⽤作奇偶校验位所导致的,即实际上参与加密的密钥只有56位。密钥名义上存储或传输为8字节,每个具有奇偶校验。 根据ANSI X3.92-1981(现在,称为ANSI INCITS 92-1981)[1],第3.5节:KEY的每个8位字节中的⼀个位可以⽤于密钥⽣成,分配和存储中的错误检测。 位8,16,…,64⽤于确保每个字节具有奇数奇偶性。我们看到既然雪崩效应在第四轮之前就已经发⽣,且基本达到⼀个稳定的状态,那为什么在DES标准中我们要使⽤N=16轮呢?若轮数设置地更少的话,我们的加密速度和加密效率会得到较⼤的提升。出于计算量的考虑,为了保证计算安全。对于DES算法的破解来说,⼀般会采⽤穷举攻击,如果迭代轮数过少,会降低攻击难度。硬件⽔平完全可以承载该部分的负担,所以经过权衡利弊使⽤16轮。题⽬⼆:设计⼀个检查⽤户⼝令的随机性的⼯具1. 设计⼀个⼝令随机性的评价标准2. 设计算法实现该测试, 输⼊⼀个⽤户设定的⼝令, 输出评价结果。 评价结果可以是⼀个分数, 可以是个图, 也可以是……, 只要能直观地表达出该⼝令的好坏(a)主流的⽤户⼝令强度规则设置和背景在这⾥,对于⼀个⽤户⼝令来说,其组成的⽅式可以说是有各种各样的,因此对其进⾏随机性检测可以等同于对其进⾏强度测试,⼀个越是随机的⼝令其强度越强,因此在这⾥我们设计了如下的标准,来对⽤户⼝令进⾏随机性检测。⾸先,在这⾥我参考了⼀下,当今主要的web⽹站的密码强度规则设置:MicorSoft:⼀、不包含全部或部分的⽤户账户名⼆、长度不少于6个字符三、⾄少包含以下四类中的三类字符1、⼤写英⽂字母2、⼩写英⽂字母3、数字4、⾮字母字符(如!、$、#、=、%等)其它的标准⼤同⼩异,因此在这⾥不做过多的赘述。可以看到,⼤家的思路都是类似的:考虑⼝令长度考虑与账户名不重复(或部分重复)包含的字符种类要尽可能多由此我们设计如下的⼀套评价⽤户⼝令随机性的标准。(b)⽤户⼝令随机性评价测试标准⾸先需要说明我们的评价把⼀个⼝令的随机性分为五个维度进⾏描述,分别为:⼝令长度:⼀般来说⼝令的长度越长越能体现随机性,主要是保证样本充⾜,在⼀定程度上长度越长,得分越⾼,⼀旦超越⼀个阈值,即可保证统计充分。均匀分布:该项内容主要测试在输⼊的⼝令中的各个字符占整个的⽐例,观察是否平均分布。该维度主要是⽤于观察⼝令中的重复字符数。若重复的字符越少,即字符均只在⼝令中出现⼀次,我们可以认为该⼝令的随机性越好,因此该项得分越⾼则说明越均匀分布。字符类型:该项内容主要是测试输⼊的⼝令是否包括⼏类的密钥允许字符。若包含的字符种类越多,则可以认为其随机性越好。该项得分和字符种类有关。不规则性:该项主要是测试⼝令的分布是否为按照某种特定模式。特定模式的⼝令往往易于被Hack猜到进⽽缩⼩密钥空间,导致⼝令安全性下降。该维度得分越⾼,则说明⼝令的不规则性字典测试:该项内容尝试对密钥进⾏字典攻击,字典中包含了⼀些常⽤的有规则的密钥,若能被字典攻破则说明随机性不够强。该项得分越⾼,则说明随机性越强。下⾯我们再来仔细讲解每⼀维度的具体衡量标准:⼝令长度该特性主要由⼝令的长度来体现。对于随机性测试⽽⾔,⾸先就要保证⼝令的长度⼤于⼀个定值,这样⼦进⾏随机性测试才有意义。并且对于⼀般的密码破解⽽⾔,其采取的⽅式之⼀即为暴⼒破解,强⾏穷举所有可能的⼝令来达到破解的⽬的,因此在这⾥我们考虑测试⽤户⼝令的长度,⼀般认为⽤户的⼝令越长,那么该⼝令的安全性越⾼,但是需要注意的问题是,在于我们的安全系统中,由于存储的需要,⼀般要求⽤户的⼝令不能过长,否则会超出限定的存储空间,⽽且对于⽤户⾃⾝⽽⾔,记忆起来也会更加困难。实际上长度对于随机性的影响并不⼤,只要超过了⼀定的长度,均认为有效,所以做了⼀个开根号乘⼗平滑处理。grade_init=(key_len/len_max)∗100grade_final=2grade_init频率分布性该特性主要是测试⽤户⼝令的字符分布。对于随机性测试⽽⾔对于⽤户⼝令来说,⼀般随机性越强的⼝令其字符越均匀。且若其重复的字符越多,则往往会造成⼝令的安全性较低,虽然更加容易记住,但也是会易于被他⼈窃取。因此在这⾥我们统计⽤户⼝令的频率分布,倘若频率分布越均匀,则可以认为⽤户⼝令的安全性越⾼,这⾥的得分主要由重复的字符数决定。这⾥我们采⽤了熵值来衡量随机性,热⼒学第⼆定律。熵值的计算:H(X)=ΣiPi∗Log21/Pi$Max{H(X) }= Log_2||X|| $grade=100∗(H(X)/MaxH(X))def check_key_frequency_distribution(key): key_init = list(key) key_list = list(set(key)) diff_key_len = len(key_list) key_dict = ys(key_list, 0) for x in key_list: num = 0 for i in key_init: if (str(x) == str(i)): num = num + 1 key_dict[x] = num/len(key) entropy = 0 print(key_dict) for akey, avalue in key_(): entropy = entropy + 2((1/avalue))*avalue return 100*(entropy/2(len(key)))字符复杂性该特性主要体现⽤户⼝令所使⽤的字符种类的数⽬。我们很容易想到,对于⼀个⽤户⼝令来说,所使⽤的字符种类越多,其随机性越⾼,且其安全性越强。⼀般的弱⼝令都包括⼀些由纯数字,纯字母组成的⼝令,这样往往会使⼝令空间较⼩,密码破解⼯作变得更加简单。且在这⾥,我们将⽤户⼝令所使⽤的字符分为以下种类:数字:1~9⼩写字母:a-z⼤写字母:A-Z部分特殊字符:如波浪号,感叹号等等。在这⾥需要特殊说明,部分特殊字符应该不予作为密码输⼊。因为在SQL注⼊攻击中,往往就会使⽤这些特殊字符来对⽹站进⾏爆库。之所以可以这样做,是由于在SQL语法中,特定的字符是作为SQL的保留符使⽤的,如+,=,“等等。若使⽤了这些字符,但⽹站管理员没有对输⼊字符进⾏特定地限制和保护,就会使得⽹站的安全性⽆从可求。在这⾥我们把得分分成了四个等级:包含字符种类/种1234得分25507599包含字符种类/种得分⼝令不规则性这⾥主要是考虑到⽤户的输⼊习惯问题。对于⽤户来说,⼀般为了便于记忆,往往会采⽤⼀些具有特殊形式的字符串作为⼝令,主要的形式为:“0-9”或者“a-z”:纯数字或者纯字母的随机性⽐较差。“a-z”+“1-9"或者"0-9”+“a-z”: 这种组合⼀般是姓名缩写或者有规律字符串加上电话号码,因此规律性较强,破解起来也较为容易,随机性也⽐较差。“a-z”+“1-9”+“a-z”或者“0-9”+”a-z“+”0-9“:同理在这⾥我们分为了如下⼏个等级:字符模式“a-z”或“0-9”“a-z”+“1-9"或"0-9”+“a-z”“a-z”+“1-9”+“a-z”或“0-9”+”a-z“+”0-9“其它正则表达式[0-9]*$|[a-zA-Z]*$[a-zA-Z]+[0-9]*$|[0-9]+[a-zA-Z]*$[a-zA-Z]+[0-9]+[a-zA-Z]*$|[0-9]+[a-zA-Z]+[0-9]*$得分255075100包含特定的格式如(⽇期,电话等等):字符模式电话⽇期邮编正则表达式d{3}-d{8}|d{4}-d{7}19+d{1}|20+d{1}[1-9]d{5}(?!d)得分扣15分扣5分扣10分字典测试这⾥我们收集了222万条的常⽤⼝令,⽤于对⼝令进⾏测试。这222万条的⼝令,⼀般都是那种规则性⽐较强的⼝令。这⾥我们的得分主要由两种可能:如若⼝令可以被字典破解,那么得分的组成为:grade=10+50∗(time_succeed/time_base)其中time_succeed为在找到字典中的⼝令所需要的时间,⽽time_base为遍历整个字典中的所有⼝令所需要的时若⼝令没有被破解,可以认为该⼝令的随机性在该⽅⾯较好,因此得分为:grade=100©评价体系的实例下⾯我们利⽤⼏个⼝令来测试我们体系的有效性:password = “abcedfghijk”可以看到,该⼝令的均匀分布性很好,但是随机性还是很差,易于被字典攻击,且包含的字符种类很少,且纯字母⼝令的随机性很差。password = “rusisong6257976”password = “rss123abc”password = “sdefAG12#@OP89&lmn0”2、实验创新点分析及实验总结下⾯我们来分析本次实验的⼀些创新之处以及不⾜需要改进的地⽅:题⽬⼀分析:在我的实验设计中的⼀些优点有:DES加/解算法采⽤了unicode编码,使得加密内容也可以是中⽂,对于各种的特殊字符和⽂字的兼容性也变得更⾼,DES的实⽤性更强。在对于DES的雪崩效应的研究中,我采⽤了多个明密⽂对进⾏研究,排除了明密⽂对于实验结果的影响。并且在研究过程中,选择了多个位置的单⽐特变换,保证了⽐特的变化位置没有对实验结果产⽣影响。额外补充研究了S盒对于雪崩效应的影响,对于迭代轮数的设定以及特定密⽂的变化没有产⽣雪崩效应的原因进⾏了探讨。当然在我们的实验之中也存在⼀些不⾜之处,需要我们进⾏改进:加密模式单⼀,仅仅采⽤了ECB的加密模式,没有考虑加密模式对于雪崩效应的影响。应该多做⼏组实验,考虑采⽤不同加密模式时的变化。没能够做出⼀个GUI界⾯。在终端内进⾏操作,体验不够好。题⽬⼆分析:本次实验设计的⼀些优点:在我的随机性测试的标准采⽤了五个维度的特征,对于⼀个⼝令的好坏判断利⽤了⼀个五维的雷达图进⾏展⽰,较为直观,展⽰效果更加好。多个维度综合考虑了⼀系列的可能,随机性检测的效果较好。
发布评论