密码学|离散对数问题、计算量较大的二次方程求解(sagemath与python z3库的使用)

前言

网鼎杯划水,害,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 2x13mod23

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) ab1(modp)

b=inverse_mod(a,p)
print(a*b%p
  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值