寫給開發者的實用密碼學 - 前言

各位朋友,非常慚愧這半年來疏於更新公衆號,不是因爲太忙,而是太閒。

過去的2020年發生了太多的事情,2020年1月23日武漢封城歷歷在目,彷彿就在昨天。多少人經歷了悲歡離合、多少店鋪關張,又有多少企業倒下?所以這段時間我一直在思索人生的意義。人生的意義就是追求幸福的人生,可什麼是幸福呢?

財務自由是很多人的夢想,這意味着我們不需要看老闆的臉色,隨心所欲,做自己想做的事情。雖然我還未做到財務自由,但一定程度的隨心所欲還是可以達到。所以這段時間我就隨心的練練書法,跑步也非常佛系,不追求配速、不追求跑量,閒暇時間玩玩攝影(拍照)、圍棋。工作上的事情,也是隨心所欲,完成就好。但半年時間下來,我發現並沒有體會到快樂。以前跑步都是朝着跑馬的目標訓練,看着一點點完成跑馬目標,那份喜悅之情是不跑步的人體驗不到的。在沒有具體目標之後,人反而懶散下來,現在最多跑個十公里,就無以爲繼。練習書法,嘗試了很多帖子,依然感覺不到寫字的樂趣。

問題在哪?喬丹.彼得森說過:

人類只要一適應幸福的狀態,就又會開始覺得不幸福。

缺少目標感,缺少進步,即使衣食無憂,我仍然感受不到幸福。當然,如何找到幸福,是一個宏達的主題。而當下最重要的是,趕快行動起來,找一些具體的事情做一做。一點點進步也比沒有進步強,所以我又撿起荒廢很久的公衆號,還是以我擅長的技術入手,寫一寫技術相關的文章。以今天爲起點,總結一下前一段時間所做的工作。

計算機安全在學校課堂有學過,但畢業之後並沒有涉及這一領域,所以回想起來一片空白。前一段時間做了一些瀏覽器的開發工作,爲瀏覽器增加國密支持,不得不啃了密碼學相關的知識。有兩本書對我幫助很大,一本是《深入淺出HTTPS:從原理到實戰》,另一本是《Practical Cryptography for Developers》。

一直以來,密碼學算法一直被認爲是專家和數學家的專有技術。現在依然如此,在閱讀國密相關的標準文檔,特別是講到密碼算法的原理,如讀天書。當這並沒有妨礙我完成這項工作,成功的給瀏覽器增加了國密算法的支持。因爲我們只是密碼算法的使用者,其內部爲什麼要那麼設計,其原理是什麼,如果能夠理解更好,但理解不了也不影響我們使用。更爲重要的是,這些國密算法已經有開源實現,雖然其實現方式和語言,但一些通用的東西還是可以借鑑。當然,密碼學仍然是一門非常複雜的學科,即使不用理解算法,但一些密碼學的概念,如何使用密碼組合成一套安全的體系,也需要深入學習。

在開發國密瀏覽器的同時,我也對密碼學有了一定的理解,所以嘗試着將我所理解的密碼學總結一下,算是對這段時間的開發工作的一個小結。其實關於密碼學的一些知識,上面的兩本書已經講得很好。但怎麼說呢?書本上的知識僅僅是知識,只有在消化吸收後才能變爲自己的。我希望在梳理的過程中,加深對密碼學的理解。在後面的文章中,我會按照《Practical Cryptography for Developers》的組織結構來梳理在 HTTPS 中涉及到的密碼學知識。

因爲我的數學知識比較薄弱,所以在這裏我不會涉及到密碼算法的內部,有關算法也只會一筆帶過。更多的是通過代碼示例和動手實踐,就像我們學習一門編程語言一樣,更多的是學習一些概念,然後就是掌握 API 和工具的使用,最後完成一個實際的應用。

在後續文章中,將涉及到哈希、MAC 碼和密鑰推導函數(KFD)、隨機生成器、密鑰交換協議、對稱密碼、加密方案、非對稱密碼系統、公共密鑰密碼學、橢圓曲線、數字簽名,在談到各項技術時,會加入國密算法的相關內容。當然,由於學識有限,量子安全加密算法、現代加密工具和庫就不會涉及。

這些技術都是一些冷門的技術,如果在工作中沒有用到,肯定也沒有興趣看,不過這不重要了,即使有一個人看到了文章,對他有用,那就值得了。

這裏也要謝謝各位朋友的不離不棄,你們的支持是我最大的動力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章