看雪论坛
发新帖

[原创]我的加密为何不可破解

sjdkx 2017-1-7 12:08 2677
  现在的文件一般都是以字节为单位,这里的讨论也是这样。我用的是流密码加密,现设明文长度为N字节,它们是A1、A2、...AN,密钥数组也是N字节,它们是B1、B2、...BN,相应的密文是M1、M2、...MN。密文是这样得到的:
加密算法 (i是小于或等于N的整数)
Ai + Bi = Mi
解密算法
Mi - Bi = Ai
  密文是公开的,也就是已知数,Ai和Bi都是未知数,这样的方程共有N个,而未知数是2N个,所以方程式些不定方程是无解的。但如果你掌握了密钥数组就可以解密了。
密钥数组的建立
  (1)组分的均匀;为了达到隐藏信息的目的你需要制作密钥数组,理想的密钥数组应是分布均匀的、数值是随机的、相互之间没有任何关联。根据这些要求我们建造它。定义最小单元概念,最小单元——所有元素的最小集合,也就是所有元素,每元素只出现一次的集合。首先要达到元素的分布均匀,现实中只能是相对的均匀,例如现在用字节为单位,共有0至255个元素,从中随便拿出几个数谈不上均匀,而最小单元的组合则是绝对均匀的,这时其中所有元素都是相同数量的,我是这样处理的,数组长度N除256=M+余数,以M+1个最小单元的元素组成绝对均匀数组,对数组进行数值分布均匀处理,最后从中任取N个作为密钥数组。
  (2)分布的均匀;上面建立了元素成员绝对均匀的原始数组,设数组长度为n,现在我们设法将其变为分布均匀的数组,并且数组成员之间是没有关系的,我们采用随机排序的方法,来打乱数组的原有秩序,随机排序就是让数组内的元素位置随机的交换,一般可以用循环来完成,例如n 长度的数组,用一个循环变量i,从头到尾的循环,另外随机的在n 中选择一个位置,用这个位置的元素和第i 个元素进行交换,这样循环一次每个元素都被交换了,交换完成后新的顺序建立了,生成了新的数组。从n 中随机的选择位置的操作可以用随机函数来完成,也可以拼凑一些变数来完成,让随机函数值和一些变量经代数运算生成一个大数据,用此数据模n(就是除n的余数),就可以得到随机位置了。一遍随机排序不理想可以进行多遍,一般借助于优秀的随机函数一遍就足够混乱了。
  我这样控制随机排序,由用户密码的计算值做成随机函数的种子和参数。,这些完成后你将得到一个长度为n 的乱码数组,从中取任取 N个密钥数组的建立就完成了。
安全性问题
  现在如果使用用户密码生成器,产生一些随机的字节数组作为用户密码,来完成加密等是足够安全了。但一般用户密码是用户由键盘输入而产生的,键盘输入的字符只是字节数域内的一小部分,可能产生的问题是,输入过于简单、重复使用相同的用户密码,算计你秘密的人就可能积累一些数据来破译你的密文。为了避免上述问题的发生,另外设置了自动密码(俗称加盐salt),就是让程序自动生成一些随机数字节,这些数据作为用户密码的补充其用法和其它用户密码是一样的,它需要保存在密文中解密时要用,它的隐藏位置、加密等是由其它用户密码控制的。自动密码的加入带来的好处是,使密码分析更加困难,现在对同一文件进行同样用户密码的加密,每次得到的密文是完全不一样的,另外其可能打乱密文的排列秩序。
  程序不对解密成功或密码是否正确作出判断,那样做的结果是被破解者利用,使用暴力破解来攻击你。这样就需要破解者自己来判断解密是否成功,但也是徒劳的,因为用户密码足够随机、密钥数组足够随机,所以所有状态是等概率的,例如“今日进攻”和“今日撤退”是等概率的你将陷于无法判断的僵局。这是严格意义上的对策,实际应用中为用户使用方便,你可以只判断例如密码的一小部分是否正确,比如10个用户密码只判断其中两个,这样密码错误能被挡住,但检测通过也未必是正解,但正确的密码会得到正解的。
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (8)
qqsunqiang 2017-1-7 13:35
2
密文和密钥都得有,一元方程必须知道两个才能解一个。
密文大于一个字节,放不下。取余放下了,能有唯一解吗?
无边 2017-1-7 15:19
3
又要火了啊,不过我奇怪的是破解有几个是去破解密码的,直接爆破跟算法就没关系了
2
czcqq 2017-1-7 17:37
4
知道算法后,直接爆破,你的算法能扛得住么?我不是说用普通机器爆破,而是用一些服务器,或者服务器群,你的算法呢能够扛得住么?
Howsk 2017-1-7 18:54
5
Ai + Bi = Mi
假设和值为10,那么可以枚举Ai、Bi的所有可能性,比如1+9=10,2+8=10,3+7=10......排除0+10的两种可能性和,而5+5只有一种可能性,也就是最终会有9中可能性,但是如果像楼主说的随机数和明文没有任何关联的话,对于爆破来说确实增加了很大的难度,毕竟是2个未知数,不过既然有一个已知数,那么爆破的可能性也是有,只是投入的会比较大,排除爆破的话,个人觉得可能真的不好破解出来。并且我上面举的例子仅仅是有理数相加,如果从Ai和Bi经过某种运算得到Mi的方法又算法作者自定义的,那么难度更大了。对于爆破者来说,无疑是一种徒劳,表示支持楼主的思想。
sjdkx 2017-1-7 19:37
6
谢谢理解,只要你的程序不做解密成功的判断,暴力破解就是个难于实施的梦。暴力破解实际是加密软件作者自己给破解者的愚蠢奉献。
信息安全的关键是密钥的质量,密钥串要能实现所有可能的状态,也就是对于所有状态是等概率的,加密的复杂性是没有限度的,但在不可破解之上的劳作就是效率低下了,所以要权衡效率。
由密文穷举密钥得出合乎逻辑的“明文”就能解密吗?这是不可能的,逻辑矛盾的都可能出现,最后只能是瞎猜而已。
如果在加密原理上是不可破解的,那他什么攻击也不怕,即使调动天下所有计算能力用无限长的时间也没有用。
正解只是众多状态中的一个,关键是你没有办法将其区分出来。再说信息加密也不一定就是文本文件也许是各种格式的东西。
比较理想的做法是用户密码由计算机随机生成(没有人为因素),用十六进制数来表示,一个字节2个码,这样将不局限于那些可输入字符了,加密更加完美。
ninebell 2017-1-8 15:00
7
把破坏程序写在密文中
发现程序被破坏立刻引爆
因此程序有两种状态
sjdkx 2017-1-11 21:35
8
信息不泄露就足矣,别搞那些乱七八糟的东西。
星空泪 2017-2-28 23:33
10
楼主可能没有系统的学习过密码学。 楼主的算法中存在很多错误。例如“从中任取N个作为密钥数组”导致无法解密,又例如过分依赖计算机的伪随机数生成器来保证算法的安全性等等。 我大概可以猜到楼主想要表达的算法是“一次性密码本”算法。 在密码本没有泄露的情况下,“一次性密码本”是理论上无法破解的。 但是楼主可能也同时意识到了,“一次性密码本”是一个不实用的算法。楼主试图对此进行弥补。然而很遗憾,从楼主所表达的情况来看,并不成功。
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.012, SQL: 9 / 京ICP备10040895号-17