背包密码问题

一、问题简述(引自杨波的《现代密码学》)

A=(a1,a2,...an)是由n个不同的正整数构成的n元组,s是另一个正整数。

背包问题就是从A中求出所有的a,使其和等于s。其中A称为背包向量,s为背包容积。

例:A=(43 ,129, 215, 473, 903, 302, 561,1165, 697, 1523),s=3231。

                                 3231=129+473+903+561+1165

所以,从A中找出的数有129,473,903,561,1165。

二、作为密码可用性分析

1、抗穷举搜索分析

作为密码,最怕的就是穷举搜索。上面的例题中有10元素,每个元素有选取(用'1'表示)和不选取('0'表示)两种状态,故共有2^{10}个子集,包含空集,也就是说有2^{10}种组合。我们往往会选取元素很多的集合,比如512个,即有2^{512}种组合,对计算机来说,遍历已经相当困难了。

2、单向函数

将元素选取选取与否所构成的二进制数据作为自变量x,将背包容量s作为因变量f(x)。

如上述例题:f(364)=f(0101101100)=129+473+903+561+1165=3231很容易求得

可以发现,已知x求f(x)很,但已知f(x)求x就有2^{10}(当集合长度为n时,有2^{n})种可能。

三、f(x)的陷门和序列的伪装

因为信息的传输信道是公用的,直接将上述的x传输没有秘密可言。而且我们选用的背包向量A往往很长,将背包向量A传输,无疑会增加传输的负担。因此我们需要对A进行伪装,为了接收方能够破解还需要找到单向函数f(x)的陷门。

1、f(x)的陷门

我们引入一个特殊的背包向量——“超递增”背包向量A=(

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值