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))