日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Sagemath在ctf密码学中的使用

發布時間:2024/8/24 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 Sagemath在ctf密码学中的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 基本的環和域

#整數域,有理數域和實數域
ZZ(3)
QQ(0.25)
RR(2^0.5)
#復數域
CC(1,2)
#生成虛數單位i
i=ComplexField().gen();(2+i)*(4+3*i)

#構造多項式環,返回具有給定屬性和變量名的全局唯一的單變量或多元多項式環
#定義在整數域上的多項式環R,變量為w;ZZ也可換成其他數域
R.<w>=PolynomialRing(ZZ);R
(1 + w)^3

#有限環
RN=IntegerModRing(63)
FR=Integers(17);FR
#自身的代數擴展;exR=FR[w]/(w^2+3)
exR=FR.extension(w^2+3);exR
#以python整數的形式返回所有可逆元素的列表
FR.list_of_elements_of_multiplicative_group()
#假設環的乘法群是循環的,返回這個環的乘法群的生成元
FR.multiplicative_generator()
#返回這個環的一個隨機元素
FR.random_element()
#上述幾種方法對如下的域同樣支持

#有限域
#素數域
G1=GF(37);G1
#伽羅瓦域
G2=GF(3^5);G2

2. 數論基本函數

#同時求商與余數
q,r=divmod(12,5)

#求公約數
d=gcd(12,5)

#擴展的歐幾里得算法
d,u,v=xgcd(12,5)

#12在模5下的逆
u=inverse_mod(12,5)

#生成[lb,ub)之間的隨機素數,注意ub在前,lb在后,lb可缺省為0
#可通過這種方式生成128位的隨機素數
p=random_prime(2L**128,2L**127)

#判斷是否為素數
is_prime(65537)

#第20個素數
nth_prime(20)

#計算x^y mod n
z=power_mod(12,5,17)

#歐拉函數
euler_phi(111)

#中國剩余定理,A=[a1,...,an],M=[m1,...,mn]
#ai=x mod mi,i=1,...,n
crt([1,2,3,4],[7,5,12,23])

#求自身的n次根
FR(12).nth_root(7,all='True')

#求多項式的根,roots方法必須作用在域上
R.<x>=PolynomialRing(G1)
xt=G1(12)
yt=xt^6
f=x^6-yt
f.roots()

3. 線性代數

#定義矩陣,默認定義在實數域
A = matrix([[1,2,3,5],[3,2,1,2],[1,1,1,0],[3,7,2,2]])
A^-1
#定義在其他域上的矩陣,如有限域
A = matrix(GF(13),[[1,2,3,5],[3,2,1,2],[1,1,1,0],[3,7,2,2]])
A^-1
#可以看到兩個逆矩陣不一樣

#定義向量,定義在有限域,默認定義在實數域
w = vector(GF(13),[1,1,4,3])
Y=A*w;Y
Z=w*A;Z

#解線性方程組AX=Y
X = A.solve_right(Y);X
#也可以使用符號
AY
#解線性方程組XA=Y
X = A.solve_left(Z);X

#格基約減
A = matrix([[1,2,3,5],[3,2,1,2],[1,1,1,0],[3,7,2,2]])
#LLL算法
A.LLL()
#BKZ算法
A.BKZ()

4. 離散橢圓曲線

以國密SM2算法使用的橢圓曲線為例;

p=ZZ('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF',16)
a=ZZ('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC',16)
b=ZZ('28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93',16)
#有限域GF(p)上的橢圓曲線y^2 = x^3 + a*x + b mod p
E=EllipticCurve(GF(p),[0,0,0,a,b])
#基點
g=E([ZZ('32c4ae2c1f1981195f9904466a39c9948fe30bbff2660be1715a4589334c74c7',16),ZZ('bc3736a2f4f6779c59bdcee36b692153d0a9877cc62a474002df32e52139f0a0',16)])
#基點的階
n=ZZ('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123',16)
#生成密鑰
sk=random_prime(2*n//3,n//3)
#生成公鑰
G=sk*g

5. 離散對數

前言:求解以base為底,a的對數;ord為base的階,可以缺省,operation可以是'+'與'*',默認為'*';bounds是一個區間(ld,ud),需要保證所計算的對數在此區間內。

#通用的求離散對數的方法
x=discrete_log(a,base,ord,operation)

#求離散對數的Pollard-Rho算法
x=discrete_log_rho(a,base,ord,operation)

#求離散對數的Pollard-kangaroo算法(也稱為lambda算法)
x=discrete_log_lambda(a,base,bounds,operation)

#小步大步法
x=bsgs(base,a,bounds,operation)

6. coppersmith算法

coppersmith算法介紹鏈接

使用sage實現coppersmith相關攻擊,GitHub鏈接

最后,sage的官方文檔鏈接

總結

以上是生活随笔為你收集整理的Sagemath在ctf密码学中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。