#P6962. [NEERC 2017] Knapsack Cryptosystem
[NEERC 2017] Knapsack Cryptosystem
Description
Merkle-Hellman 背包密码系统是由 Ralph Merkle 和 Martin Hellman 于 1978 年发明的最早的公钥密码系统之一。以下是其描述:
Alice 选择 个正整数 ,使得每个 ,一个大于所有 之和的正整数 ,以及一个与 互质的正整数 。这 个整数是 Alice 的私钥。
然后 Alice 计算 mod 。这 个整数是 Alice 的公钥。
知道她的公钥后,Bob 可以向 Alice 传输一个 位的消息。为此,他计算 ,即在消息中第 位为 1 的位置上对应的 的和。这个值 是加密后的消息。
注意,窃听者 Eve 知道加密消息和公钥,必须解决一个(可能很难的)背包问题实例才能找到原始消息。同时,在收到 后,Alice 可以在线性时间内计算出原始消息;我们将其留给你作为练习。
在这个问题中,你需要处理 Merkle-Hellman 背包密码系统的实现,其中 Alice 选择了 ,出于显而易见的性能原因,并公布了此信息。由于每个人都知道她的 ,她要求 Bob 发送给她取模 的计算值 以简化通信。
你需要破解这个实现。给定公钥和一个加密消息,恢复原始消息。
Input Format
第一行包含一个整数 。
接下来的 行中,每行包含一个整数 。
最后一行包含一个整数 mod —— 取模 的加密消息 ,其中 mod 。
给定的序列 是描述的实现中的有效公钥,给定的值 mod 是有效的加密消息。
Output Format
输出恰好 位( 或 数字)——原始消息。
5
10
20
50
140
420
440
01001
Hint
时间限制:3 秒,内存限制:512 MB。
题面翻译由 ChatGPT-4o 提供。
京公网安备 11011102002149号