在程序中进一步
- 提出背包问题(+为什么要提背包?)
- 轻松而艰巨的挑战
- 示例
- 历史
什么是公钥加密?
.
: , .
, - !
- , , «», .
- . , , , .
: , .
, - !
第一个通用公钥算法使用背包算法。
根据公共密钥系统的定义,需要两个密钥才能成功加密(和解密)消息。消息的“合法”收件人知道密钥而发件人拥有另一个公钥
如果公钥被攻击者知道该怎么办?
有一个答案:必须使用转换(单向函数)从私钥中获取公钥。
知道A,就很容易计算函数本身B = f ( A )
,并且很难计算逆函数A = f − 1 ( B )
什么是“容易”和“困难”?
.
«» , . ..n , — t ∝ n a , a — . , .
«» . , , .
..n , t ∝ 2 n , , .
«» , . ..
«» . , , .
..
背包问题的公式如下
集合(背包向量)
在背包问题的最著名版本中,需要找出给定的一对是否具有
背包类比
在最简单的情况下
背包完全装满。
即,假设您有一组砝码1、6、8、15和24,则需要打包一个30磅的背包。
原则上,总可以通过彻底搜索子集找到解决方案
但是如果有几百个数字怎么办
在我们的示例中,n = 5,以便不使表示复杂化。在实际条件下,一个示例将有300个
该功能是否满足指定要求?
我们定义功能
即,
功能
加密
纯文本
(. plain text) — , , . ( ).
有两种加密方法:
- 通过将背包向量的元素提高到加密消息的相应位的幂,然后将所有结果相乘,即可得到消息密码。
和消息A = ( 2 , 3 , 5 ) ,则密码将是数字( 100 ) ... 这是乘法的方式。2 1 ∗ 3 0 ∗ 5 0 = 2 - 通过将此背包向量的元素乘以加密消息的相应位,然后将所有结果相加,即
和消息A = ( 2 , 3 , 5 ) ,则密码将是数字( 100 ) ... 此方法称为加法。2 ∗ 1 + 3 ∗ 0 + 5 ∗ 0 = 2
示例
要以二进制表示形式对纯文本进行加密,则将其分成多个长度的块
背包加密为创建公共和私有密钥提供了一种很好的方法,其中私有密钥易于使用,而公共密钥难以确定。
因此,我们可以创建一个系统,其中:“硬”问题将用作
公钥;有了它,您可以轻松加密,并且无法解密消息。
私钥-“简单”问题将作为 使用它,您可以轻松地解密邮件。如果没有私钥,则必须解决“困难”的背包问题。
“容易”的问题
超级成长背包矢量
A = ( a 1 , . . . , a n ) , Σ i = 1 j − 1 a i < a j j = 2 , . . . , n , . .
对于超增长向量A,背包问题很容易解决。那些。背包很容易组装。
让我们举个例子:
算法
- .
, , . , . - .
- (1)-(2) .
, .
“难题
解密非超大背包的问题要困难得多。
Merkle和Hellman创建了一种算法,该算法使用超大号私钥背包和非超大号公钥背包。
他们通过承担超大背包任务并将其转换为非超大任务来完成此任务。
(Merkle和Hellman使用模块化算法,设计了一种将“轻”背包变成“硬”背包的方法)
创建公用密钥
几个重要概念
-
( x , m o d m ) x ,m
— ,x , [x/m] — ,m > 1 x = ( x , m o d m ) + [ x / m ] ∗ m
-
,A m > m a x A ,t < m .( t , m ) = 1
,B = ( b 1 , . . . , b n ) ,b i = ( t a i , m o d m ) , , B A m t , ,i = 1 , . . . , n .( m , t )
( t , m ) = 1
, ,t − 1 = u
t u ≡ 1 ( m o d m )
. ,1 ≤ u < m A B
.m , u
-
m > m a x A
, ,m > Σ i = 1 n a i B A .m , t
- — , , , .
密码系统的创建者选择了这样的系统
邮件拦截器必须解决背包问题才能进入
并解决背包进入问题
以下引理说明了为什么所有这些方法都有效。
引理。让我们假装
(i)背包问题
(ii)背包问题
(iii)如果有解决方案,请输入
证明(第104页)
示例
考虑一个超增长序列;该序列不存在。例如{1、2、4、10、20、40}。模数必须大于序列中所有数字的总和,例如110。乘数不应与模数有共同的因数。因此,让我们选择31。
因此,我们计算了公钥:{31、62、14、90、70、30}和私钥– {1、2、4、10、20.40}。
现在让我们尝试发送一个二进制序列:100100111100101110
公钥的一些好处
- 当使用公共密钥密码系统时,双方不见面,他们甚至可能彼此不认识并且使用任何形式的通信。
- 密钥长度。在对称密码学中,如果密钥长于原始消息,则不会获得真正的收益。对于公共密钥密码系统,加密密钥的长度无关紧要,因为它是公共的和公共的。因此,解密密钥的长度不是很重要(接收者仅将其存储在秘密的地方)
历史
长期以来,背包式密码系统由于其NP完整性和高速的加密和解密而被认为是最有吸引力和最有前途的密码系统。许多方案都使用背包问题(有各种变体),以下只是其中的几种:紧凑背包问题,乘法背包问题,模块化背包问题,矩阵覆盖问题,群分解问题……
不幸的是,大多数方案都容易受到影响攻击。事实证明,尽管这个问题被称为NP完全问题,但基于背包问题设计安全的密码系统并非易事。大多数背包密码系统已被黑客入侵。尽管如此,与整数分解和离散对数相反,一般背包问题(解决方案)是一个经过证明的NP完全问题。
有人认为有一天可以发明多项式时间算法来解决整数分解和离散对数问题,而背包问题仍然是NP完全的。
这里有几个“ BUT”。
首先,NP完整性基于最坏情况分析,其次,NP完整性是普遍问题的特征,而不是特定情况。这意味着,如果考虑平均复杂度,则背包问题可能很简单。
该材料是根据以下文献制备的:
(1) A. Salomaa。公钥密码术。 -斯普林格出版社(1990)。 75-82,第101-111页
(2)闵健来 背包加密系统:过去和未来-加利福尼亚大学,2001年
(3)王保苍,吴谦宏,胡玉璞。基于背包的概率加密方案。2007
(4) - (5)