ElGamal和背包体制

合集下载

信息安全工程师综合知识大纲考点:密码体制分类

信息安全工程师综合知识大纲考点:密码体制分类

信息安全工程师综合知识大纲考点:密码体制分类【考点分析】:重点掌握。

【考点内容】:根据密钥的特点,密码体制分为私钥和公钥密码体制两种,而介入私钥和公钥之间的密码体制称为混合密码体制。

一、私钥密码体制私钥密码体制又称为对称密码体制,当用户应用这种体制时,消息的发送者和接收者必须事先通过安全渠道交换密钥,以保证发送消息或接收消息时能够有供使用的密钥。

特点:一个密钥(加密和解密使用相同的密钥)。

优点:加解密简单(私钥密码算法处理速度快,常将其用作数据加密处理)。

缺点:密钥分配问题、密钥管理问题、无法认证源。

典型算法:DES、IDEA、AES等。

二、公钥密码体制1976年,W.Diffie和M.E.Hellman发表《密码学新方向》提出公钥密码体制思想。

公钥密码体制又称为非对称密码体制,其基本原理是在加密和解密的过程中使用不同的密钥处理方式,其中,加密密钥可以公开,而只需要把解密密钥安全存放即可。

在安全性方面,密码算法即使公开,由加密密钥推知解密密钥也是计算不可行的。

不适合大数据、明文加密。

特点:双密钥、用公钥推私钥在计算上不可行。

优点:密钥分发方便、密钥保管量少、支持数字签名。

缺点:加密速度慢(密钥有1024位,计算量大,不适合加密大数据)。

原理:发送方甲方和接收方乙方都分别有各自的公钥和私钥,且甲方的公钥加密只能由甲方的私钥解密,乙方同。

双方的公钥是可以共享的,但是私钥只能自己保密,此时,甲方要传输数据给乙方,明显应该使用乙方的公钥来加密,这样,只有使用乙方的私钥才能解密,而乙方的私钥只有乙方才有,保证了数据的保密性,也不用分发解密的密钥。

目前由三种公钥密码体制类型被证明是安全和有效的,即RSA体制,ELGamal体制及椭圆曲线密码体制。

三、混合密码体制混合密码体制利用公钥密码体制分配私钥密码体制的密钥,消息的收发双方共用这个密钥,然后按照私钥密码体制的方式,进行加密和解密运算。

混合密码体制的工作原理:第一步,消息发送者Alice用对称密钥把需要发送的消息加密。

elgamal公钥密码体制

elgamal公钥密码体制

ElGamal公钥密码体制是一种基于离散对数问题的非对称加密算法,由Tahir ElGamal 在1985年提出。

在ElGamal密码体制中,公钥包括一个大素数和该素数的一个本原元,私钥则是一个随机数。

通过公钥加密的消息可以使用私钥进行解密,而私钥签名的消息可以使用公钥进行验证。

ElGamal公钥密码体制的安全性基于离散对数问题的难解性,即在一个有限域中,给定元素g和h,找到整数x使得h=g^x在计算上是不可行的。

由于离散对数问题的难解性,ElGamal密码体制可以提供较高的安全性。

与RSA算法相比,ElGamal算法在加密和签名方面都具有较高的效率和灵活性。

此外,由于ElGamal算法是基于离散对数问题的,因此它可以用于构造其他密码学方案,如数字签名、密钥协商等。

需要注意的是,虽然ElGamal公钥密码体制具有较高的安全性,但在实际应用中仍需要注意密钥的生成、存储和使用安全,以避免潜在的安全风险。

对称密码体制和非对称密码体制

对称密码体制和非对称密码体制

对称密码体制和非对称密码体制一、对称加密(Symmetric Key Encryption)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。

对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

自1977年美国颁布DES(Data Encryption Standard)密码算法作为美国数据加密标准以来,对称密码体制迅速发展,得到了世界各国的关注和普遍应用。

对称密码体制从工作方式上可以分为分组加密和序列密码两大类。

对称加密算法的优点:算法公开、计算量小、加密速度快、加密效率高。

对称加密算法的缺点:交易双方都使用同样钥匙,安全性得不到保证。

此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。

对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。

而与公开密钥加密算法比起来,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使用范围有所缩小。

对称加密通常使用的是相对较小的密钥,一般小于256 bit。

因为密钥越大,加密越强,但加密与解密的过程越慢。

如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。

密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。

分组密码:也叫块加密(block cyphers),一次加密明文中的一个块。

是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组,有 ECB、CBC、CFB、OFB 四种工作模式。

序列密码:也叫流加密(stream cyphers),一次加密明文中的一个位。

ElGamal公钥密码体制及安全性

ElGamal公钥密码体制及安全性


下面我们首先计算
γ
2,0

0×(p-1)/2
mod 29
= 20 mod 29 = 1, γ
2,1

1×(p-1)/2mod
29
= 228/2 mod 29
= 28. 因为 = 28 =γ
2,1 ,
0
ß mod 29 = 1828/2 mod 29
所以 a = 1.令
ß = ß α 1 因为
0, 1 e i 1
i

根据目前的计算能力,只有当p-1 的素因子是小素数时,才 能有效分解 p-1求得 。因此,Pohlig-Hellman 算法适用于p1 的素因子是小素数的情况。 例5.8 设p = 29, 则 p-1= 28 = 22×7.设α = 2, ß 18. = 求log 。令log a .
s ( p 1 ) qi
mod p
qi ,s
· ,k, · ·
s = 0, 1,2, ·· i -1. 将这些 q ·
ei i
排成一个
下面利用表L求 a mod q
a mod q
ei i
, i= 1,2,
1 i
· ,k. · ·
e i 1

q
ei 1 i
a a q a
0
ß=αd mod p,
所以
k c2(c1d)–1≡mß (α
dk
)
–1
(mod p)
–1(mod
≡mα
dk

dk
)
p) α ∈zp*
≡m(mod p). 因此,解密变换能正确的从密文恢复相应的明文。
5.4.2. ElGamal公钥密码体制的安全性

公钥加密体制

公钥加密体制

公钥加密体制私钥加密体制(对称加密体制、单钥加密体制)公钥加密体制(非对称加密体制、双钥加密体制)私钥加密体制的优缺点:1.运算速度快,密钥产生容易。

2.当用户很多、分布很广时,密钥的分配的存储就成了大问题;3.不能实现数字签名。

一、Diffie -Hellman 加密体制二、 RSA 加密体制RSA 体制是由R.L.Rivest, A.Shamir 和L.Adlemansh 在1978年提出的。

它既可用于加密、也可用于数字签名,标准化组织ISO ,ITU 及SWIFT 等均已接受RSA 体制作为标准。

RSA 密码体制的提出是密码学史上的一个里程碑,RSA 的基础是数论中的欧拉定理,安全性依赖于大数的因数分解的困难性(即哥德巴赫猜想这一难题)。

由于其算法简单,在实际应用中容易实现,因此在理论上是最为成功的密码体制,它是目前应用最为广泛的公钥密码体制之一。

基于此,第4章中我们采用该密码体制来加密传送会话密钥。

下面给出几个定理及推论,它们是RSA 体制的数学理论背景。

定理2.1(欧拉定理)若整数a 和n 互素,则n a n mod 1)(≡ϕ其中)(n ϕ是比n 小但与n 互素的整数的个数。

特别地,当n 为素数时,由欧拉定理可得下面的推论:推论2.1(费马小定理)若p 为素数,1),(=p a ,则:p a p mod 11≡-根据欧拉定理,可以证明下面的定理,它直接给出关于RSA 密码体制中的解密变换是加密变换的逆的证明。

定理2.2 设p 和q 是两个不同的素数,pq n =,对任意的整数x (n x <≤0),及任意的非负整数k ,有:)(mod 1)(n x x n k ≡+ϕ定理2.3(中国剩余定理)设k m m m ,,,21 是两两互素的正整数,k m m m M 21=, ii m M M =),,2,1(k i =,则同余式组 k i m b x i i ,,2,1),(mod =≡有唯一解)(mod 222111M y M b y M b y M b x k k k +++≡其中.,2,1),(mod 1k i m y M i i i =≡由于篇幅关系,以上定理及推论的证明略。

第4章-非对称密码体制-网络10

第4章-非对称密码体制-网络10
16
回代: 1 =19-6×3 =19-6×(60-3×19)=19×19-6×60 =19×(79-1×60)-6×60=19×79-25×60
=19×79-25×(3220-40×79)
=1019×79-25×3220 两边同时对模3220进行求余运算得
1019×79≡1 mod 3220
于是d =1019 (4)公开公钥PU ={e, n} = {79,3337}
20

ห้องสมุดไป่ตู้
RSA的安全性依赖于大数分解困难,即从一个密钥 和密文推断出明文的难度等同于分解两个大素数的 积。显然,分解n是最常遇到的攻击方法。在算法 中要求p和q均大于100位十进制数,这样的话n至少 200位十进制数,目前人们已能分解140多位的十进 制数的大素数。 最新记录是129位十进制数的因数分解,在网络通 过分布计算被成功分解。估计对200位十进制数的 因数分解,在亿次计算机上也要进行55万年。

23
2. 加密过程
(1)在公钥库中查得用户U的公开密钥:y; (2)对于明文m,随机选取一个整数r,r∈[0, p-1] (3)计算 c1≡ gr (mod p) c2 ≡ myr (mod p) (4)将(c1,c2)作为密文发给用户U.。 (1)先计算 w ≡ (c1x)-1 (mod p) (2)再计算出明文 m ≡ c2∙w(mod p)
10
图4-2 公钥认证模型
发送方A 攻击者 接收方B
消 息
M
解 密 算 法 PRA
C
加 密 算 法 PUA
M
消 息
密钥源
11
4.2 RSA密码体制
RSA密码体制是1977年由Rivest、Shamir、 Adleman提出的非常著名的公钥密码算法。

信息安全导论(4-3 密码基础-非对称密码)

信息安全导论(4-3 密码基础-非对称密码)

37
RSA算法的安全性 RSA算法的安全性
RSA的安全性是基于分解大整数困难的假定 的安全性是基于分解大整数困难的假定 的安全性是基于分解大整数困难
如果RSA的模数 被成功地分解为 ×q,则 的模数n被成功地分解为 如果 的模数 被成功地分解为p× , 获得φ(n)=(p-1)(q-1),从而攻击者能够从 获得 , 公钥e解出 解出d, 公钥 解出 ,即d≡e-1 mod φ(n),攻击成 ≡ , 功.
由私钥及其他密码信息容易计算出公开密钥 由公钥及算法描述, 由公钥及算法描述,计算私钥是困难的
因此, 因此,公钥可以发布给其他人
6
非对称加密示意图
注意
注意
7
公钥密码的核心是使用一种特殊的函 数——单项陷门函数,从一个方向求值 单项陷门函数, 单项陷门函数 是容易的, 是容易的,但逆向计算很困难 定义: 是一个函数 是一个函数, 定义:设f是一个函数,如果对于任意给 定的x,计算y,使得y=f(x)是容易计算 定的 ,计算 ,使得 是容易计算 但对于任意给定的y,计算x是难解 的,但对于任意给定的 ,计算 是难解 即求f的逆函数是难解的 则称f是 的逆函数是难解的, 的,即求 的逆函数是难解的,则称 是 一个单向函数 一个单向函数
31
RSA中的计算问题
32
RSA中的计算问题
33
前例
则1=96-5×19=5*(-19)=5*77 mod96 = - × 5×77=1 mod96 × = 下为77 则5的乘法逆元在 mod96下为 的乘法逆元在 下为
34

35
36
验证: × = 验证:17×17=289=3×96+1=1 mod96 = × + =
38

现代密码学第八讲:数字签名

现代密码学第八讲:数字签名

1数字签名《现代密码学》第八讲2上章内容回顾公钥密码体制的提出及分类公钥密码体制的基本概念单向陷门函数的概念设计公钥加密算法--背包密码体制RSA算法及攻击方法ElGmal算法椭圆曲线密码体制3本章主要内容数字签名的基本概念一般数字签名算法Z RSA数字签名技术Z 数字签名标准Z 基于离散对数的数字签名Z 椭圆曲线数字签名4数字签名的基本概念手写签名与数字签名的区别手写签名是一种传统的确认方式,如写信、签订协议、支付确认、批复文件等.手写签名是所签文件的物理组成部分;数字信息没有固定的物理载体,如何使数字签名与所签文件捆绑在一起?手写签名通过与标准签名比较或检查笔迹来验证,受验证人主观影响大;二进制数字信息无法用人眼辨识,但可以使用数学算法来验证数字签名,不受验证人主观影响。

手写签名不易复制;二进制数字信息,十分容易复制,所以必须防止数字签名重复使用。

5数字签名和消息认证码的异同:消息完整性验证、消息源认证.消息认证的作用是保护通信双方以防第三方的攻击,然而却不能保护通信双方中的一方防止另一方的欺骗或伪造.①B伪造一个消息并使用与A共享的密钥产生该消息的认证码,然后声称该消息来自于A.②由于B有可能伪造A发来的消息,所以A就可以对自己发过的消息予以否认.数字签名的基本概念6数字签名技术则可有效解决这一问题, 类似于手书签名,数字签名应具有以下性质:①能够验证签名产生者的身份,以及产生签名的日期和时间.②能保证被签消息的内容的完整性.③数字签名可由第三方公开验证,从而能够解决通信双方的上述争议.数字签名在网络安全中提供数据完整性、数据源认证性、数据不可否认性等性质数字签名的基本概念7所谓数字签名(Digital Signature ),也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码,它是利用数学方法对该电子文档进行关键信息提取并与用户私有信息进行混合运算而形成的,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造.81976,W Diffie 和M Hellman 在“New Directions in Cryptography ”, 首先提出了数字签名的思想并猜测存在这样的方案1978,R Rivest, A Shamir, 和L Adleman 发明了RSA 算法可以用作数字签名算法.1984, S Goldwasser, S Micali, 和R Rivest 首次粗略提出了数字签名算法的安全性要求. 2004,中国颁布电子签章法9一般签名算法包含密钥生成(公钥/私钥)消息签名S=Sig x (M)用私钥对消息(消息摘要)进行签名运算 消息验证用公钥验证消息的签名是否正确,输出“True ”或“False ”一般数字签名算法()()(),x x x True S Sig M Ver S M False S Sig M =⎧⎪=⎨≠⎪⎩10数字签名的攻击:惟密钥攻击:攻击者只有用户公开的密钥. 已知消息攻击:攻击者拥有一些消息的合法签名,但是消息不由他选择.选择消息攻击:攻击者可以自由选择消息并获取消息的签名.攻击结果:完全破译:攻击者恢复出用户的密钥. 一致伪造:攻击者对于任意消息可以伪造其签名. 选择性伪造:攻击者可以对一个自己选取的消息伪造签名.存在性伪造:攻击者可以生成一些消息的签名,但在伪造前对该消息一无所知.数字签名的基本概念11①参数和密钥生成选两个保密的大素数p 和q ,计算n=p ×q ,φ(n)=(p-1)(q-1);选一整数e ,满足1<e<φ(n),且gcd(φ(n),e)=1;计算d ,满足d ·e ≡1 mod φ(n);以{e,n}为公开钥, {d,n}为秘密密钥.一般数字签名算法--RSA12②签名过程设消息为m ,对其签名为s ≡m d mod n③验证过程接收方在收到消息m 和签名s 后,验证是否成立,若成立,则发送方的签名有效.?mod e m s n≡一般数字签名算法--RSA13加密算法和签名算法同用,攻击者可以方便解密一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EIGamal公钥密码体制
Diffie-Hellman key distribution scheme 的变形能够用于安全交换 密钥 Published in 1985 by ElGamal: T. ElGamal, "A Public Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms", IEEE Trans. Information Theory, vol IT-31(4), pp469-472, July 1985. 安全性基于有限域上的离散对数问题的困难性. 缺点:增加了传送信息长度(2倍)
其他公钥密码学体制
1 背包密码学体制 2 Diffie-Hellman密码交换 3 ElGamal密码学体制
背包密码学体制
背包密码体制
背包问题:设A=(a1,a2,…,an)是由n个不同的正整数构成的背包向 量,s是背包容积.求A的子集A’,使子集中的元素ai的和恰好等于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}.
12
背包密码体制
• 加密运算 对明文分组X=(x1x2…xn)的加密为 c=f(x)=B·X≡t·A·X mod k • 解密运算 首先由s≡t-1 c mod k,求出s作为超递增背包向量A的容积,再解 背包问题即得x=(x1x2…xn).
因为t-1 c mod k≡t-1tAX mod k≡AX mod k,而由k>∑i,知AX<k, 所以t-1c mod k=AX,是惟一的.
中间人攻击
• 交换Y的过程中,Y有可能被替换假冒,而且不能发现 • 形式上,可以理解为一个中间人在跟双方同时通信,当 然通信内容在中间人那里是可见的
• A
• Xa • Ya • K=Yb’^Xa
E
Xb’ Xa’ Yb’ Ya’
B
Xb Yb K’=Y’a^Xb
相关结论
• maurer94towards – Towards the Equivalence of Breaking the Diffie-Hellman Protocol and Computing Discrete Logarithms – /maurer94towards.html • 结论 – 破译D-H密钥协商协议等价于计算离散对数 – RSA算法的安全性是否等价于大数的因子分解?
且不能重复使用. 为什么?
ElGamal算法
1) 密钥生成. 选择公开参数:p=97 及本原根 a=5 ; Bob 选择 秘密钥xB=58,计算并发布公钥 yB=558=44 mod 97. 2) Alice 要加密 M=3 给 Bob. 首先得到 Bob的公开密钥 yB=44,选择随机 k=36 计算: K=4436=75 mod 97. 计算密文对: C1 = 536 = 50 mod 97 ; C2 = 75.3 mod 97 = 31 mod 97. 发送 {50,31} 给Bob . 3) Bob 解密消息. 恢复消息密钥 K=5058=75 mod 97. Bob 计算 K-1 = 22 mod 97. Bob 恢复明文 M = 31*22 = 3 mod 97.
ElGamal加密算法
• 将明文信息M表示成{0,1,…,p-1}范围内的数 • 加密: – 秘密选择随机数k, k与p-1互素,0<=k<=p-1; 计算: • a=gk mod p • b=ykM mod p • (a,b)作为密文 • 解密: – M=(b/ax)mod p – ax≡gkx mod p , b/ax ≡ykM/ax≡gxkM/gxk≡M mod p k 需要永久保密, • 信息有扩张
16
Diffie-Hellman密钥交换
• 离散对数问题 y=gx mod p,其中g是生成元 求x的困难性 目前没有有效的方法 实际使用时常用Zp*和ECC上的点加法群 • Pohlig-Hellman algorithm – 如果p-1是小素数的乘积,则易求 – 因此,p-1应含有大素因子
Diffie-Hellman密钥交换协议
27
ElGamal加密算法安全性
1.攻击ElGamal加密算法等价于解离散对数问题 有限域上离散对数问题 已知(Zp,+,*)是一个有限域, g为Zp*的生成元,y∈ Zp ,求x使得y=gx mod p 如果求离散对数问题是容易的,则获得公钥攻击者能够解 出x,则算法完全破译.
4
背包密码体制
原则上讲,通过检查A的所有子集,总可找出问题的解(如果有 解的话). 上例中,A的子集共有210=1024个(包括空集). 如果A中元素个数n很大,子集个数2n将非常大, 且寻找满足要求 的A的子集没有比穷搜索更好的算法,因此背包问题是NP问题. 只要n足够大,那么,计算不可行.
5
背包密码体制
背包密码体制
若用f充当加密函数对明文消息m加密: 首先将m写成二元表示,再将其分成长为n的分组; 然后求每一分组的函数值,以函数值(背包容积)作为密文 分组.
7
背包密码体制
例. 背包向量仍取上例中的A,设待加密的明文是SAUNA AND HEALTH. 因为A长为10,所以应将明文分成长为10比特(即两个明文字 母)的分组SA,UN,A‘ ’,AN,D‘ ’,HE,AL,TH, 其相应的 二元序列为 若明文消息是英文文本,则可将每个字母用其在字母表中 1001100001 ,1010101110,0000100000,0000101110, 的序号表示,再将该序号转换为二进制形式( 5位即可), 0010000000 ,0100000101,0000101100,1010001000. 其中符号‘ ’表示空格 分别对以上二元序列作用于函数 f,得密文:(2942,3584,903, 3326,215,2817,2629,819).
证明、分析和例子
• 证明K=K’ K=Yb^Xa mod q K’=Ya^Xb mod q =(g^Xb)^Xa mod q =(g^Xa)^Xb mod q = g^(XbXa) mod q =g^(XaXb) mod q • 举例 q=97,g=5 A选Xa=36,B选Xb=58,则 Ya=5^36%97=50,Yb=5^58%97=44 交换50,44 A算K=44^36%97=75,B算K’=50^58%97=75 • 分析(别人怎么计算K?) 别人看到了Ya和Yb,但需要计算Xa或Xb,即要算离散对数 Ya=g^Xa mod q,或Yb=g^Xb mod q
背包密码体制是继Diffie和Hellman 1976年提出公钥密码体 制设想后的第一个公钥密码算法. 上述方案由Merkle和Hellman 于1978年提出. 两年后该体制 即被破译,破译的基本思想是找出任意模数k′和乘数t’, 使得用 k’和t’去乘公开的背包向量B时,能够产生超递增的背包向量 即可.
EIGamal算法
• EIGamal公钥密码体制是基于离散对数问题的。 • 既可以用于加密,也可以用于签名,其安全性依赖于有限 域上计算离散对数的难度。 • 要产生一对密钥,首先选择一素数p,整数模p的一个原根 g,随机选取x,并且g和x都小于p,然后计算:y=gx mod p • 明文空间为P=Zp*(模p的剩余类环),密文空间为 C=Zp*×Zp* • 公开密钥是y,g,p,g,p可以为一组用户共享 • 私有密钥是x
10
背包密码体制
为此需要对超递增背包向量A进行伪装,使攻击者看到的只是 一般背包向量A’,接收者知道超递增背包向量A. 方法一:用模乘和位置置换函数伪装. 模数k和乘数t皆取常量,满足k>∑ai,且gcd(t,k)=1,即t在 模k下有乘法逆元. bi≡t· ai mod k, i=1,2,…,n. 得新的背包向量B=(b1,b2,…,bn),记为 B≡t· A mod k. 用户以B作为自己的公开密钥, t、t-1和k可作为其秘密的陷门 信息,即解密密钥. 利用超递增背包函数作加密变换, 明文接收者可以在多项式时间解密, 但是敌手如果也知道超递增背包向量,
8
背包密码体制
怎样解密?
构造单向陷门函数f(x),为此引入一种特殊类型的背包向 量.
定义
背包向量A=(a1,a2,…,an)中的元素满足下列性质,
则称其为超递增的.
a j ai j 2,, n
i 1
j 1
9
背包密码体制
超递增背包向量对应的背包问题存在多项式 时间解法.
解法:已知s为背包容积,对A从右向左检查每 一元素,以确定是否在解中: 1) 若s≥an,则an在解中,令xn=1;若s<an,则an 不在解中,令xn=0. 然后令 s, s an s s an , s an 2) 对an-1重复上述过程,一直下去,直到检查出 若XA=S,则背包问题的解为Xa ; 1 是否在解中. 否则原背包问题无解 3) 检查结束后得解 x=(x1x2…xn).
背包问题可以构造一个单向函数f. 将x(1≤x≤2n-1)写成长为n的二元表示: 则,f(x)定义为
n
X ( x1 , x2 ,, xn1 ), xi {0,1}, 1 i n
f ( x) A X xi ai
.
i 1
f的定义可见: 上例中 x很容易求f(x),但已知f(x)求x就是要解 f(364) =已知 f(0101101100)=129+473+903+561+1165 = 3231, 背包问题,当 n较大时是计算不可行的. 类似地可求出 : 在实际应用中, n不能太小,至少为 200. f(609)=2942, f(686)=3584, f(32)=903, f(46)=3326, f(128)=215, f(261)=2817.
相关文档
最新文档