ISC2016训练赛--hardRSA

先上图

 我开始在网上找了许久,没找到详细的题解,于是就自己肝出来后与大家分享一下,如果大家有更好的方法,也可以多交流一下

题目给了flag.enc与pubkey.pem两个文件

 

对于pubkey.pem,我们可以用linux中命令:openssl rsa -pubin -in public.pem  -text -modulus

来提取n与e,再从flag.enc中提取出c

以下是目前已知信息:

c= 26174096085413982127350513827814096003393781011967421505411183900736523574240

e=2

c很容易分解,用yafu很容易分解,直接上p,q

p = 275127860351348928173285174381581152299
q = 319576316814478949870590164193048041239

到这里会发现,这好像是RSA低加密指数攻击,我上脚本跑了一下,没跑出来(实在是不想等了)

于是稍微整理了一下已知信息,会得出

m^2\equiv c (modn)        c=p*q

推出\left\{\begin{matrix}m^2\equiv c(modp) & & \\m^2\equiv c(modq) & & \end{matrix}\right.学过信息安全数学基础的同学一看???这不是书上例题求解同余式吗,首先解二次剩余,我使用的Tonelli-Shanks算法,大家感兴趣可以去自己了解一下,这里我就直接用脚本了嘿嘿嘿,然后就使用中国剩余定理求解了,m有四种情况(不清楚的同学可以看一下信息安全数学基础的书或者数论,我在这里偷个懒直接过了)

上代码

from Crypto.Util.number import *
from sympy.ntheory.modular import crt
import gmpy2
c = 26174096085413982127350513827814096003393781011967421505411183900736523574240
p = 275127860351348928173285174381581152299
q = 319576316814478949870590164193048041239


#shanks算法,x^2=n mod p,已知,n,p求x

def Legendre(n, p):
    return pow(n, (p - 1) // 2, p)


def Tonelli_Shanks(n, p):
    assert Legendre(n, p) == 1
    if p % 4 == 3:
        return pow(n, (p + 1) // 4, p)
    q = p - 1
    s = 0
    while q % 2 == 0:
        q = q // 2
        s += 1
    for z in range(2, p):
        if Legendre(z, p) == p - 1:
            c = pow(z, q, p)
            break
    r = pow(n, (q + 1) // 2, p)
    t = pow(n, q, p)
    m = s
    if t % p == 1:
        return r
    else:
        i = 0
        while t % p != 1:
            temp = pow(t, 2 ** (i + 1), p)
            i += 1
            if temp % p == 1:
                b = pow(c, 2 ** (m - i - 1), p)
                r = r * b % p
                c = b * b % p
                t = t * c % p
                m = i
                i = 0
        return r

result1 = Tonelli_Shanks(c, p)#解出m^2=c(modp),求得一解为result1,其另外一解为p-result1
result2 = Tonelli_Shanks(c, q)#同上
#第一种情况
l1=[result1,result2]
l2=[p,q]
m=crt(l2,l1)
print(long_to_bytes(m[0]))
#第二种情况
l1=[p-result1,result2]
l2=[p,q]
m=crt(l2,l1)
print(long_to_bytes(m[0]))
#第三种情况
l1=[p-result1,q-result2]
l2=[p,q]
m=crt(l2,l1)
print(long_to_bytes(m[0]))
#第四种情况
l1=[result1,q-result2]
l2=[p,q]
m=crt(l2,l1)
print(long_to_bytes(m[0]))

 得出flag:PCTF{sp3ci4l_rsa}

这题不知道有没有大佬用RSA低加密指数攻击脚本跑出来,反正我试了一下没出来,文章如果有什么错误的地方还请大家多多指正!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您尝试重新启动 isc-dhcp-server 服务时,如果出现“Job for isc-dhcp-server.service failed because the control process exited with error code”的错误消息,则表示 isc-dhcp-server 服务无法正常启动。要解决此问题,您可以执行以下步骤: 1. 检查 /etc/dhcp/dhcpd.conf 文件是否存在,并确保其格式正确。您可以使用以下命令检查配置文件: ``` sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf ``` 如果此命令返回任何错误,请修改配置文件并重新运行命令,直到不再出现错误。 2. 检查 /etc/default/isc-dhcp-server 文件中的变量是否正确设置。确保 DHCPDv4_CONF 和 DHCPDv6_CONF 变量中的接口名称正确,并且没有任何语法错误。 3. 确保您的服务器上没有其他 DHCP 服务器正在运行。如果您的服务器上已经运行了其他 DHCP 服务器,则 isc-dhcp-server 服务将无法启动。您可以使用以下命令停止其他 DHCP 服务器: ``` sudo systemctl stop dnsmasq.service ``` 然后再尝试启动 isc-dhcp-server 服务。 4. 检查系统日志以获取有关服务启动失败的更多详细信息。您可以使用以下命令查看服务的状态和日志: ``` sudo systemctl status isc-dhcp-server.service sudo journalctl -xeu isc-dhcp-server.service ``` 这将显示与 isc-dhcp-server 服务相关的所有系统日志条目,以帮助您进一步诊断问题。 通过执行上述步骤中的一个或多个,您应该能够解决 isc-dhcp-server 服务启动失败的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值