`
VerRan
  • 浏览: 459762 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

Merkle-Hellman背包算法

    博客分类:
  • JAVA
阅读更多

转自:http://baike.baidu.com/view/3416519.htm

 

 

1977年,Merkle与Hellman合作设计了使用背包问题实现信息加密的方法。其工作原理是:假定甲想加密,则先产生一个较易求解的背包问题,并用它的解作为专用密钥;然后从这个问题出发,生成另一个难解的背包问题,并作为公共密钥。如果乙想向甲发送报文,乙就可以使用难解的背包问题对报文进行加密,由于这个问题十分难解,所以一般没有人能够破译密文;甲收到密文后,可以使用易解的专用密钥解密。

  但是,在它发表几年后,就找到了攻破它的方法。即使如此,它仍然代表着一类很难问题的算法。

分类

  背包加密分为加法背包和乘法背包。  1、加法背包:我们知道,1<2,1+2<4,1+2+4<8,1+2+4+8<16,……,那么如果我们选择这样一些数,这些数从小到大排列,如果前面所有的数加起来的值总小于后面的数,那么这些数就可以构成一个背包,我们给一个这个背包里面的某些数的和,这个数就是被加密的数,由这个背包组成这个数只有一种组合方式,这个方式就是秘密了,例如给大家一个封包(2,3,6,12,24,48),由这个背包里的某些数构成的数:86,你知道86怎么来的吗?当然,你看着背包里面的内容,可以知道是由2+12+24+48得到的,如果你没有这个背包,而是直接得到这个86,你知道组成这个86的最小的数是多少吗?你无法知道,因为加起来等于86的数非常多:85+1=86,82+2=86等等,你是无法知道的,所以,背包加密非常难破。  2、乘法背包:乘法背包比加法背包更复杂,不仅是运算量大了很多,更重要的是你得到的一个被加密了的数据更大,一般都是上亿的,而且在许多机密的机关里面,背包的数据都不是有这个单位,而是用位。我们知道,1<2,1+2<3,1*2*3<7,1*2*3*7<43,1*2*3*7*42<1683, 数字的增长还是很快的,之所以复杂,就是因为数字很大啊!背包的特点是:如果背包里面的数据按小到大排列,那么,前面所有数据的乘积小于后面的任何一个元素,这个就是背包的特点,是不是很简单,但是要知道乘积的数字的增长是非常快的!

破解方法

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

应用领域

  很多数据都需要加密,例如银行的数据、网络游戏、军事机构、行政机构以及其他重要场所。不过虽然这种加密效果非常好,但是加密的程度太大也不现实,一般不会有非常复杂的加密,如果一个数据就几百位,而且还用非常规进制,那么可以想象电脑要算多久啊,会多么影响速度啊!
分享到:
评论

相关推荐

    Merkle-Hellman背包公钥密码加解密 C语言

    Merkle-Hellman背包公钥密码系统是一种早期的公钥加密算法,由 Ralph Merkle 和 Martin Hellman 在1978年提出。这个系统基于背包问题,这是一种在计算理论上具有挑战性的数学问题。本文将详细讲解其基本原理以及...

    merkle-hellman02.rar_Knapsack_knapsack c_merkle_背包加密_背包加密算法

    《Merkle-Hellman背包加密算法详解及C语言实现》 在密码学领域,Merkle-Hellman背包加密算法是一种非对称加密技术,它由Ralph Merkle和Martin Hellman在1978年提出。这种算法基于背包问题,一个经典的组合优化问题...

    mhkc-js:与 Merkle-Hellman 加密算法的 nodejs 聊天。 为加密课程而写

    Merkle-Hellman加密算法,也称为Merkle-Hellman多项式knapsack密码系统,是一种早期的公钥加密技术,由Ralph Merkle和Wesley Hellman在1978年提出。它基于组合数学中的“背包问题”,在当时是公钥密码学的一个创新...

    密码学 公钥密码学

    除了上述的RSA、ElGamal和Diffie-Hellman之外,还有其他一些公钥密码系统值得一提,如Merkle-Hellman背包公钥密码系统、Chor-Rivest密码系统、McEliece密码系统等,它们分别基于不同的数学难题,如背包问题、格理论...

    王茂才-计算机前沿课程的题目1

    **Merkle-Hellman背包公钥算法**是早期的公钥系统,利用了超递增背包问题的复杂性,尽管后来被证明存在安全性问题,但它展示了如何将理论数学问题转化为实际加密应用。 3. **移动支付安全**:中国在移动支付领域...

    公钥密码算法

    #### 背包算法 背包算法是一种早期的公钥密码方案。它的基本思想是利用背包问题的难解性来构建加密系统。背包问题描述如下:给定一系列物品的重量\(\{a_1, a_2, \ldots, a_n\}\)和一个背包的容量\(b\),找到一个...

    一种基于背包的图像加密算法.pdf

    - **Merkle-Hellman变换**:这是一种将超递增序列转换为普通(非超递增)序列的方法,用于生成背包公钥密码体制中的公钥。 #### 加密与解密过程 - **加密过程**:首先,根据超递增序列生成对应的背包序列(非超...

    辫群及其在密码学中的应用介绍(英文版)

    - **背包问题**:早期尝试使用NP难问题,如Merkle-Hellman背包问题及其改进版本,但最终都被破解或证明在满足安全需求时实际上不可行。 - **量子密码学**:由Bennett和Brassard提出的量子密码学,利用量子态的特性实现...

    背包公钥密码的改进及其膨胀性研究 (2004年)

    4. Merkle-Hellman背包公钥密码系统:它是背包公钥密码系统中的一种,使用超递增序列作为公钥的一部分。在此系统中,加密过程涉及将明文信息与公钥中的整数进行模运算。明文信息首先被转换成数字形式,然后通过公钥...

    国内外密码学研究现状及发展趋势

    - **背包问题**:如Merkle-Hellman体制,虽然早期版本被证明存在缺陷,但仍激发了后续研究。 - **代数编码理论**:例如McEliece体制,其安全性基于解线性码的问题。 - **有限自动机理论**:开发了一些基于有限状态...

    基于单模数线性同余方程组实现的公钥密码体系 (2011年)

    文章中提到的MH-KPKC体系,是Merkle-Hellman背包公钥密码体系(Merkle-Hellman Knapsack Public Key Cryptosystem)的简称。这是一种基于背包问题的公钥密码体系,使用超递增序列和贪心算法进行加密和解密。然而,该...

    计算机代数优秀论文集锦

    除此之外,还有一些其他的公开密钥密码体制,如Goldwasser-Micali概率公开密钥系统、Merkle-Hellman背包公钥密码体制、有限自动机公钥密码体制、基于纠错码的公钥体制、基于辫群的密码体制、NTRU以及量子密码体制等...

    背包公钥密码及其数据膨胀率的分析 (2006年)

    - Merkle和Hellman引入了一种变换\( a_k = wb_k \mod m \),其中\( \{b_k\}_{k=1}^n \)是超递增序列,\( w \)和\( m \)互质,\( m &gt; 2b_n \)。 - 这种变换将超递增序列\( \{b_k\}_{k=1}^n \)转换为非超递增序列\( ...

    背包公钥密码体制的数学理论研究 (2011年)

    在1978年,Ralph Merkle和Martin Hellman首次提出了背包公钥加密的概念,它是一种尝试将NP完全问题应用于密码学的早期尝试之一。在数学理论上,背包公钥密码体制的研究涉及到代数学、数论、组合数学等多个数学分支。...

    基于随机向量的两类新背包密码体制 (2009年)

    在现代密码学领域中,背包密码体制是一种公钥加密算法,它最早由Hellman、Merkle、Shamir等人于20世纪70年代提出。背包密码体制的安全性基于背包问题(子集和问题),即从一组物品中选取若干个物品,使得它们的总...

Global site tag (gtag.js) - Google Analytics