InCTF | waRSAwの応用で、 LSBLeakAttackなんだけど、mod 2じゃなくてmod Xのとき
平文を進数で表す
この手法の嬉しい点として、Mが固定なら、途中でN, e, Cが変わっても問題なく動作する。リクエスト回数は 回
from Crypto.Util.number import * p = getPrime(512) q = getPrime(512) n = p * q e = 65537 d = inverse(e, (p-1)*(q-1)) m = getRandomNBitInteger(256) M = 2020 def oracle(x): return pow(x, d, n) % M c = pow(m, e, n) i = 1 z = oracle(c) while True: inv = inverse(M ** i, n) c2 = (c * pow(inv, e, n)) % n o = oracle(c2) ith_z = (oracle(c2) - (z * inv) % n) % M z = ith_z * pow(M, i) + z i += 1 print(z, m) if z >= m: print(z == m) break