Jyny / TLS1.2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

參考資料

    第一週用的投影片 https://goo.gl/7AZpoz
    第二週螢幕錄影一 https://www.youtube.com/watch?v=4UOk38ni0Lc
    第二週螢幕錄影二 https://www.youtube.com/watch?v=o6YKZa3UdIw
    TLS 1.2 標準文件 https://tools.ietf.org/html/rfc5246
    SSL/TLS 維基百科 https://en.wikipedia.org/wiki/Transport_Layer_Security
    Python3 語言文件 https://docs.python.org/3/


作業:拆解 TLS 封包

    撰寫一個程式(建議使用 Python 3 語言)去拆解、解密 TLS 封包

    你必須要讓助教知道如何運行你的程式,特別是當你使用的程式語言不是
    Python 3 時,或者當你的程式需要用到外部、第三方函式庫時。


程式要求

    1.  主程式要接受 5 個 command-line 參數,這 5 個參數都是檔案路徑,
        他們的意義如下列所示:

            a. input file 1: recorded client-to-server traffic
            b. input file 2: recorded server-to-client traffic
            c. input file 3: server long-term RSA private key
            d. output file 1: decrypted client-to-server traffic
            e. output file 2: decrypted server-to-client traffic

        正常運作的程式,會從前三個檔案讀取資料,並把結果寫入後兩個檔案

    2.  假設雙方協議的 SSL/TLS 版本是 TLS 1.2 而 cipher suite 則是
        TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)


範例輸入輸出

    在 test1/ 目錄之下有 in1 、 in2 、 in3 三個檔案,分別為客戶端發出的封包、
    伺服器端回覆的封包、伺服器端的 RSA 私鑰。假如 decoder.py 程式已經完成了,
    想要解密 TLS 流量,可以下這個指令:

        python3 decoder.py test1/in1 test1/in2 test1/in3 test1/out1 test1/out2

    如此一來 decoder.py 程式就會將解密後的結果寫入 test1/out1 與 test1/out2
    兩個檔案。如果要檢驗答案是否正確,可以用 diff 指令來做到:

        diff -q test1/out1 test1/out1_answer

        diff -q test1/out2 test1/out2_answer

    如果給 diff 的兩個檔案內容不一致,它就會發出訊息告知。

    現在有 test1 、 test2 、 test3 、 test4 共四組測試資料,已附上解密後的答案。
    本作業的評分將會採用和它們類似的測資進行。


    2016/05/15 追註:

    新增一組測試資料 test5 該測資的 HTTP request 或 HTTP response 大小
    超過 16 KiB 因此 ApplicationData 必然會橫跨數個 records,請注意這種情況。


參考程式 decoder.py 有三個函式可能對你有幫助:

    TLS_PRF

        實作了 TLS 的 pseudorandom function (RFC 5246 Section 5)

    RSA_DECRYPT

        實作了 RSA 解密

    AES128CBC_DECRYPT

        實作了 AES-128 的 CBC mode 解密


注意事項

    在 decoder.py 中負責密碼學運算的 RSA_DECRYPT 與 AES128CBC_DECRYPT 這
    兩個函式都呼叫了一個名為「 openssl 」的外部程式。在 Linux 作業系統中,
    通常 openssl 會安裝到 /usr/bin/openssl 這個位置。

    如果你使用的不是 Linux 作業系統,參考程式中的那兩個函式就不能用了,
    你需要找 RSA / AES-128-CBC / HMAC-SHA-256 等密碼學運算的函式庫來使用。

    撰寫程式的過程中,記得常常做備份,以免不小心把辛苦的成果都銷毀了。

About


Languages

Language:Python 100.0%