from CryptoUtilnumber import from CryptoPublicKey import RSAfrom hashlib import sha256import random os signal stringdef proof_of_work randomseedosurandom8 proof = joinrandomchoicestringascii_let
这是一道 RSA 签名的题目,要求我们给出一个错误的 RSA 密钥对,并让程序验证这个密钥对是否合法。
程序首先会让我们进行一个 proof of work,这个 proof of work 是计算一个字符串的 sha256 值,然后让我们输入这个字符串的前四个字符。如果前四个字符加上某个字符串的 sha256 值等于预先给定的 sha256 值,则 proof of work 通过。
接下来,程序要求我们输入两个 512 位的质数 p 和 q,然后通过检查这两个数是否为质数、是否不相等、是否等长,是否符合 RSA 密钥对的要求等等,来判断这个密钥对是否合法。
如果输入的参数合法,程序会使用 p 和 q 计算出 n,e 和 d,然后使用这些参数构造一个 RSA 密钥对。如果构造成功,则说明这个密钥对是合法的,程序会输出 “This is not a bad RSA keypair.” 并退出。
但是,我们可以输入一些非法的参数,例如 p 和 q 相等,或者 p 为质数但不满足某些条件,这些参数能够通过检查,但是无法构造出一个合法的 RSA 密钥对。在这种情况下,程序会抛出 ValueError 异常,并输出一个 flag。我们可以利用这个漏洞来获取 flag
原文地址: https://www.cveoy.top/t/topic/fDiV 著作权归作者所有。请勿转载和采集!