【密码学Sage代码】椭圆曲线加密/解密(基于《密码编码学与网络安全——原理与实践(第七版)》)
教材内容:
实践的Sage代码:
#【静水流深Sage代码】使用椭圆曲线密码体制进行加密/解密
print("使用《密码编码学与网络安全——原理与实践(第七版)》的P228页的【椭圆曲线加密、解密】")
q = 257 # 书上选区素数 q=257
F = GF(q)
print(F)
print("素数域的阶: {0}".format(F.order()))
E = EllipticCurve(F, [0,0,0, 0, -4]) # 书上: Eq(a,b) = E257(0, -4)
print("【椭圆曲线E257(0, -4)】:{0}".format(E))
#获取基点坐标
print("默认的基点坐标:{0}".format( E.gens() ))
print("G = E.gens()[0] 中的G:{0}".format( E.gens()[0] ))
#获取基点的阶
print("椭圆曲线的【阶】,又叫【点群阶】,就是椭圆曲线密码体制中的【点】的个数。【注意:个数包括无穷远点o】")
q = E.order()
print("椭圆曲线的【阶】: {0}".format(q))
allPoints = E.points()
print("椭圆曲线上的所有点:{0}".format(allPoints))
print("(仅仅是试验一把)我们可以这么做 ==> 从椭圆曲线上任意随机选择一个点:")
print( E.points()[randint(2, E.order()-1)] )
print("") #打印空行
print("根据P228页:准备挑选【基点G(2,2)】,该基点G(2, 2)是Alice盒Bob共用的:")
G = E(2, 2)
print("挑选的【基点G】:{0}".format( G ))
print("Alice要给Bob发送**密文**,需要Bob的公钥!")
print("而Bob的公钥构造方法是: 一个随机数 * 基点G")
PrivateB &