密码学---公钥密钥---背包密码体制

本文详细介绍了背包密码体制的概念,如何通过背包问题构建加密算法,包括加密过程的步骤和一个实际加密实例。深入探讨了超递增背包问题及其在解密中的应用,以及如何通过模乘伪装来增强安全性。最后,提供了伪装超递增背包的具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背包密码体制概念

背包问题就是从n个不同的正整数构成的n元组A(a1,a2,a3,…,an,)中找出和为已知正整数S的所有ai。其中A称为背包向量,S是背包的容积。

背包问题求解的本质就是找到元组A的子集B,使得B中所有元素的和为背包容积S。但是考虑到当元组个数非常大时,计算量非常大,因此背包问题是NPC问题。

背包密码体制流程

加密过程

由背包问题构造公钥密码体制同样是要构造一个单向函数f(x),f(x)用来对明文数据进行加密。加密过程:

1.将明文x(1≤x≤2n-1)用长度为n的二元表示
2.将二元表示进行分组,每组的长度为n(若最后一组的长度不足n的话,则在后面补零操作)
3.求每个分组的函数值,即相应的密文

加密实例

已知A=(1,3,5,11,21,44,87,175,349,701),S=3231.求明文SAUNA AND HEALTH的密文。

加密过程:
1.由A可知分组的长度为10,由密文类型是英文文本,因此可将每个字母用其在字母表中的序号表示,并将对应的序号用二元表示,其中空格用_表示。得到英文字母表及字母的二进制表示如下图所示:
在这里插入图片描述
2.进行分组,两个明文字母为一组,分组结果为:SA、UN、A_、AN、D_、HE、AL、TH。其相应的二元序列为1001100001、1010101110、…、1010001000
3.对以上二元序列进行加密:得到结果为f(1001100001)=A(1,0,0,1,1,0,0,0,0,1)T=2942,…,f(1010001000)=A(1,0,1,0,0,0,1,0,0,0)T=819

得到加密后的密文为(2942,3584,903,3326,215,2817,2629,819)

解密过程

解密过程就是用每一个密文分组作为背包容积,求背包问题的解。从函数f的定义可见,已知x求f(x)很容易,但是已知f(x)求x就是解背包问题,而背包问题是NPC问题,因此我们需要找出单向函数f(x)的陷门,为此需要引入一种特殊类型的背包向量—超递增背包问题

超递增背包问题

已知背包向量A=(a1,a2,…,an),若有以下关系成立:
在这里插入图片描述
则称为背包向量A为超递增背包向量。

超递增背包向量问题可以通过贪婪算法求解。

贪婪算法

已知s为背包容积,对A从右向左检查每一元素,以元素是否在解中。检查时判断如下条件:s≥an,则an在解中,令xn=1;否则令xn=0。依次检查完成后可以即可得到x=(x1x2xn),B=xT

解密实例

根据上面加密实例,得到密文(2942,3584,903,3326,215,2817,2629,819),A=(1,3,5,11,21,44,87,175,349,701)是一个超递增背包向量,k=1590,t=43,43-1=37
解密过程如下:
1.求密文对应的背包容积si=t-1×c mod k:

如2942的背包容积为37×2942 mod 1590=734,…,37×819 mod 1590=93。因此得到背包容积向量S为(734,638,21,632,5,879,283,93)。

2.对每一个背包容积si使用贪婪算法求得其二元表示:

如734>701,所以a10=1,734-701=33,33<349,所以a9=0,…因此得到734的二元表示为1001100001,所以它对应的英文分组为SA,对所有的背包容积求解,即可得到最终的解密结果

改进

由于密文的解密过程依赖于超递增背包向量,若敌手也知道超递增背包向量,则可以很容易得到明文,因此可用模乘对超递增背包A进行伪装。

用模乘运算进行背包伪装需要确定模乘的模数k和乘数t,且满常数k和t需要满足k>sum(A),gcd(t,k)=1两个条件,即保证t在模k下有乘法逆元。

伪装过程:
在这里插入图片描述
对在A中的每个ai进行以上操作,即可得到伪装后的背包向量B=(b1,b2,…,bn,),记为B≡t·A mod k,用户以B作为自己的公开钥

伪装超递增背包的实例

已知超递增背包A=(1,3,5,11,21,44,87,175,349,701),取模数k=1590;取乘数t=43。
解:
由bi=t×ai mod k:
可得b1=43×1 mod 1590 = 43,…,b10=43×701 mod 1590 = 1523
因此可得伪装后的背包向量为(43,129,215,473,903,302,561,1165,697,1523)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值