zoukankan      html  css  js  c++  java
  • ByteCTF2020密码学部分详解

    一、noise

    1. 题目信息

    附件是一个Python脚本,Gitee备份在此

    2.分析

    穷举通过proof_of_work之后,我们来看代码逻辑:

    • secret=getrandbits(1024),注意他自己实现的getrandbits(1024)实际上是生成长1017~1024位的随机数;
    • 对上述生成的secret,服务器最多只会与你交互64次;
    • 若op为'god',服务器会返回num * getrandbits(992) % secret,这里num也由我指定;
    • 若op为'bless',服务器会判断num与secret是否相等,若相等服务器返回FLAG。

    由于我至少要留一次交互机会发送我计算出的secret,因此我必须在63次交互内计算出secret!为下面叙述方便,声明如下记号:

    • 第 i 次发送的num记为(n_{i})
    • 第 i 次getrandbits(992)记为(g_{i})
    • 第 i 次接收的num * getrandbits(992) % secret记为(c_{i})

    记secret为(m),则:

    (c_{i} equiv n_{i}cdot g_{i} extrm{mod} m,i=1,cdots ,63)

    即存在(k_{i}in Z)(n_{i}cdot g_{i}=c_{i}+k_{i}cdot m)

    对等式两边模(n_{i})则有:

    (c_{i}+k_{i}cdot m equiv 0 extrm{mod} n_{i})

    若我能够控制(k_{i}=1),那么:

    (m equiv (n_{i}-c_{i}) extrm{mod} n_{i})

    同时得到多个如上形式的等式可考虑使用中国剩余定理解出(m)

    2.1 利用(n_{i})控制(k_{i})

    (m)(1/2)的概率长1024比特,(g_{i})(1/2)的概率长992比特;此时,要控制(k_{i}=1),即:

    [left{ egin{aligned} n_{i}cdot g_{i} &>m \ n_{i}cdot g_{i} &<2m end{aligned} ight. ]

    对上式两边取对数:

    [left{ egin{aligned} log(n_{i})+log(g_{i}) &>log(m) \ log(n_{i})+log(g_{i}) &<log(m)+1 end{aligned} ight. ]

    (log(g_{i})=991+alpha,log(n_{i})=32+eta,log(m)=1023+gamma;alpha,eta,gamma in (0,1))(其中(X=2^{alpha},Y=2^{gamma})服从([1,2])上的均匀分布)。上式改写为:

    [left{ egin{aligned} alpha+eta &>gamma \ alpha+eta &<1+gamma end{aligned} ight. ]

    综上,(P(k_{i}=1)=P(alpha+eta>gamma,alpha+eta<1+gamma)=P(2^{eta}cdot X>Y,2^{eta-1}cdot X<Y))

    直观地看,(eta)越大越有利于约束条件(alpha+eta>gamma)而不利于约束条件(alpha+eta<1+gamma),反之,(eta)越小越有利于约束条件(alpha+eta<1+gamma)而不利于约束条件(alpha+eta>gamma)

    注意到我可以判断是否满足约束条件(alpha+eta>gamma)—若(n_{i}cdot g_{i}<m)(c_{i}=n_{i}cdot g_{i})从而(c_{i}equiv 0 extrm{mod} n_{i})

    由此,我选择(n_{i})时应该尽量满足约束条件(alpha+eta<1+gamma),即(eta)应尽量小,为何不设置(eta)为0,理由如下:

    (eta=0)时,(P(k_{i}=1)=P(alpha>gamma,alpha<1+gamma)=P(alpha>gamma)=1/2)

    由上述:(n_{i})(33)比特,而(m)(1024)比特;由中国剩余定理可知:我们需要32个如下形式的同余式才能解出(m)

    (m equiv (n_{i}-c_{i}) extrm{mod} n_{i})

    要得到如上形式的同余式,即需要(k_{i}=1),而(P(k_{i}=1)=1/2),那么我得到(32)个如上形式的同余式“平均”需要(64)次交互,从而我没有发送secret的交互机会。

    综上,(eta)应在大于0的前提下尽量小!

    2.2值得注意的地方

    通过2.1,我知道了(n_{i})值多大时可以解出(m),结合中国剩余定理,同余式的模数之间是互素的,即我选择的(n_{i})需两两互素,因此(n_{i})不是取确定的值而是在一定的取值范围内取素数!

    3. 解题

    上述链接中的solve.py为解题的Python脚本,程序运行(成功时)结果如下:

    $ python3 solve.py
    [+] Opening connection to 182.92.153.117 on port 30101: Done
    [+] MBruteforcing: Found key: "l9a"
    success!
    95613903744255213782277288259288084531700829576284706991256294359734535087821985034716432798049279163174069238632678362676474782669781482301447573436852554131343117198284150657465643396718720128642929008328391123641254705186541184339088382138616985634723733544083949806487213357784626124965521562172300016682
    b'CONGRATULATIONS ByteCTF{Noise_i5_rea11y_ANN0YING}
    '
    [*] Closed connection to 182.92.153.117 port 30101
    

    注:此程序并非次次运行都能解出secret

    二、threshold

    1.题目信息

    附件是一个Python脚本,Gitee备份在此

    2.分析

    程序又臭又长,但其实考点特别简单,稍微使用一下欧拉定理即可!我来分析一下程序的逻辑:

    在类TSM2初始化时:

    (pks equiv [(sk+1)cdot sks]^{n-2} extrm{mod} n)

    接着在output_p1函数中:

    (s equiv (d_{1}cdot k_{1}cdot s_{2}+d_{1}cdot s_{3}-r) extrm{mod} n)

    其中(d_{1}=sks),而(r,s_{2},s_{3})均由我指定,那么我令(r=s_{2}=0,s_{3}=1),则得到的(s)即为(d_{1})在模(n)下的值,即:

    (s equiv sks extrm{mod} n)

    注意到(n)是素数,欧拉函数(phi(n)=n-1),显然((n-2,n-1)=1),即存在(xin Z,xcdot (n-2)equiv 1 extrm{mod} phi(n))

    由欧拉定理:(pks^{x}equiv [(sk+1)cdot sks]^{(n-2)x}equiv (sk+1)cdot sks extrm{mod} n)

    因此((sk+1)equiv pks^{x}cdot sks^{-1}equiv pks^{x}cdot s^{-1} extrm{mod} n),而密钥(sk)是小于阶(n)的,因此解出密钥(sk),有了密钥干什么不行呢,按照程序的要求,对消息b'Hello, Welcome to ByteCTF2020!'签名即可!

    3.解题

  • 相关阅读:
    微信小程序 单选按钮 最佳
    微信小程序 单选按钮的实现
    微信小程序 单选框实现
    Java Code To Create Pyramid and Pattern
    Java language
    npm Err! Unexpected end of JSON input while parsing near
    Node.js Express FrameWork Tutorial
    Higher-Order Function Examples
    Create First HTTP Web Server in Node.js: Complete Tutorial
    Node.js NPM Tutorial: Create, Publish, Extend & Manage
  • 原文地址:https://www.cnblogs.com/coming1890/p/13902043.html
Copyright © 2011-2022 走看看