實現HTTPS系列第二彈之【非對稱加密,公鑰私鑰,數字簽名,OpenSSL及HTTPS等概念簡介】

技術小胖子發表於2017-11-16

博文說明【前言】:   

     本文將通過個人口吻介紹有關非對稱加密,公鑰私鑰,數字簽名,OpenSSL及HTTPS等簡單概念,在目前時間點【2017年5月8號】下,所掌握的技術水平有限,可能會存在不少知識理解不夠深入或全面,望大家指出問題共同交流,在後續工作及學習中如發現本文內容與實際情況有所偏差,將會完善該博文內容。


    關於http以及web等概念,歡迎看我的上一篇博文:

實現HTTPS系列第一彈之【http,https,www,web等的區別含義】

博文連結地址:http://watchmen.blog.51cto.com/6091957/1922919


本文參考文獻引用連結:

1、https://www.zhihu.com/question/23341334

2、https://zh.m.wikipedia.org/zh-hans/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

3、http://baike.baidu.com/link?url=ida6z7jFkozSq–Z4EWORisdZAZRorbUd5PbTFRoTZug-oDdLzTq4nlzf1yM3AoaSSwiw_PBSpc7jgGse4Gd_IJ1B7cUDz7J-ddBIn4vfwo6ROUznaBPQ-2fvOLzlzYu

4、https://www.zhihu.com/question/25912483


  正文:


    HTTPS是一種網路協議,等於HTTP+TLS(由於歷史原因,SSL3.0之後就被TLS1.0替代了)。

    而OpenSSL是一套用於實現TLS/SSL協議的開源工具集,主要有兩個特性:

    1、實現了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2協議。

    2、實現目前常用的加密演算法。


    沒有一個非常精準的方法來判斷HTTPS是否使用openssl,保守估計至少70%以上的網站是使用openssl的。而windows系列的伺服器包括IIS,windows server等都是使用其他方式實現,沒有使用openssl


    原創案例-實戰分析1:

    接著拿我們宮保雞丁的例子來說,在這裡,宮保雞丁這道菜不放鹽的情況下就是HTTP(肯定能吃,但是不好吃),放鹽的情況下就是HTTPS,那麼這個多出來的S也就是鹽也就是我們的TLS協議,我們知道我們去超市買鹽,這個鹽的分類就多了,有便宜的有貴的,有海鹽有礦鹽等等等等。那麼這個openssl就是我們最經常買的銷量最大的中鹽集團(反正我是吃他家的海鹽),TLS協議就是中鹽集團生產的某款食鹽。

    總結:也即OpenSSL 是 SSL /TLS的一個開源實現,跟 HTTP 沒有關係。你說不加鹽的宮保雞丁和鹽有什麼關係?


    轉載案例-實戰分析2:

    我看到有人舉下面這個例子,覺得也是甚好,大家參考下:

    1、HTTPS與SSL的關係就像HTTP與TCP的關係

    2、SSL/TLS與OpenSSL的關係就像作業系統與Windows的關係


問題1:那麼為什麼現在不用SSL,要使用TLS協議了呢?

    SSL協議由美國 NetScape公司開發, 1996年釋出了V3.0版本(最新也是最後版本)。SSL 3.0 已經存在超過 15 年之久,目前絕大多數瀏覽器都支援該版本。通常使用者的瀏覽器都使用新版本的安全協議與伺服器進行連線,為了保持相容性,當瀏覽器安全協議連線失敗的時候,就會轉而嘗試老版本的安全協議進行連線,其中就包括SSL 3.0。但是在SSL協議級別,會出現Poodle攻擊,原理就是黑客故意製造安全協議連線失敗的情況,觸發瀏覽器從TLS往下降級使用 SSL 3.0,然後使用特殊的手段,從 SSL 3.0 覆蓋的安全連線下提取到一定位元組長度的隱私資訊。因此,在谷歌40版本之後,谷歌就取消對了SSL的向下支援。因此現在主流的加密協議使用的都是TLS

    以上內容簡單介紹了HTTPS及OpenSSL之間的關係,接下來我們講解加密相關知識


———————————————【分割線】————————————————


    那麼什麼非對稱機密,什麼是公鑰私鑰?


    非對稱加密:(asymmetric cryptography)也稱為公開金鑰加密(public-key cryptography)

這是一種密碼學演算法型別,在這種型別中,需要一對金鑰,一個是私人金鑰,一個是公開金鑰。這兩個金鑰是數學相關,用某個使用者的金鑰加密後的資訊,只能使用該使用者的解密金鑰才能進行解密檢視。

   根據這種公鑰公開,私鑰隱藏的機制,出現了著名的RSA演算法。這是我們在實際應用中最常見的一種公鑰加密演算法(原理是兩個大質數(p,q)乘積(n)難以逆向求解),也就是說公鑰使用這種演算法對資料進行加密,私鑰也用這種演算法對資料進行解密。

    注意1:只是知道其中一個的金鑰(金鑰在這裡泛指公鑰和私鑰,如沒有特殊說明,公鑰和私鑰均可以被稱為金鑰),不能計算出另一個金鑰,因此,對外公佈一個金鑰的內容,不會影響另一個金鑰的安全性,也就是說即使公鑰在網上被截獲,如果沒有與之匹配的私鑰,也無法解密。在這裡,我們將對外公佈的金鑰稱之為公鑰,不公開的對內保留的金鑰稱之為私鑰。

    注意2:我們也可以使用私鑰進行加密,然後用公鑰進行解密,沒有明確說只能使用公鑰加密資料。這種特殊情況我們下面會說到。

    

    對稱加密:在這種加密型別中,加密解密都是同一個金鑰,也即使用者加密資料使用金鑰A,其他使用者也是使用該金鑰A解密該加密資料。其中比較著名對稱加密演算法是AES演算法。

    公鑰加密系統也就是非對稱加密的提出是為了解決對稱加密中金鑰傳遞的問題。例如我們現在使用對稱加密,只有一個金鑰K,加密解密都用它。A要給B傳送一段保密資訊,A可以用K進行加密,把密文傳送給B,B再用K解密,得到資訊。

    在這裡有一個存在風險的地方:B要解密只能用K,而K開始只有A知道,因此A要告訴B金鑰K只能是通過明文形式,既然是明文傳遞,就存在被人擷取的風險。

    而公鑰加密系統裡面就不存在這個問題了。它的思路是加密與解密用不同的金鑰,這樣就不用傳遞解密的金鑰了。關鍵是不用傳遞解密時所用的金鑰

    注意3:我們在實際對資料進行加密傳輸的時候,真正使用方式的是是對稱加密,為什麼不使用非對稱加密方式來加密資料呢,主要是因為非對稱加密演算法的時間成本太大(時間耗費為對稱加密方式1000倍以上),因此實際情況是:我們使用非對稱加密方式加密傳輸的資料實際上是對稱金鑰所用的金鑰,而且只是在剛開始互動的時候使用,後續一直使用對稱加密方式對資料進行加密。


    數字簽名:但是如果我們使用私鑰進行加密資料(私鑰永遠不對外發布),也可以使用公鑰對其進行解密,這用於客戶驗證擁有私鑰的一方釋出的資料或者是檔案是否是準確完整的,擁有公鑰的接收者可以判斷這段資料,由此得知釋出這段資料的真實身份是否確實是擁有私鑰的某人,詳細介紹將在下一篇博文闡述,這裡只是引入概念。

    總結1:數字簽名=使用私鑰加密的自身資料。目的是供其他驗證我的身份合法性


全文總結1:

    使用公鑰加密資料,使用私鑰解密資料的這種操作就叫做非對稱加密

    加密:既然是加密,那麼肯定是不希望別人知道我的訊息,所以只有我能解密,那麼可以得出是使用公鑰負責加密,私鑰負責解密。

    簽名:既然是簽名,那肯定是不希望有人冒充我發訊息,因此只有我才能釋出這個簽名,所以可以得出私鑰負責簽名,公鑰負責驗證。


全文總結2:

    數字簽名是將傳送資訊的摘要資訊用傳送者的私鑰加密,與原文一起傳送給接收者。接收者只有用傳送者的公鑰(數字證書,所有人都可以獲取)才能解密被加密的摘要資訊(數字簽名)。然後接受者用HASH函式對收到的原文產生一個摘要資訊,與解密的摘要資訊對比,如果相同,則說明收到的資訊是完整的,在傳輸過程中沒有被修改,否則說明資訊被修改過,因此數字簽名能夠驗證資訊的完整性與正確性。整個過程也即使用數字證書去驗證數字簽名




結尾:

    下一篇:實現HTTPS系列第三彈之【數字簽名,數字證書,CA認證等概念理解】

    博文地址:http://watchmen.blog.51cto.com/6091957/1924747


     感謝閱讀,祝有收穫的一天,謝謝!





      本文轉自1清風攬月1  51CTO部落格,原文連結:http://blog.51cto.com/watchmen/1923426,如需轉載請自行聯絡原作者







相關文章