密码学|离散对数问题、计算量较大的二次方程求解(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。
2x13mod23 2^x≡13mod23\quad

x=discrete_log(mod(13,23),mod(2,23))
#或discrete_log(13,mod(2,23))
print(x)

2.sagemath求逆元

ab1(modp)a∗b≡1(modp)

b=inverse_mod(a,p)
print(a*b%p) #1

3.sagemath扩展欧几里得算法

扩展欧几里得算法:给予二整数 a 与 b, 必存在有整数 x 与 y 使得ax + by = gcd(a,b).

120+130=gcd(20,30)=10.-1*20 + 1*30 =gcd(20,30)=10.

d,u,v=xgcd(20,30)
print("d:{0} u:{1} v:{2}".format(d,u,v))#d:10 u:-1 v:1

4.sagemath孙子定理(中国剩余定理)

孙子定理

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。

def chinese_remainder(modulus, remainders):
    Sum = 0
    prod = reduce(lambda a, b: a*b, modulus)
    for m_i, r_i in zip(modulus, remainders):
        p = prod // m_i
        Sum += r_i * (inverse_mod(p,m_i)*p)
    return Sum % prod
chinese_remainder([3,5,7],[2,3,2]) #23

5.sagemath求欧拉函数

print(euler_phi(71)) #70

6.sagemath输出表达式近似值

result=pi^2
result.numerical_approx()

7.sagemath素数分布(Pi(x))

xIn(x)π(x)\frac {x}{In(x)π(x)}

result=prime_pi(1000)/(1000/log(1000))
result.numerical_approx() #1.16050288686900

8.sagemath创建整数域中的椭圆曲线

y2=x3+a4x+a6y ^2 =x^3+a^4​x+a^6

输出所有整数点:

a4=2;a6=3;F=GF(7);
E=EllipticCurve(F,[0,0,0,a4,a6])
print(E.cardinality()) #6
print(E.points()) #[(0 : 1 : 0), (2 : 1 : 1), (2 : 6 : 1), (3 : 1 : 1), (3 : 6 : 1), (6 : 0 : 1)]

创建点:

point1=E([2,1])
point2=E([3,6])
print(point1+point2)#(6 : 0 : 1)
print(point1-point2)#(2 : 6 : 1)

sagemath在密码学中的使用方法
sagemath安装
sagemath在线环境


python z3库

我搞z3库搞了一晚上…
z3库不是微软开发的吗?怎么windows上配置老是出错…
我pip和微软推出的dll方式都试过了,一个是pip报错,另外一个是配置环境变量报错…
windows下安装Z3
于是转向kali linux 安装z3
linux下安装z3

git clone https://github.com/Z3Prover/z3.git
cd z3
python scripts/mk_make.py
cd build
make
sudo make install

这个安装好之后是这样的
在这里插入图片描述
然鹅我想作为python的模块使用
下载z3_solver-4.8.7.0-py2.py3-none-manylinux1_x86_64.whl文件之后

链接:https://pan.baidu.com/s/17jMA50B-oSdcj2nwsgL0aA
提取码:uhu3

python3 -m pip install z3_solver-4.8.7.0-py2.py3-none-manylinux1_x86_64.whl

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章