由於排版不理想,因此直接用兩個文檔承載,有什麼不便,還請擔待。
killBase -- 密碼學(一) 傳送門html
1. **對輸入的密鑰進行變換**。 用戶的64bit密鑰,其中第8, 16, 24, 32, 40, 48, 56, 64位是校驗位, 使得每一個密鑰都有奇數個1。因此密鑰事實上是56位。對這56位密鑰進行以下表的換位。 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4, 表的意思是第57位移到第1位,第49位移到第2位,...... 以此類推。變換後獲得56bit數據,將它分紅兩部分,C[0][28], D[0][28]。 2. **計算16個子密鑰**,計算方法C[i][28] D[i][28]爲對前一個C[i-1][28], D[i-1][28]作循環左移操做。16次的左移位數以下表: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (第i次) 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 (左移位數) 3. **串聯**計算出來的C[i][28] D[i][28] 獲得56位,而後對它進行以下變換獲得48位子密鑰K[i][48] 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32, 表的意思是第14位移到第1位,第17位移到第2位,以此類推。在此過程當中,發現第9,18,22,25, 35,38,43,54位丟棄。 4. 對64bit的明文輸入進行換位變換。換位表以下: 58, 50, 12, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 表的意思就是第一次變換時,第58位移到第1位,第50位移到第2位,...... 依此類推。獲得64位數據,將這數據先後分紅兩塊L[0][32], R[0][32]。 5. 加密過程,對R[i][32]進行擴展變換成48位數,方法以下, 記爲E(R[i][32]) 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1, 6. 將E(R[i][32])與K[i][48]做異或運算,獲得48位數,將48位數順序分紅8份,6位一份,B[8][6]。 7. 使用S[i]替換B[i][6]。過程以下: 取出B[i][6]的第1位和第6位連成一個2位數m, m就是S[i]中對應的行數(0-3),取出B[i][6]的第2到第5位連成一個4位數n(0-15),n就是S[i]中對應的列數,用S[i][m][n]代替B[i][6]。S是4行16列的對應表,裏面是4位的數,一共有8個S,定義以下: S[1]: 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, S[2]: 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, S[3]: 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, S[4]: 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, S[5]: 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, S[6]: 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, S[7]: 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, S[8]: 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11, 8. 將從B[i][6]通過S獲得的8個4位數連起來獲得32位數。對這個數進行以下變換: 16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25, 獲得的結果與L[i][32]做異或運算,把結果賦給R[i][32]。 9. 把R[i-1][32]的值賦給L[i],從5開始循環。直到K[16][48]結束。 10. 將最後的L,R合併成64位,而後進行以下轉化獲得最後的結果。這是對第4步的一個逆變化。 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25
因爲以前看過 https 是 由 secure socket layer 實現的。 也是經過 公鑰私鑰 保證其安全性,因此在學習這篇文章的時候,就想 https 是由哪一種 加密算法 作爲其 底層實現的呢。 所以,就有了下面這部分。java
關於 https 與 http 的區別 請看個人這篇博客,再也不贅述。網絡基礎知識程序員
原理:算法
瀏覽器把自身支持的一系列Cipher Suite(密鑰算法套件,後文簡稱Cipher)[C1,C2,C3, …]發給服務器;segmentfault
服務器接收到瀏覽器的全部Cipher後,與本身支持的套件做對比,若是找到雙方都支持的Cipher,則告知瀏覽器;windows
瀏覽器與服務器使用匹配的Cipher進行後續通訊。若是服務器沒有找到匹配的算法,瀏覽器(以 Chrome 56爲例)將給出錯誤信息:瀏覽器
下面講一下如何分析。安全
準備: 經過能夠抓取網絡包的工具,這裏經過 Wireshark 分析。關於wireshark 的介紹請點擊這裏.查看瀏覽器發送給服務器的 Ciper服務器的 Ciper服務器
流程:網絡
瀏覽器首先發起握手協議, 一個'Client Hello'消息,以下圖,按照Protocol協議順序排序,而後,找到Client Hello,選中,依次查找 'Secure Sockets Layer' -> TLSv1.2 Record Layer -> Handshake protocal ->Ciper Suites.
能夠看到, Cipher有不少。總共16,第一個是Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)。
若是按照順序繼續尋找第一個 Info 爲'Sever Hello' 的報文,能夠找到相應的Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) 。.
Cipher介紹:
密鑰交換算法,用於決定客戶端與服務器之間在握手的過程當中如何認證,用到的算法包括RSA,Diffie-Hellman,ECDH,PSK等
加密算法,用於加密消息流,該名稱後一般會帶有兩個數字,分別表示密鑰的長度和初始向量的長度,好比DES 56/56, RC2 56/128, RC4 128/128, AES 128/128, AES 256/256
報文認證信息碼(MAC)算法,用於建立報文摘要,確保消息的完整性(沒有被篡改),算法包括MD5,SHA等。
PRF(僞隨機數函數),用於生成「master secret」。
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b):
基於TLS協議
使用 ECDHE,ECDSA做爲密鑰交換算法
加密算法 AES(密鑰與初始向量的長度爲128)
MAC 算法 SHA
總結:
Client端密鑰算法套件[C1,C2,C3],Server端密鑰算法套件[C4,C2,C1,C3],
則,IIS[(Internet Infomation Services)](),C2將被優先返回
問題:第一次使用 wireshark 的時候,不顯示接口。緣由是。。。
剛開始使用 在windows 上須要 winpacp 而且開啓 npf 服務。
注: 若是 沒有安裝 winpacp ,想直接 經過 net start npf 開啓服務,將會提示。 發生系統錯誤2
winpacp 安裝 。。。
這裏是下載網站
直接安裝便可。
開啓 npf 服務
打開 cmd ,輸入 net start npf
,提示:服務已經啓動。
進入界面,選擇相應的網卡。
這裏,能夠經過 網絡鏈接 看出來。
因此,個人是無線網絡鏈接。
最終界面
WireShark 主要分爲這幾個界面
Display Filter(顯示過濾器), 用於過濾
Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不一樣,表明
Packet Details Pane(封包詳細信息), 顯示封包中的字段
Dissector Pane(16進制數據)
Miscellanous(地址欄,雜項)
發現排版,好像是有問題的,閱讀效果不理想,能夠去個人我的博客中。
都看到這裏了,點個關注,點波贊再走,QAQ。
你的小手輕點,是我最大的動力哦。
一隻想當程序員的1米88處女座大可愛如此說。