luogu#P9929. [NFLSPC #6] 挑战大数因子分解

[NFLSPC #6] 挑战大数因子分解

题目背景

NFLSPC #6 在即,来不了现场的 SolarPea 要把自己的题目的 std 发给能去现场的 PolarSea

为了防止有选手窃听他们的通信以获得 std,他们打算使用一个公钥加密算法来确保通信的安全性。

于是 SolarPea 使用了他在知乎上看到的有 “最大的加解密速度和安全性” 的算法,这个算法的安全性 “依赖于大数因子分解难题”:

你是一名拥有 factorization oracle 的参赛选手,并且你已经获得了公钥和明文。请你利用手上的 factorization oracle,破解出 std 吧。

题目描述

由于图片可能看不清,我们重新描述这个加密算法:

  • 假设 SolarPea 要给 PolarSea 发一个消息 MM',那么他们会进行如下的操作。
  • PolarSea 首先生成五个大整数 P,S4,S6,S7,S1P, S_4, S_6, S_7, S_1,使得 P<S6<S4PP < S_6 < S_4PS5=S4P+S6S_5 = S_4P + S_6 且 $(S_6\bmod P) ^ 3 < S_4 ^ 3 < S_1 ^ 3 < (S_1 + 1) ^ 3 < S_7 ^ 3 < P$,并计算 S3=S4P+S5S_3 = S_4P + S_5
  • 然后 PolarSeaS3,S5,S7,S1S_3, S_5, S_7, S_1 发给 SolarPea
  • SolarPea 拿到了 PolarSea 给他发的四个数。首先,他需要构造一个 MM 使得 S1<M<S7S_1 < M < S_7,并且和 PolarSea 商量好一个通过 MM 算出 MM' 的方法(例如若 MM' 为比较小的正整数,则可以令 M=M+S1M = M' + S_1),这个方法是不保密的,所以拿到 MM 就相当于拿到 MM' 了,所以你可以不用关心 MM' 而是只关心 MM
  • SolarPea 生成了两个满足 (S3S5)3<r<w(S_3 - S_5) ^ 3 < r < w 的数 w,rw, r,并计算 C=(S3S5)3w+MS5+r(S3S5)C = (S_3 - S_5) ^ 3w + MS_5 + r(S_3 - S_5),然后将 CC 发给 PolarSea
  • PolarSea 只需计算 $\frac{C \operatorname{\bmod} P}{(2S_5 - S_3) \operatorname{\bmod} P}$ 即可获得 MM

现在你截获了 PolarSeaSolarPea 之间的所有通信(即 S3,S5,S7,S1,CS_3, S_5, S_7, S_1, C),请你利用已知的信息破解出 MM

输入格式

第一行,读入四个整数 S3,S5,S7,S1S_3, S_5, S_7, S_1,表示公钥。

第二行,读入一个整数 CC,表示密文。

输出格式

输出一行,包含一个值在 S1<M<S7S_1 < M < S_7 的整数 MM,表示破解的明文。可以证明在给定限制下 MM 唯一。

7001 4001 7 5
1155511307999246176590006

6

11083610 7305110 52 32
4578384821991465584924042474394616310820101790

39

提示

样例 1 解释

生成的 P=1000P=1000S4=3S_4=3S6=1001S_6=1001S7=7S_7=7S1=5S_1=5。计算出的 S5=4001S_5=4001S3=7001S_3=7001

密文 M=6M=6。加密时选取的 w=42796713439376w=42796713439376r=15045364725522r=15045364725522,加密结果 C=1155511307999246176590006C=1155511307999246176590006

当然,这次加密是很弱的,因为 665577 中间的唯一整数。

数据范围与约定

对于所有数据, P<10500P < 10 ^ {500}C<P10C < P^{10}

  • 子任务 1(2020 分):P<106P < 10 ^ 6
  • 子任务 2(2020 分):P<1018P < 10 ^ {18}
  • 子任务 3(2020 分):PP 为质数。
  • 子任务 4(2020 分):所有数均为随机生成。
  • 子任务 5(2020 分):无特殊限制。

Source:NFLSPC #6 E by asmend