1.背包密码系统简介
当我们谈论背包密码体制时,我们首先会思考这个密码体制为什么和背包有什么关系。背包这个词来自于作者在1978年提出的MH背包问题。这个问题的大意是,有很多不同重量的物品,可以从中任意选取n件物品放入一个背包中。背包中物品的总重量和物品堆放情况是公开的;但是,所选物品的种类是不会公开的。针对这个问题,作者和合著者设计了一种利用背包问题来加密信息的方法。由于加密算法涉及到背包问题,背包密码因此得名。
2.背包加密算法原理
背包加密算法的整体思想是这样的:如果A要发送一个消息,A首先要有一个私钥,这个密钥是通过背包问题传递的。私钥可以产生公钥,发送消息前必须用公钥加密。消息的合法接收者使用私钥和其他已知信息解密。这就是背包加密算法的整体思想。
3.背包加密算法步骤3.1:构造递增序列背包
背包问题中,如果物品重量列表是一个超递增序列,这个问题很容易解答。解决超递增序列背包问题有几个步骤:假设有一个背包,且已知背包的重量。将背包的重量与已知的超递增序列中的最大值进行比较,如果背包的重量小于这个数,那么这个数不在背包中,如果重量大于等于这个数,那么这个数在背包中。用背包的重量减去这个数,继续将结果与序列中的下一个数进行比较,重复比较,直到比较完成。如果背包总重量减为0,那么背包问题就解决了,否则无解。
3.2 根据私钥构造公钥
3.3 使用公钥加密
通过私钥构造公钥,当我们得到公钥之后,就开始使用公钥对数据进行加密。假如我们得到一个二进制数据,背包加密算法加密这个二进制数据的主要过程为:
3.4 解密
4 背包密码体制的实现 4.1 由私钥构造公钥
def create_pubkey(data):
# 构造m 此时m应大于超递增序列的所有和
# m = sum(data) + 2
# m = 250
m =