每一個可以努力的日子,都是一份厚禮。
openssl
FlySSH領翔網絡優惠碼
2012 1月 3rd
Nginx配置SSL證書部署HTTPS網站
2011 10月 1st
RSA讀取密鑰——使用openssl編程
2011 1月 4th
RSA是基於數論中大素數的乘積難分解理論上的非對稱加密法。在此密碼術中,使用公鑰(public key)和私鑰(private key)兩個不同的密鑰:公鑰用於加密,它是向所有人公開的;私鑰用於解密,只有密文的接收者持有。
舉例:小紅希望安全地發送一條消息給小明,消息明文為m,小明的公鑰為K+,小明的私鑰為K-。通信過程為,小紅使用K+加密m,成為密文K+(m),傳送給小明,小明收到後使用K-解密這個密文得到原始消息明文,即m = K-(K+(m))。
具體的密鑰生成算法如下。隨機選擇兩個大素數p和q(比如每個都是1024 bit),計算n = pq, n’ = (p-1)(q-1). 選擇一個e (e小於n) 與n’互質。計算d使得ed = 1 mod n’.則公鑰為(n, e),私鑰為(n, d). 注意p和q都應該保密。
加密過程為c = m^e mod n
解密過程為m = c^d mod n
以上為原理簡介。下面是openssl API編程應用讀取密鑰文件的示例源代碼: 更多 >
DSA簽名與驗證——使用openssl編程
2011 1月 4th
和手寫簽名一樣,數字簽名可以為我們驗證文檔的作者、簽名的時間,從而鑒明消息的內容是真實可靠的。它的目的和MAC類似,只是使用的是公鑰加密體系。
和RSA加密解密過程相反,在DSA數字簽名和認證中,發送者使用自己的私鑰對文件或消息進行簽名,接受者收到消息後使用發送者的公鑰來驗證簽名的真實性。這個方法完全可以基於RSA來實現,但是在DSA中,我們會更有效率地做這件事情。 更多 >
MD5哈希散列生成摘要——使用openssl編程
2011 1月 3rd
取任意長度的消息,生成一個固定長度的散列值,或者叫做摘要。哈希函數的實現都是公開的,它廣泛應用於文件完整性檢測、數字簽名中。登錄密碼也有用到哈希函數,一般網站在數據庫中不是直接存儲的用戶密碼,而是密碼的哈希值,這樣即使數據庫暴露,攻擊者仍然是不知道密碼的明文的。
這要求Hash函數擁有以下特性:一是單向性,即不可逆性,我們無法從哈希值反過來得到原文。二是衝突碰撞抵禦能力,即找到兩個不同的消息原文,他們的哈希值相同,這在計算上不可行。
實際上,MD5已經不再安全。在2005年,我國山東大學王小雲教授成功破解MD5算法,使得使用普通電腦在數小時內即可找到哈希碰撞,這在國際密碼學領域引發地震。 更多 >
Diffie-Hellman密鑰交換——使用openssl編程
2011 1月 3rd
DH密鑰交換算法,是第一個提出的公開密鑰算法,它比RSA還要早提出。它使得在公開的不可信信道安全地交換密鑰成為可能。但DH算法無法抵禦中間人攻擊,必須借用數字簽名才足夠安全。
下面是使用openssl進行DH密鑰交換的示例程序: 更多 >
AES加密和解密——使用openssl編程
2011 1月 3rd
AES是一套對稱密鑰的密碼術,目前已廣泛使用,用於替代已經不夠安全的DES算法。所謂對稱密鑰,就是說加密和解密用的是同一個密鑰,消息的發送方和接收方在消息傳遞前需要享有這個密鑰。和非對稱密鑰體系不同,這裡的密鑰是雙方保密的,不會讓任何第三方知道。
對稱密鑰加密法主要基於塊加密,選取固定長度的密鑰,去加密明文中固定長度的塊,生成的密文塊與明文塊長度一樣。顯然密鑰長度十分重要,塊的長度也很重要。如果太短,則很容易枚舉出所有的明文-密文映射;如果太長,性能則會急劇下降。AES中規定塊長度為128 bit,而密鑰長度可以選擇128, 192或256 bit 。暴力破解密鑰需要萬億年,這保證了AES的安全性。
AES的算法較為複雜,在此不細加闡述。下面是使用openssl進行AES加密和解密的示例程序: 更多 >