BUUCTF [NCTF2019]childRSA(费马小定理)

该博客介绍了如何使用费马小定理解决[NCTF2019]childRSA问题。通过分析p和q的生成方式,结合费马小定理找到计算p的优化方法,最终通过模幂计算找到答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[NCTF2019]childRSA(费马小定理)

题目

from random import choice
from Crypto.Util.number import isPrime, sieve_base as primes
from flag import flag

def getPrime(bits):
while True:
  n = 2
  while n.bit_length() < bits:
      n *= choice(primes)	#primes为前10000个素数的列表
  if isPrime(n + 1):
      return n + 1

e = 0x10001
m = int.from_bytes(flag.encode(), 'big')
p, q = [getPrime(2048)
### BUUCTF NCTF2019 childRSA 解题思路 #### 背景介绍 题目涉及的是一个名为 `childRSA` 的 RSA 加密挑战。该加密算法基于公钥密码学中的 RSA 算法,但可能存在某些特定条件下的漏洞。 #### 题目分析 在解决此问题的过程中,注意到 n 可以通过工具 yafu 直接进行因数分解[^1]。然而,出题者的意图更倾向于考察参赛者对于费马小定理的应用能力。具体来说: - **费马小定理**指出如果 p 是质数且 a 不被 p 整除,则 \(a^{p−1}\equiv 1\ (\text{mod}\ p)\)[^2]。 - 对于给定的大整数 n=p*q (其中 p 和 q 均为大素数),\(φ(n)=(p-1)*(q-1)\)。当 e*d ≡ 1 mod φ(n) 成立时,可以利用 d 来计算私钥并解码消息。 #### 实际操作过程 为了求得私钥 d 并最终获得 flag,可以通过以下方式实现: 1. 使用 YAFU 或其他高效因子分解库尝试快速找到两个素因子 p, q; 2. 计算 \(\varphi(n)=pq-(p+q)+1\); 3. 找到满足 ed≡1(mod φ(n)) 的 d; 4. 应用 d 对已知的 ciphertext 进行解密运算得出 plaintext 即为所求 Flag。 此外,值得注意的一点是在选择用于构建模数 n 的素数过程中存在一定的特殊性质——即 primes 中所有素数相乘得到的结果恰好是 (p-1), (q-1) 的倍数。这表明即使 choice 函数可能随机选取相同数值的情况也并不会影响上述结论的有效性[^5]。 ```python from sympy import mod_inverse def decrypt_rsa(ciphertext, private_key_d, modulus_n): return pow(ciphertext, private_key_d, modulus_n) # Example usage with hypothetical values for demonstration purposes only. private_key_d = ... # Calculated using extended Euclidean algorithm based on phi(n). modulus_n = ... # Provided as part of the challenge setup. plaintext_flag = decrypt_rsa(given_ciphertext_value, private_key_d, modulus_n) print(f"The decrypted message is {plaintext_flag}.") ```
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值