Before all
感覺今天晚上可以去開箱HARD的Crypto玩…
就先隨便丟點owob
Secure Signing
server.py
1 | from hashlib import sha256 |
觀察一下,會發現xor
函數會根據長度比較小的資料進行xor,所以可以確認長度後在本地自己枚舉hash值找一樣的:D。
exp.py
1 | from pwn import * |
Remeeting The Wheel
source.py
1 | from random import randint |
output.txt
1 | Bob :: Hi Alice, here is my public key: |
看起來不能直接暴力…
想一下,會發現只要枚舉介於 $2^{20}$ ~ $2^{21}$ 的數字之e次方mod n,然後透過枚舉其中一個數來尋找另一個(模逆元)就能在正常時間複雜度下完成。
就是 Meet in the Middle(?)
source.py
1 | from Crypto.Util.number import * |
Quadratic Points
server.py
1 | from Crypto.Util.number import getPrime, bytes_to_long |
第一關要解二次函數,其實我不太確定在三個數字都<60的Case求高精度要怎麼做,但我就直接暴力😀(清澈的眼神)
exp.py
1 | from pwn import * |
再來是ECC的部分,因為flag不只40 bytes所以先用exp.py抓好幾個紀錄。
run.py
1 | import os |
最後根據log.txt,因為每個數都很小,利可以直接用sage math的discrete_log求解,再CRT回去就可以。
solve.py
1 | from Crypto.Util.number import * |