📜  密码学中的背包加密算法

📅  最后修改于: 2021-08-25 10:20:32             🧑  作者: Mango

背包加密算法是第一个通用公钥加密算法。它是由Ralph MerkleMertin Hellman于1978年开发的。由于它是公钥密码术,因此需要两个不同的密钥。一个是用于加密过程的公钥,另一个是用于解密过程的私钥。在此算法中,我们将解决两个不同的背包问题,其中一个很容易,而另一个则很困难。简易背包用作私钥,硬背包用作公钥。简易背包用于派生硬背包。

对于简易背包,我们将选择超级增加背包问题。超增加背包是一个序列,其中每个下一个项都大于所有先前项的总和。

例子 –

{1, 2, 4, 10, 20, 40} is a super increasing as
1<2, 1+2<4, 1+2+4<10, 1+2+4+10<20 and 1+2+4+10+20<40.

派生公钥

  • 步骤1:
    选择一个超级增加的背包{1、2、4、10、20、40}作为私钥。
  • 第2步:
    选择两个数字n和m。将私钥的所有值乘以数字n,然后求模m。 m的值必须大于私钥中所有值的总和(例如,示例110)。数字n与m(例如,示例31)不应具有公因数。
  • 步骤3:
    使用m和n计算公钥的值。
    1x31 mod(110) = 31
    2x31 mod(110) = 62
    4x31 mod(110) = 14
    10x31 mod(110) = 90
    20x31 mod(110) = 70
    40x31 mod(110) = 30

    因此,我们的公钥为{31,62,14,90,70,30}
    私钥是{1、2、4、10、20、40}。

现在以一个例子来理解加密和解密的过程。

例子 –
让我们的纯文本为100100111100101110。

1.加密:
由于背包包含六个值,因此我们将纯文本分为六个组:

100100  111100  101110 

将公钥的每个值与每个组的对应值相乘并求和。

100100  {31, 62, 14, 90, 70, 30}
1x31+0x62+0x14+1x90+0x70+0x30 = 121

111100  {31, 62, 14, 90, 70, 30}
1x31+1x62+1x14+1x90+0x70+0x30 = 197

101110  {31, 62, 14, 90, 70, 30}
1x31+0x62+1x14+1x90+1x70+0x30 = 205 

因此,我们的密文为121 197 205。

2.解密:
接收者接收必须解密的密文。接收器还知道m和n的值。
因此,首先我们需要找到n^-1 ,它是n mod m的乘法逆,即

nx n^-1 mod(m)= 1 31 x n^-1 mod(110)= 1 n^-1 = 71

现在,我们必须将密文的每个块乘以71,然后乘以71。

121 x 71 mod(110) = 11 

然后,我们将必须根据私钥{1、2、4、10、20、40}的值得出11的总和,即
1 + 10 = 11,因此使对应的位1和其他0为100100。
相似地,

197 x 71 mod(110) = 17
1+2+4+10=17 = 111100

And, 205 x 71 mod(110) = 35
1+4+10+20=35 = 101110 

合并它们后,我们得到了解码后的文本。
100100111100101110这是我们的纯文本。