-
-
[原创]从方程的角度看加解密
-
发表于:
2017-11-19 10:16
4376
-
加密算式本身就是个方程式,而加密对象和加密的结果都是数组,加密的对象可能是个文本文件,也可能是可执行文件或媒体文件等,这些文件都是有其特征的,所以未加密前也许你能看懂或者判别是些什么东西,但加密后就都变成乱码了变成看不懂的东西了。加密的目的是隐藏信息的,这和门加锁防盗类似。加密的方式多种多样,都是对原数据的干预而达到隐藏信息的目的,一种方式是元素的数值转变有单表置换多表置换等,这种方式局限性很大,尤其是对使用部分元素形成的文件,例如英文文本文件就是字母和符号的集合如果使用单表置换虽然换了元素可是还有许多信息泄露了,从中不难分析出原文件的字母使用个数,使用频率,标点符号等等,多表置换好一些但复杂了综合考虑也好不到哪去。另一种方法是数值干预,使用外来数据对原数据进行覆盖从而保护它,这是比较好的方法我们主要讨论它。且看下式
明文 + 密钥 = 密文
文件的信息单元是字节,被加密文件一般称为明文,从头到尾的明文字节组成了明文数组,为每个明文字节安排一个密钥字节就形成了密钥字节数组,依上式运算则能够得到密文数组。
现在一般的做法,使用程序完成文件的加密解密工作,一般的加密程序的流程是:得到被加密文件,让用户提供密码,根据这些用户密码,程序凭空编造出和明文长度相同的密钥数组,然后根据上式完成密文数组的形成并组成密文文件,加密工作完成。
解密实际还是上面的公式的变形
密文 - 密钥 = 明文
解密时也是需要用户密码编造相同的密钥数组,来完成明文的复原。
从上面的公式可见,明文和密钥都是过程中出现的,最后只有密文是公开的,所以明文数组和密钥数组都是未知的,这是一个二元一次方程,中学生都知道是无解的,但是如果密钥多次使用就能有解了,所以密钥数组一定要每次使用新的,只是用一次。
用户密码问题——如果使用同样的用户密码,则密钥数组可能雷同,这样是不安全的,可用两种方式消除这种不安全因素;1)程序随机生成用户密码,最好用base64码或16进制码,这样随机性能够好一些,这样就避免了雷同的问题。2)在接受一般用户密码的同时,使用加盐技术salt,加盐技术能使得即使每次用户密码相同,加密结果也是不相同的。
密钥数组的生成——我们希望生成随机性优良的密钥数组,这可以利用随机函数,随机函数本身不够随机,因为它们出自同样的算法,用随机函数生成初级的密钥数组,然后对这个数组进行随机排序,就可以获得比较理想的密钥数组了,这些操作必要由用户密码来控制,另外你也可以用两个随机函数生成密钥数组或者使用多个密钥数组等等,这样也是不能破解的,兼顾速度和加密强度,方法很多选择适合的用吧。
穷举攻击问题——如果不内设检测标准,加密程序是不怕这种攻击的。加密实质是一种数值变换过程,根据上述方法任何文件通过加密得到唯一的密文,所有信息都是等概率的,如果你对密文进行穷举攻击,试用所有密钥数组,你将得出所有可能的“明文”信息,你无法判断谁是正解,例如“10:00开始总攻”和“10:00开始撤退”都是等概率的你判断谁是正解呢? 像winrar怕穷举攻击,因为它内设了标准,它将明文的CRC值作为标准 藏于密文中,这样解密时,如果密码正确文件复原这时测得的CRC值和保存的是一致的,说明解密成功了,如果密码错误程序将提示你错误,这种程序设计,使得等概率的因果关系完全破坏了,破解者就能利用程序去鉴别大量的“拼凑密码”,从中得到正解,这是出卖自己的愚蠢行为。
只要方法正确,你的加密就是不可破解的,无论用什么方法。为了信息安全必须使用不可破解模式下的加密软件,随着量子计算机的出现,靠增加密钥长度的办法就岌岌可危了,而前者是靠在原理上不可破解,所以不怕运算速度的提高。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!