用密钥池实现一次一密文件加密(附试验程序)

  【密钥池】是随机数的容器,本身就是一个大文件。它可以提供加密文件所需要的密钥。密钥池无需保密可以公开在网站上,或提供下载。
  【密钥池的使用】加密程序从密钥池取得密钥组成密钥串,但不要直接使用密钥池的密钥,而是经过一个不可逆的随机变换后再使用,这样密钥池作为密钥的模版就可以反复使用了。并且使用时并不是从开始位置依次向后取得密钥,而是可能从池的任何位置开始,从何处开始取决于用户密码和算法,当然到了尾部再从头开始。密钥池要比被加密的最大文件大许多才好用。如果你用密钥池加密了一些文件,这些文件就依赖于这个密钥池了,所以要保证密钥池的安全,可以通过CRC检测其完整性,最好加密备份。比较理想的是能够重建密钥池。
  【一次一密文件加密方法 】一个明文字节用一个密钥字节加密,要求密钥为真随机数,并且只使用一次。可以证明此种加密方法是不能破解的,所以是最安全的。但使用方法要得当才能实现不可破解,如果加密软件自动化程度太高,还是可以被穷举攻击攻克的。
  【密钥池用于一次一密】有了密钥池和上述的方法很方便做“一次一密”加密而且每次都用新鲜的密钥,如果通信双方有同样的密钥池则没有密钥的传输问题了。首先让用户输入两组密码。加密程序得到被加密文件(明文)后,根据第一组用户密码算出一个位置值然后从密钥池取出和明文一样长的一段密钥,再由第一组用户密码算出一个长周期的随机函数的种子值,然后用此随机函数控制对初始的密钥串做不可逆排序变换(根据熵增加原理,此种随机变换不会改变原数组的随机性,只能使其更加随机),变换后得到最终的密钥串。由第二组用户密码决定明文串和密钥串的结合方式,也就是文件串的开始位置,密钥串的开始位置,及其走向。不用随机函数也可以,利用初始密钥串自身的随机性,并且用户密码参与运算一样可以完成随机排序。
  原本一次一密是不怕穷举攻击的,前提是密钥串必须保密,但由于密钥串和文件一样大所以应用比较麻烦。现在的做法是密钥串在使用前做变换,实际是被加密了以后再应用,并且有用户密码参与,如果蒙对了用户密码就危险了。因此现在怕穷举攻击了。其实密码足够长穷举攻击是不能攻破的。这里采用了第二组用户密码来增加穷举攻击的难度,这样即使短一些的密码也很安全了。
  由于密钥池是公开的谁都可以获得,省去了密钥传输的麻烦。由于密文被真随机数加密所以能对抗任何形式的攻击。由于使用两组用户密码穷举攻击也不灵了,实际应用时只要其中一组密码是灵活多变的字节数不一定多,而另一组是相对固定(不用每次都换)字节数足够长的密码。
  如果方法可用,密钥池完全可以标准化,一般网站可以提供密钥库服务,这样加密就方便了。也没有密钥传输的问题了。只要密码长度足够都可做到安全加密。

  试验程序下载地址是: http://c.thec.cn/sjdclw/密钥池.rar
  压缩包里有“密钥池建造”和“文件加密”程序。都是些小东西。“文件加密”程序的密码输入,采用了新方法,有三个编辑窗口,每个窗口的密码处理方式都不一样,大大增加了穷举攻击的难度。并且不像一般程序检测密码的正确性,正确的向下执行。对密码或解密文件不做检验,此项工作留给破解者,当然普通用户密码正确、操作正确是没有阻碍的。
  此程序加密的文件原理上不可破解,希望能向实际上不可破解迈进一小步。

评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

sjd163

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值