Challenge
題目:
1 | |
檔案 : task.py
Solution
看完整個程式碼後,你可以發現加密時呼叫的 bitchain(cb, state=0) 起始 state 是 0 ,而拿出 b = 0,ns = [1,7]
每呼叫一次 bitchain ,雖輸入了一串 cb 但是僅處理第一個 bit : b0
b 會與輸入的 b0 做 xor 而輸出 cipherns 則以 b0 的值決定下一個 P-table 的 index
1 | |
稍微研究一下輸出或是 Ptable 都可以發現,無論 ns 怎麼從 Ptable 拿,一定會變成 01010101010101010101010101 ...
任何數字傳入 bitchain 相當於 xor 了一個 01010101010101010 ...
每加密四次會成為一個尋環,而該提加密了 100 次。
亦即,如果拿出任意一對 (pt,ct) 都有 bitchain( swap(ct ^ key2) ) == pt 的結果
$\Rightarrow$ swap(ct ^ key2) = bitchain(pt)
$\Rightarrow$ ct ^ key2= swap(bitchain(pt))
$\Rightarrow$ key1 = swap(blockcipher(key2))