2018/05/15

[Cryptography] pycrypto筆記: CBC Padding Attacks之程式作業



在AES CBC工作模式下,因為有padding的關係,會使得駭客可以用padding來進行資料的竊取。這次的作業是要利用CBC的Padding來把獲取已知的加密的訊息。



概念如上圖所示,我們要在倒數第二個訊息區塊,也就是c[0],從最後一個byte開始,利用G1 xor 0x01的方式,G1從0x00-0xff,來看server端所給的回應,如果在server端成功解出我們送給server的訊息,其訊息結尾就會是0x01,也就是在CBC工作模式下,padding為1的結尾。所以最多在256次的嘗試下,就可以獲得最後一個byte,也就是G1。

接著,再往倒數第二個byte做猜測,要用0x0202 xor 0xG2G1,依序下去,直到完成整個區塊16 bytes為止。

但值得注意的是,題目說如果猜測正確,server端會回傳HTTP 404,猜測錯誤則是HTTP 403,但是老師所給的範例:

http://crypto-class.appspot.com/po?er=f20bdba6ff29eed7b046d1df9fb7000058b1ffb4210a580f748b4ac714c001bd4a61044426fb515dad3f21f18aa577c0bdf302936266926ff37dbf7035d5eeb4

這個網址本身並不會回傳任何HTTP Code,所以要注意 g xor 0 x padding後,其值為0 x 0...0的結果,因為這結果與加密訊息CT取互斥運算後,不會改變CT的值,所以Server不會給你這次的猜測任何HTTP code。

因為這個原因,讓我程式跑到一半就沒繼續跑了,這部份得注意。尤其是理論上第一個byte解出來,就代表這次訊息的padding值和個數,譬如第一個為0x02,那下一個一定也是0x02,因為padding為2的結尾是0x0202,所以用這些應該都可以快速驗證自己寫的是否有問題。

總結來說,完成作業後,對於CBC的padding會有很深刻的認知,因為這個存在很高的風險。另外每次解密出來的訊息都滿有趣的,這次是"The Magic Words are Squeamish Ossifrage" (挑食的禿鷹),好像研究或者教導密碼學的學者們都很喜歡這類的話語。

沒有留言:

張貼留言