Merkle-Hellman揹包公鑰加密

Merkle-Hellman揹包加密方案屬於子集和問題,這個加密算法易於求解並不安全,但是卻是這一類加密算法的基礎。主要使用的數學運算是模乘和置換。

  1. 超遞增序列
    B =(b1,b2,b3,……,bn)是一個正整數序列,對於每一個i,2<= i <= n ,滿足bi > j=1i1\sum_{j=1}^{i-1} bj,也就是說序列中第i個數字,比之前的所有數字的和還大。
  2. 求解超遞增序列的子集和問題:
    即求解B = {b1,b2,b3,……,bn}某個子集的和,設子集和爲s,s與bi(i從n開始到1)做比較,若s<bi則i=i-1,若s>=bi則s=s-bi並記錄當前i的值然後i=i-1直到s=0爲止。僞代碼:
i = n
while i >= 1:
	if  s > bi:
		xi = 1
		s = s - bi
	else:
		xi = 0
	i = i - 1
return (x1, x2, …… ,xn)

xi爲1則B中第i位爲子集中的元素。

  1. 基本的Merkle-Hellman揹包加密的祕鑰生成
    選擇一個超遞增序列B = {b1,b2,b3,……,bn} 和模數M,M > sum(B)
    隨機選取一個整數W,1 <= W <= M-1, 使得gcd(W,M) = 1
    隨機選取整數{1,2,3,……,n}的一個置換π\pi
    計算ai = Wbπ\pi(i) mod M, i = 1,2,……,n。
    公鑰就是(a1,a2,a3,……,an),私鑰是(π\pi,M, W,B)
  2. 加密
    取出公鑰(a1,a2,a3,……,an)
    將明文m表示爲長n的二進制串,m = m1,m2,m3……mn
    計算整數c = m1 * a1 + m2 * a2 + …… + mn * an
    c就是密文
  3. 解密
    計算d = W -1 c mod M
    通過求解超遞增子集和問題,求滿足d = r1 * b1 + r2 * b2 + …… + rn * bn的整數r1,r2,……rn,ri \in {0, 1}
    明文的二進制串爲mi = rπ\pi(i)
    解密的證明:
    d = W-1 *c = W-1 i=1n\sum_{i=1}^{n} mi * ai = i=1n\sum_{i=1}^{n} mi * bπ\pi(i) (mod M)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章