首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
大众密码学
时间:
2015-05-17 08:12:51
阅读:
122
评论:
0
收藏:
0
[点我收藏+]
标签:
流密码
元素之间不相关
文件加密
随机函数
随机排序
序论
通过多年研究总结出一套适用于计算机的文件加密方法,它属于流密码加密但不需要线性反馈位移寄存器,那东西限制了普通计算机用户的应用,因为分组密码方式不但是自找麻烦而且限制了自己所以不被采用,又因为非对称密码的加密方式技术还不成熟速度太慢也不采用。本方法用户密码长度不受限制,但是用户密码不能过短,这是因为用户密码是完成加密的重要参数,如果信息量太少则不能形成千变万化的状态,那样就不能很好地隐藏秘密了。
第一节 加密原理
信息加密技术实际是信息隐藏技术,好的加密能保护信息不被没有授权的人读懂。任何信息都可以用数字表示,所以信息加密一般落实到文件加密。所有各类文件都可以是加密对象。
加密原理很简单:
就是用未知数来隐藏被加密对象数字而已,设A是被加密对象一般称为明文,一个明文没什么用处,而明文数组则可能是文章或可执行程序或是媒体文件等等,一般文件都可以用字节作为元素。明文是有可能被看懂或识别的,例如字符文章等,也可能是乱码。B表示未知数,一般它和明文有相同的数字单位也就是字节,C表示加密结果的数字,这里用加法加密,当然也可以用别的运算符但必须有相应的逆运算存在。
A + B = C
这是一个数字的加密,可见只知道C不知道B是无法知道A的,两个未知数一个方程无法求解。对于一组数字则有:
A1 + B1 = C1,A2 + B2 = C2,...An + Bn = Cn
这样明文数组A1,A2,...An被未知数组B1,B2,...Bn加密成了密文数组C1,C2,...Cn。一般未知数组被称为密钥数组,解密是加密的逆运算。如果密钥数组只是用一次,并且密钥数组元素之间没有任何关系这样的加密是不可破解的。那为什么有的加密可以破解呢?
从上面可见密钥数组和明文数组是一样长的,如果文件长了就很不方便管理密钥数组。现在的常规方式是用户提供“用户密码”,加密程序根据这些数据用一些算法拓展这些数据制作一个密钥数组,密钥数组长度是密码数组的几千倍几十万倍或更多倍都是有可能的。由少量数据生成大量数据总是有漏洞的,根据这些漏洞理论上是能破解密钥数组的,破解者除了得到密文还可能得到加密软件甚至加密程序的源码。
所以加密者努力寻找好的算法避免缺陷被利用,解密者则努力寻找漏洞突破封锁。
第二节 密钥数组的建立
鉴于文件是以字节为单位,密钥数组也是以字节为单位,我们知道字节是八位二进制数,数值从0 到 255,共计256个元素。我们要建造的密钥数组是:分布均匀的,数据之间毫无关联的。这样才能确保被加密数据的安全。
下面讨论几种建造密钥数组的方法,它们的加密强度和易用性都是不同的:
a)用一个随机函数;随机函数要求能通过各项测试,周期很大,这样由用户密码计算出一个种子,就可以由此点向后取值,做模256后就形成了字节数组,这样的数组数据之间是有关联的,因为它们来自同一随机函数,在保密性要求不高的情况下可以用它,并且使用时每项再乘一个系数加上一个系数,这两个系数也是由用户密码计算出来。
b)用多个随机函数;和a)类似这里用多个随机函数的值的运算结果做密钥,这样的密钥之间的关系就不好被利用破解了,所以这个加密强度比a)高些。
c)构造密钥数组;字节数组的基本元素就是256个,要建造 N个数据的密钥数组,为了分布均匀,设k为一个整数,让256×k大于等于N并且256×(k-1)小于N,这样每种元素取 k个,做成一个长度为256×k的数组,我们要将这些数据搅拌均匀,最后取N个即可。数组最初的状态是什么样都没关系,顺序排列的比较好形成,这样我们就有了原始数组。
上面建立了元素绝对均匀的原始数组,现在我们设法将其变为乱码数组,并且数组成员之间是没有关系的,我们采用随机排序的方法,来打乱数组的秩序,随机排序就是让数组内的元素位置随机的交换,一般可以用循环来完成,例如256×k的长度的数组,用一个循环变量i,从头到尾的循环,另外随机的在256×k中选择一个位置,用这个位置的元素和第i个元素进行交换,这样循环一次每个元素都被交换了,交换完成后新的顺序建立了,生成了新的数组。从256×k中随机的选择位置的操作可以用随机函数来完成,也可以拼凑一些随机性较强的变数来完成,让随机函数值和一些变量经代数运算生成一个大数据,用此数据模256×k,就可以得到随机位置了。一遍随机排序不理想可以进行多遍,一般借助于优秀的随机函数一遍就足够了。我们这样控制随机排序,由用户密码的计算值做成随机函数的种子,这里只做最简单的叙述,实际应用时,你可以搞得很复杂,例如将数组分成若干段分别处理,也可以使用多个随机函数参与运算...,这些完成后你将得到一个长度为256×k的乱码数组,从中取 N个就达到目的了。
第三节 文件的加密和解密
有了密钥数组应用加密原理中的方法就可以加密或解密了,这里是流密码加密方式,被加密文件是以字节为单位的信息流一般称为明文流,在得到用户密码后用第二节中的方法生成以字节为单位的密钥数组这是密钥流,用它们依次做加密操作则得到密文流可以保存于文件中这就是密文。密文可以保存或公开传播。密文可以在加密软件的帮助下,应用你掌握的用户密码,让软件将密文还原为明文这就是解密。
第四节 安全性问题
加密算法是公开的、加密软件也是公开的安全性取决于你的密钥数组的质量,如果你的密钥数组各项是完全独立的(第二节方法c)则解密是做不到的。有人可能想若用穷举法长时间计算理论上就能破解,穷举法不是万能的,本方法用户密码不受限制如果密码长一些穷举攻击是徒劳的,你可以这样组织用户密码,它有固定不变的较长的前缀或后缀这样便于记忆和变化的部分,这样就又长又好记了,也可以通过关联大型密钥库或文件的方式来丰富用户密码,也是穷举攻击无法对付的。并且加密软件不检测用户密码的正误,因为任何检测都能帮助破解者,这样穷举攻击必须自己判定结果,这既费时又容易出错。另外还有专门对付穷举攻击的方法就不多说了。
大众密码学
标签:
流密码
元素之间不相关
文件加密
随机函数
随机排序
原文地址:http://blog.csdn.net/sjd163/article/details/45786043
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!