Merkle-Hellman背包加密

背包问题.

首先回忆一下当初的某一类背包问题,假设有一个背包,可以称W的重量的物品,另外有n个物品,重量分别为 a1,a2,a3…an 如果要让背包刚好装满,则必须满足方程
x1*a1+x2*a2+x3*a3+…+xn*an=W有解.
在加密过程中这个解就是明文信息.
可是现在存在的问题是,如果就通过这种方式来传递信息的话,当n足够大时,其安全程度十分高,可是存在的问题是接收方也很难将信息给解出来.但是如果所给的an序列是超递增序列的话那么解密过程就十分简单了.

超递增序列

简单来说就是an要比它之前的所有数的和大.
当给我们的是一个超递增序列时,我们可以先从最后一项an开始往前推,比如说W>an时,an的系数一定为1,W 但是在传输过程中又会产生新的问题,如果超递增序列被截获了,那么截获者就可以很轻松地将明文解出来。所以要有算法对超递增序列来进行加密。

Merkle–Hellman

其工作原理是:假定甲想加密,则先产生一个较易求解的背包问题,并用它的解作为专用密钥;然后从这个问题出发,生成另一个难解的背包问题,并作为公共密钥。如果乙想向甲发送报文,乙就可以使用难解的背包问题对报文进行加密,由于这个问题十分难解,所以一般没有人能够破译密文;甲收到密文后,可以使用易解的专用密钥解密。
但是,在它发表几年后,就找到了攻破它的方法。即使如此,它仍然代表着一类很难问题的算法。------------百度百科

  1. 生成一个超递增序列作为私钥ai
  2. 通过模乘运算来生成私钥
    1,模数m要求其值大于超递增序列的所有数的和
    2,乘数w要与m互质
    3,公钥 bi☰ai*w(mod m)

加解密

Merkle-Hellman背包加密_第1张图片

破解

背包加密是一种相当高级的加密方式,不容易破解,而且还原也相对容易,因此采用这种加密方式加密游戏数据也是非常好的,只要知道背包,就可以轻易算出来 [2] 。
这么复杂的加密,怎么解密?有如下两中破解方法: 1.利用孤立点破解;2.利用背包破解。 所谓孤立点,还是以上面的背包为例子,我们可以把密码设为a,看看得到了什么密码?1,如果我们把密码设为b,得到的密码为2,同理,可以把背包里面的所有元素都利用孤立点的方法全部枚举出来,这样我们就把背包弄到手了,对下面的破解就不成问题了,是不是很简单?其实在加密的时候,也许它们会利用异或运算先加密一下,再利用背包加密,这样更难破,孤立点方法非常有效,但是不是万能的,要结合前面的方法配合使用! 利用背包,这个就简单了,想一想,要加密也得有背包才能完成加密啊,要解密也要背包啊,这就是说,不管是用户端,还是服务器端,都会有该背包的,找到该背包不是就解决问题了吗?怎么找?大家可以稍微找一些书籍学习一下。首先是要了解进制,特别是十六进制、二进制和十进制及其之间的转换。这些加密方法在大学应该会接触的。------百度百科

具体的破解脚本可以去网上找找。

你可能感兴趣的:(Merkle-Hellman背包加密)