密碼學|離散對數問題、計算量較大的二次方程求解(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

在這裏插入圖片描述

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