语录:在做任何一件事的时候,总会遇到点麻烦;当把这件事做完后,回过头来再想想这个过程,解决这件事的具体步骤和过程中遇到的问题,然后用文字把这些问题给描述出来,可能会对自己有所收获。
------------------------------------------------------------------------------
最近在学背包公钥密码,由于好奇,自己尝试的去实现一个背包公钥密码系统。对这过程中遇到的问题,在下文中做个小结!
----------------------------------------------------------------------------------------------------------------------------
1.什么是MH背包问题?
描述:
在1978年,Merkle与Hellman提出来的。
大致的思想是这样的:
现在有一堆重量不同的物品,从中任意选取n个物品放入一背包里;公开背包里物品的总重量和这一堆物品;但是所选的物品种类是不公开的。
2.MH背包算法
描述:
Merkle与Hellman合作设计了使用背包问题实现信息加密的方法。
大致的思想是这样的:
假如现在甲想干这样一件事,凡是给甲发消息,则这条消息一定要加密;
为实现这个目的,甲必须有专用密钥,而这个密钥是通过背包问题产生的;有这个专用密钥产生一个公共密钥;然后凡是给甲发消息,要先用这个公共密钥加密,然后甲接收消息用专用密钥解密;
为实现这个过程,我们需要做的步骤:
1) 产生密钥
i) 确定密钥序列的长度n (也可以自己固定长度);
ii) 随机产生秘密密钥序列B =(b1,b2,…,bn)
(其中:B满足bj > b1+...+bj1,j>1),
N, W(其中:满足N>b1+...+bn且gcd(W,N)=1;);
iii) 生成公开密钥序列A(a1,a2,…,an)
(其中ai满足ai = bi*W(modN),n>=i>=1);
2) 加密
目的:乙欲将明文M = (m1,m2,…,mn)传送给甲;
具体做法:
乙根据甲的公开密钥A(a1,a2,…,an),并计算出对应得S(S=a1*m1+...+an*mn),并将S传给甲;
3) 解密
1)甲收到S后,利用秘密密钥将S转换成S';
(其中:S' = SW'(mod N) = (b1*m1+...+bn*mn)(mod N),(W'是W的逆元) );
2)利用贪心算法计算M序列;
S' = MX'(X'是X的转置矩阵)
for(int i = n; i > 0; i--)
{
if(S' >= b[i]){
S' -= b[i];
x[i] = 1;
}else{
x[i] = 0;
}
}
3,实现过程中遇到的问题
1)构建超递增序列B
对于i<= n, 满足
Bi = ∑Bj+ (rand()%5+1) (1<=j<=i);
nInt=∑Bj+ (rand()%5+1) (1<=j<=n);
2)求解W的逆元
逆元W'应满足的条件:W' * W % n == 1,暂时没有好方法!
3)求解S’
S’= S*W(mod N)
4) 我现在的程序暂时一次性最多只能传29个字符;以后可以改善;
分享到:
相关推荐
用dev c++编译器写的关于背包公钥系统的c源码 输入与输出: 请分别输入私钥s的各个值以及p,a的值: s[0]=2 s[1]=5 s[2]=9 s[3]=21 s[4]=45 s[5]=103 s[6]=215 s[7]=450 s[8]=946 p=2003 a=1289 请输入需要加密的信息...
然而,本文揭露了即便在特定条件下,随机背包公钥密码系统也存在安全隐患。 首先,公钥密码体制是加密技术中的一种重要类型,它基于一对密钥:一个公开的公钥用于加密数据,一个保密的私钥用于解密数据。公钥密码...
Merkle-Hellman背包公钥密码系统是一种早期的公钥加密算法,由 Ralph Merkle 和 Martin Hellman 在1978年提出。这个系统基于背包问题,这是一种在计算理论上具有挑战性的数学问题。本文将详细讲解其基本原理以及...
除了上述的RSA、ElGamal和Diffie-Hellman之外,还有其他一些公钥密码系统值得一提,如Merkle-Hellman背包公钥密码系统、Chor-Rivest密码系统、McEliece密码系统等,它们分别基于不同的数学难题,如背包问题、格理论...
这部分内容对于了解如何设计和分析复杂的公钥密码系统尤其重要。 总体来说,这份文档探讨了如何利用复杂的数学难题来构建健壮的公钥加密算法,着重分析了基于NP完全问题和ECDLP的陷门背包公钥密码体制的优缺点。...
文档接着概述了全同念和问题分类,这涉及到公钥密码学中的核心问题,例如如何设计一个安全的加密系统,以及解决与公钥加密相关的各种数学问题。 1.3节详细介绍了公钥密码学的基本概念,包括公钥体制(PKC),它是由W....
4. Merkle-Hellman背包公钥密码系统:它是背包公钥密码系统中的一种,使用超递增序列作为公钥的一部分。在此系统中,加密过程涉及将明文信息与公钥中的整数进行模运算。明文信息首先被转换成数字形式,然后通过公钥...
为了确保密码系统的安全性,背包公钥密码体制必须要求加密函数是单射的,即不同的明文经过加密后,应该对应不同的密文。 定理1提出了背包单射加密函数的一个充分必要条件,即背包向量的每个分量都不相等,并且每个...
- 背包公钥密码系统基于背包问题,通过选择一组正整数\( \{a_i\}_{i=1}^n \)来构建。 - 明文\( m=m_1m_2…m_n \)是一串二进制符号,通过公钥\( c=a_1m_1+a_2m_2+…+a_nm_n \)加密生成密文。 2. **Merkle-Hellman...
背包公钥密码系统基于整数背包问题,这是一个著名的NP完全问题。在该系统中,公钥由一个大整数集合(背包)和一个阈值构成,私钥是生成这个背包的特定参数。加密时,发送者选择一个随机整数并将其与公钥中的元素相加...
MH(Merkle-Hellman)背包公钥密码是通过构造一个超递增序列来简化背包问题的求解。具体来说,背包系列\(\{a_1, a_2, \ldots, a_n\}\)是由一个超递增序列\(\{b_1, b_2, \ldots, b_n\}\)经过特定变换得到的,虽然\(\{...
### 公钥密码中的数学问题 #### 一、引言 公钥密码学是一种重要的密码技术,它在信息安全领域扮演着核心角色。该技术不仅基于数学理论,还依赖于计算机科学的实际应用。本文旨在深入探讨公钥密码学背后的数学原理...
### MERKLE 的密码学——公钥系统的探索 ...从单向散列函数到基于谜题的公钥加密系统,再到数字签名和陷阱门背包,这些创新性的思想和技术极大地推动了密码学的发展,也为现代网络安全技术打下了坚实的基础。
背包密码基于整数线性组合的问题,其核心在于构造一个难以解决的背包问题作为公钥,而私钥则是用于快速解密的一组特殊值。 **第二步:计算过程** - **对于密文C=20**: - 根据公式\(C = \sum_{i=1}^{k}a_i m_i\),...