用最強大的Windows C/C++暴力破解密碼
一窺這個充滿數學及程式語言的新世界
雖然量子電腦已經出現,但距離真正能破解現代密碼的超強計算能力還有一段時間。密碼學是現代人類經濟文明的基礎,這些靠著數學及演算法所產生的保護力,讓我們可以放心地在網上購物,刷卡,提款,交易虛擬貨幣等。
C/C++一直是程式語言的王者,使用C/C++是最能了解密碼學的極佳工具。
本書完整介紹我們很熟悉的名詞,HTTPS,ECC,RSA,SSL,並且將其數學的原理都說明清楚。在演算法方法,一些基本的對稱演算法、雜湊、編碼格式、RSA、數位簽名等等。而常見的密碼體制如橢圓曲線、CSP、CryptoAPI、身份驗證及PKI理論也有說明。網路上傳輸的基礎SSL-TLS更有完整的實作。最後也說明了SM2等原理,對想研究加密學、虛擬貨幣是不可或缺的一本好書。
本書來自擁有幾十年經驗的密碼開發工程師的一手資料,透過本書,讀者不僅能了解原理,還能自己上機實現,讓你具備熟練呼叫業界知名演算法庫的能力,做到從理論到實踐的完全精通,這一點是市面上99%的密碼書都無法做到的。
學完本書,你就可稱自己是Windows C/C++的密碼高手了。
本書特色
◎支撐現代人類經濟活動的就是密碼學
◎用最強大的Windows C/C++暴力破解
◎一窺這個充滿數學及程式語言的新世界
C/C++一直是程式語言的王者,再方便的Python,再強大的Java,再物件化的Ruby,都沒有C/C++來得暴力直接,使用C/C++是最能了解密碼學的極佳工具。
作者
朱晨冰
20年C \ C++ 、Java開發經驗。主導開發過密碼、圖形、人工智慧等產品。
精通Linux、Windows系統開發及資料庫開發技術。
目錄
前言
01 密碼學概述
1.1 瑪麗女王的密碼
1.2 密碼學簡史
1.3 密碼學的基本概念
02 架設C 和C++ 密碼開發環境
2.1 密碼程式設計的兩個重要的國際函數庫
2.2 C/C++ 密碼函數庫OpenSSL
2.3 純C++ 密碼開發Crypto++ 函數庫
2.4 密碼開發函數庫GmSSL
03 對稱密碼演算法
3.1 基本概念
3.2 對稱加解密演算法的分類
3.3 串流加密演算法
3.4 分組加密演算法
3.5 利用OpenSSL 進行對稱加解密
04 雜湊函數和HMAC
4.1 雜湊函數概述
4.2 SM3 雜湊演算法
4.3 HMAC
4.4 SHA 系列雜湊演算法
4.5 更通用的基於OpenSSL 的雜湊運算
05 密碼學中常見的編碼格式
5.1 Base64 編碼
5.2 PEM 檔案
5.3 ASN.1 和BER、DER
06 非對稱演算法RSA 的加解密
6.1 非對稱密碼體制概述
6.2 RSA 概述
6.3 RSA 的數學基礎
6.4 RSA 演算法描述
6.5 RSA 演算法實例
6.6 熟悉PKCS#1
6.7 在OpenSSL 命令中使用RSA
6.8 基於OpenSSL 函數庫的RSA程式設計
6.9 隨機大質數的生成
6.10 RSA 演算法的攻擊及分析
07 數位簽章技術
7.1 概述
7.2 什麼是數位簽章技術
7.3 RSA 公開金鑰演算法在數位簽章中的應用
7.4 使用OpenSSL 命令進行簽名和驗簽
7.5 基於OpenSSL 的簽名驗簽程式設計
08 橢圓曲線密碼體制
8.1 概述
8.2 背景基礎知識
8.3 橢圓曲線的定義
8.4 密碼學中的橢圓曲線
8.5 ECC 演算法系統
09 CSP 和CryptoAPI
9.1 什麼是CSP
9.2 CryptoAPI 簡介
9.3 CSP 服務系統
9.4 CSP 的組成
9.5 CryptoAPI 系統結構
9.6 CryptoAPI 呼叫底層CSP 服務方式
9.7 CrpytoAPI 的基本功能
9.8 架設CryptoAPI 開發環境
9.9 基本加密函數
10 身份認證和PKI 理論基礎
10.1 身份認證概述
10.2 身份認證技術基礎
10.3 PKI 概述
10.4 基於X.509 證書的PKI 認證系統
11 實戰PKI
11.1 只有密碼演算法是不夠的
11.2 OpenSSL 實現CA 的架設
11.3 基於OpenSSL 的證書程式設計
11.4 證書程式設計實戰
12 SSL-TLS 程式設計
12.1 SSL 協定規範
12.2 OpenSSL 中的SSL 程式設計
12.3 SSL 函數
12.4 準備SSL 通訊所需的證書
12.5 實戰SSL 網路程式設計
13 SM2 演算法的數學基礎
13.1 素域Fp
13.2 二元擴域 2m F
13.3 橢圓曲線多倍點運算
13.4 求解橢圓曲線離散對數問題的方法
13.5 橢圓曲線上點的壓縮
13.6 有限域和模運算
13.7 橢圓曲線演算法
13.8 曲線範例
13.9 橢圓曲線方程式參數的擬隨機生成
13.10 橢圓曲線方程式參數的驗證
14 SM2 演算法的實現
14.1 為何要推出SM2 演算法
14.2 SM2 演算法採用的橢圓曲線方程式
14.3 SM2 演算法的用途
14.4 橢圓曲線密碼體制的不足
14.5 橢圓曲線的研究熱點
14.6 SM2 演算法中的有限域
14.7 有限域上的橢圓曲線
14.8 橢圓曲線系統參數及其驗證
14.9 金鑰對的生成
14.10 公開金鑰的驗證
14.11 MIRACL 函數庫入門
14.12 SM2 加解密演算法
14.13 SM2 數位簽章
序/導讀
前言
隨著電腦及網路技術的發展,資訊安全,特別是各行各業資訊系統的安全成為社會關注的焦點,直接影響國家的安全和社會的穩定。
資訊安全技術是核心技術中的核心。資訊安全,大到國防安全,小到個人銀行帳號,一出事對國家和個人都是大事。網路世界黑白難分,暗礁險灘出入相隨,保護資訊安全是每個IT 人員必須重視的課題,一定要保證所開發的資訊系統是安全的,經得起攻擊。作為一個IT 人,無論你是在Linux 下開發,還是在Windows 下開發,無論是用C/C++ 開發,還是Java 開發,或用C# 開發,都應該掌握資訊安全技術,這項技術就像我們大學學習的資料結構、離散數學那樣,是任何資訊系統的基礎。舉一個簡單的例子,你在開發一個資訊管理系統,總不能把使用者的登入密碼以明文的方式保存在資料庫中吧。
C/C++ 語言作為當今世界主流的開發語言,使用十分廣泛,而關於C/C++加解密方面的圖書寥寥無幾,而且現有的只是對基本的函數介紹,並沒有深入演算法原理。也就是讀者看了,只知道這樣用,而不了解為何這樣用。學習資訊安全技術,不先從原理上來了解其本質,是開發不出安全的系統來的。
為何要寫一本密碼書?答案是市面上的密碼書實在太學院派或太工程派。本書不同於以往的密碼書,很多學院派的密碼書對許多常用或不常用的密碼演算法只是蜻蜓點水、淺嘗即止地介紹,而沒有進行上機的程式實現,讓學生看了似懂非懂。而實踐派的密碼書從頭到尾只是幾個業界演算法庫的函數介紹,然後呼叫,接著就結束了,讓學生看了只知其然,而不知其所以然。
本書來自擁有幾十年經驗的密碼開發工程師一手資料,知道哪些演算法是重要並且常用的,瞄準這幾個常用的演算法(本書全方面地從理論到實現介紹SM2/SM3/SM4 演算法),循序漸進(甚至從小學數學講起),詳細地介紹其原理,到自主實現,再到業界函數庫的呼叫(工作中必定會碰到,一定要在找工作之前學習),對於有理解困難的地方會重點介紹。透過本書,讀者不僅能了解原理,還能自己上機實現,還可以熟練呼叫業界知名演算法庫,做到從理論到實踐的全線精通,這一點是市面上99% 的密碼書都無法做到的。可以說,學完本書,立即就職,毫無壓力!
本書首先從各大主流加解密演算法的原理入手,然後用C/C++ 語言手工實現該演算法(這是了解演算法理論的必要過程),最後從C/C++ 提供的主流加解密框架和函數程式庫入手熟悉其使用。記住,會使用函數程式庫是最基本的技能,真正的專家是要會設計和實現演算法函數庫,因為很多場合,尤其是國防軍事領域,很多敏感的、需要高性能的地方都要自己實現加解密演算法,而不能照搬別人的函數程式庫,所以不了解原理是不可以的。C/C++ 作為資訊系統開發的主流語言,其資訊安全需求十分旺盛,在C/C++ 開發的資訊系統中,熟練運用資訊安全技術迫在眉睫。
作者長期工作在資訊安全開發前線,具有較為豐富的密碼演算法使用經驗,經常使用各種演算法來保護資料安全,自己平時也累積了不少技術心得和開發經驗,但這些技術比較零散,系統性不強,借此機會,將這些內容整理成一個完整的系統,並且將所涉及的技巧和方法說明出來,是一件很榮幸的事。作者所做的工作來自長期的實踐,對於密碼安全的開發技巧
都從基本的內容講起,然後稍微提升,所以本書可以說是「接近實戰」。軟體開發是一門需要實踐的技術,本書對理論儘量用簡單易懂的語言介紹,然後配合對應的實例,避免空洞的說教,對於其中的技術細節,都儘量講深講透,為讀者提供充實可靠的技術資料。
實踐反覆告訴我們,只有把關鍵核心技術掌握在自己手中,才能從根本上保障安全。作為一名資深工程師,真心希望每個IT 從業者都能靜下心來學一學密碼學。
密碼學在資訊技術應用中佔有重要的地位,密碼技術成為開發者經常會碰到的問題。針對當前密碼學領域的書,不是理論太枯燥,就是太簡單籠統,無法應對第一線實戰開發的情況,因此就有了這麼一本面對國中級程式設計師的密碼學開發方面的書。很多人學習密碼學主要是應用密碼演算法來保護資料安全,實際開發過程中也是如此,所以學習密碼學的度很有講究,太深沒必要,太淺沒什麼用。本書在學習深度方面也經過了仔細斟酌。
繁體中文出版說明:本書原作者為中國大陸人士,為維持全書之完整性,書中許多圖例均維持簡體中文介面,讀者閱讀時可比照前後文參考。