文章目录
前言
网鼎杯划水,害,3人组队结果我pwn拖了后腿…没能进下线了。 一手封神榜抬进了线下…
比赛过程做了两题Crypto,写个博客记录一下sagemath和python中z3库的用法。
sagemath用法
1.sagemath计算离散对数
离散对数问题可以描述为:给定一个质数p,和有限域Zp上的一个本原元a,对Zp上整数b,寻找唯一的整数c,使得a^c≡b(mod p)。一般的,如果仔细选择p,则认为该问题是难解的,且目前还没有找到计算离散对数问题的多项式时间算法。为了抵抗已知的攻击,p至少应该是150位的十进制整数,且p-1至少有一个大的素数因子。
RSA是基于大整数分解难题来保证算法安全性,RSA算法的安全性要远小于离散对数的安全性。
但是在求解上,二者有一些相同的地方。
简单来说,a^c≡b(mod p),在离散对数问题中,求的是c。但是在RSA中,就是要求a。
2 x ≡ 13 m o d 23 2^x≡13mod23\quad 2x≡13mod23
x=discrete_log(mod(13,23),mod(2,23))
#或discrete_log(13,mod(2,23))
print(x)
2.sagemath求逆元
a ∗ b ≡ 1 ( m o d p ) a∗b≡1(modp) a∗b≡1(modp)
b=inverse_mod(a,p)
print(a*b%p