sage之离散对数求解

sage中求解离散对数我目前知道的四个函数:

(1)discrete_log:通用的求离散对数的方法:discrete_log(a,base,ord,operation)

(2)discrete_log_rho:求离散对数的Pollard-Rho算法:discrete_log_rho(a,base,ord,operation)

(3)discrete_log_lambda:求离散对数的Pollard-kangaroo算法(也称为lambda算法):discrete_log_lambda(a,base,bounds,operation)

(4)bsgs:小步大步法:bsgs(base,a,bounds,operation)

参数说明:求解以base为底,a的对数;ord为base的阶,可以缺省,operation可以是'+'与'*',默认为'*';bounds是一个区间(ld,ud),需要保证所计算的对数在此区间内。

下面分别举例使用这些函数对ElGamal的分析与Ecc的分析。

#生成64位的素数p作为模数,int为32位,超过int要在数字后加L
p=random_prime(2L**64)

#定义有限域GF(p)
G=GF(p)

#找一个模p的原根
gp ('znprimroot('+str(p)+')')
#输出Mod(rt,p),则x是模p的原根
g=G(rt)

#生成私钥
x=G(ZZ.random_element(p-1))

#公钥y=g^x mod p,由于已经定义在GF(p)上,因此g**x就是g^x mod p
y=g**x

#计算离散对数的通用方法
discrete_log(y,g)==x

#计算离散对数的lambda方法
discrete_log_lambda(y,g,(floor(ZZ(x)/2),2*ZZ(x)))==x

#小步大步法计算离散对数
bsgs(g,y,(floor(ZZ(x)/2),2*ZZ(x)))==x

上面是以discrete_log举例,discrete_log_rho参数列表与discrete_log一致,因此用法相同;只不过,由于discrete_log_rho是基于随机性的概率型算法,因此不一定每次都能找到,不过多一个方法总归是好的;其次,https://xz.aliyun.com/t/2780里面详细介绍了Pollard Rho算法,这个算法起作用是有条件的。

此算法适用于生成元的阶的素因子都是大数的情形,计算元素的阶的函数如下。

#加法阶
n=g.order();n
#乘法阶
n=g.multiplicative_order();n

可以看到加法阶比乘法阶大1。

下面介绍在椭圆曲线上求解离散对数。下例为2013年SECCON CTF quals 中的 Cryptanalysis。

a = 1234577
b = 3213242
n = 7654319
#有限域GF(n)上的椭圆曲线y^2 = x^3 + a*x + b mod n
E = EllipticCurve(GF(n), [0, 0, 0, a, b])
#生成元
base = E([5234568, 2287747])
#公钥
pub = E([2366653, 1424308])
#求解私钥,通用方法;注意这里的运算要换成加法
discrete_log(pub,base,operation='+')

#求解私钥,Rho方法;此情形Rho方法也可以求解,而且可以感觉到比通用方法要快
discrete_log_rho(pub,base,operation='+')

#求解私钥,lambda方法
discrete_log_lambda(pub,base,(floor(1584718/2),2*1584718),operation='+')

#小步大步法计算离散对数
bsgs(base,pub,(floor(1584718/2),2*1584718),operation='+')

 

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MATLAB SAGE算法(Simulated Annealing Globally Exploratory)是MATLAB中基于模拟退火算法的一个最优化算法。模拟退火算法是一种通用的随机搜索算法,主要用于解决不规则问题的最优解。SAGE算法则是模拟退火算法的一种改进,通过对潜在解的全局搜索,增加了搜索精度和效率,因此更适用于解决大规模、高维问题。 在使用SAGE算法时,需要定义一个目标函数,并设置一些重要参数。常见的参数包括退火策略、初始温度、降温速率、迭代次数等。算法运行时,首先会随机选择一个初始解,然后通过迭代过程不断更新当前解,直到达到算法终止条件。根据SAGE算法的特点,每次迭代时会随机选择一个邻域解,判断是否更优,并根据一定的概率接受或拒绝该解,并更新当前解。这个邻域解指的是当前解的一个紧密相邻的点,一般是在当前解的基础上加入一些随机扰动。 通过设置合理的参数和目标函数,SAGE算法能够在有限时间内找到局部最优解,并且运行效率和求解精度也相对较高。但是,这种随机搜索算法的求解过程往往受搜索空间大小、初始解和参数设置等因素影响较大,因此在应用中需要根据实际情况进行调参数,避免算法陷入局部最优解,或者搜索时间过长导致性能下降。 总体来说,MATLAB SAGE算法是一个高效而通用的优化工具,可用于在金融、科学、工程及其他各种领域中的最优化问题,并已得到广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值