ImageVerifierCode 换一换
格式:DOC , 页数:653 ,大小:1.35MB ,
资源ID:406005      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-406005.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(openssl教程完全版Word文档下载推荐.doc)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

openssl教程完全版Word文档下载推荐.doc

1、7.4.5cipher BIO407.4.6ssl BIO417.4.7其他示例42第八章配置文件438.1概述438.2openssl配置文件读取438.3主要函数448.4编程示例44第九章随机数469.1随机数469.2openssl随机数数据结构与源码469.3主要函数489.4编程示例48第十章文本数据库5010.1概述5010.2数据结构5110.3函数说明5110.4编程示例52第十一章大数5411.1介绍5411.2openssl大数表示5411.3大数函数5511.4使用示例58第十二章BASE64编解码6412.1BASE64编码介绍6412.2BASE64编解码原理641

2、2.3主要函数6512.4编程示例66第十三章ASN1库6813.1ASN1简介6813.2DER编码7013.3ASN1基本类型示例7013.4openssl 的ASN.1库7313.5用openssl的ASN.1库DER编解码7413.6Openssl的ASN.1宏7413.7ASN1常用函数7513.8 属性证书编码89第十四章错误处理9314.1概述9314.2数据结构9314.3主要函数9514.4编程示例97第十五章摘要与HMAC10015.1概述10015.2openssl摘要实现10015.3函数说明10115.4编程示例10115.5HMAC103第十六章数据压缩10416.

3、1简介10416.2数据结构10416.3函数说明10516.4openssl中压缩算法协商10616.5编程示例106第十七章RSA10717.1 RSA介绍10717.2openssl的RSA实现10717.3RSA签名与验证过程10817.4数据结构10917.4.1 RSA_METHOD10917.4.2RSA11017.5主要函数11017.6编程示例11217.6.1密钥生成11217.6.2RSA加解密运算11317.6.3签名与验证116第十八章DSA11918.1 DSA简介11918.2openssl的DSA实现12018.3DSA数据结构12018.4主要函数12118.

4、5编程示例12218.5.1密钥生成12218.5.2签名与验证124第十九章DH12619.1DH算法介绍12619.2openssl的DH实现12719.3数据结构12719.4主要函数12819.5编程示例129第二十章椭圆曲线13220.1ECC介绍13220.2openssl的ECC实现13320.3主要函数13520.3.1参数设置13520.3.2参数获取13620.3.3转化函数13720.3.4其他函数13720.4编程示例139第二十一章EVP14321.1 EVP简介14321.2 数据结构14321.2.1EVP_PKEY14421.2.2EVP_MD14421.2.3

5、EVP_CIPHER14521.2.4EVP_CIPHER_CTX14621.3 源码结构14721.4 摘要函数14721.5 对称加解密函数14821.6 非对称函数14921.7BASE64编解码函数14921.8其他函数15021.9 对称加密过程15221.10编程示例152第二十二章PEM格式15922.1PEM概述15922.2openssl的PEM实现16022.3PEM函数16122.4编程示例161第二十三章Engine16523.1Engine概述16523.2Engine支持的原理16523.3Engine数据结构16623.4openssl 的Engine源码1672

6、3.5Engine函数16723.6实现Engine示例169第二十四章通用数据结构18224.1通用数据结构18224.2X509_ALGOR18224.3X509_VAL18424.4X509_SIG18524.5X509_NAME_ENTRY18624.6X509_NAME18724.7X509_EXTENSION19324.8X509_ATTRIBUTE19924.9GENERAL_NAME200第二十五章证书申请20325.1证书申请介绍20325.2数据结构20325.3主要函数20425.4编程示例20625.4.1生成证书请求文件20625.4.2解码证书请求文件208第二十六

7、章X509数字证书21026.1X509数字证书21026.2opessl实现21026.3X509数据结构21026.4X509_TRUST与X509_CERT_AUX21426.5X509_PURPOSE21526.6主要函数21826.7证书验证22126.7.1证书验证项22126.7.2Openssl中的证书验证221第二十七章OCSP22227.1概述22227.2openssl实现22227.3主要函数22227.4编程示例227第二十八章CRL22828.1CRL介绍22828.2数据结构22828.3CRL函数23028.4编程示例231第二十九章PKCS723329.1概述

8、23329.2数据结构23329.3函数23429.4 消息编解码23529.4.1 data23529.4.2 signed data23629.4.3 enveloped23729.4.4 signed_and_enveloped23829.4.5 digest23829.4.6 encrypted23929.4.7读取PEM23929.4.8解码pkcs7240第三十章 PKCS1224130.1概述24130.2openss实现24130.3数据结构24230.4函数24330.5编程示例245第三十一章SSL实现25431.1概述25431.2openssl实现25431.3建立SS

9、L测试环境25431.4数据结构25631.5加密套件25631.6密钥信息25731.7SESSION25831.8多线程支持25831.9编程示例25931.10函数270第三十二章Openssl命令27232.1概述27232.2asn1parse27232.3dgst27432.4gendh27532.5passwd27632.6rand27632.7genrsa27732.8req27832.9x50928032.10version28332.11speed28332.12 sess_id28432.13 s_server28432.14 s_client28632.15 rsa28

10、832.16 pkcs728932.17 dsaparam29032.18 gendsa29132.19 enc29132.20 ciphers29232.21 CA29332.22 verify29632.23 rsatul29732.24 crl29932.25 crl2pkcs730032.26 errstr30032.27 ocsp30132.28 pkcs1230432.29 pkcs830632.30 s_time30732.31 dhparam和dh30832.32 ecparam30932.33 ec31032.34 dsa31132.35 nseq31232.36 prime

11、31332.37 smime313第一章基礎知識1.1對稱演算法對稱演算法使用一個金鑰。給定一個明文和一個金鑰,加密產生密文,其長度和明文大致相同。解密時,使用讀金鑰與加密金鑰相同。對稱演算法主要有四種加密模式:(1)電子密碼本模式Electronic Code Book(ECB)這種模式是最早採用和最簡單的模式,它將加密的資料分成若干組,每組的大小跟加密金鑰長度相同,然後每組都用相同的金鑰進行加密。其缺點是:電子編碼薄模式用一個金鑰加密消息的所有塊,如果原消息中重複明文塊,則加密消息中的相應密文塊也會重複,因此,電子編碼薄模式適於加密小消息。(2)加密塊鏈模式Cipher Block Cha

12、ining(CBC)CBC模式的加密首先也是將明文分成固定長度的塊,然後將前面一個加密塊輸出的密文與下一個要加密的明文塊進行異或操作,將計算結果再用金鑰進行加密得到密文。第一明文塊加密的時候,因為前面沒有加密的密文,所以需要一個初始化向量。跟ECB方式不一樣,通過連接關係,使得密文跟明文不再是一一對應的關係,破解起來更困難,而且克服了只要簡單調換密文塊可能達到目的的攻擊。(3)加密回饋模式 Cipher Feedback Mode(CFB)面向字元的應用程式的加密要使用流加密法,可以使用加密回饋模式。在此模式下,資料用更小的單元加密,如可以是8位,這個長度小於定義的塊長(通常是64位)。其加密

13、步驟是:a)使用64位的初始化向量。初始化向量放在移位暫存器中,在第一步加密,產生相應的64位初始化密文;b)始化向量最左邊的8位與明文前8位進行異或運算,產生密文第一部分(假設為c),然後將c傳輸到接收方;c)向量的位(即初始化向量所在的移位暫存器內容)左移8位元,使移位暫存器最右邊的8位元為不可預測的資料,在其中填入c的內容;d)第1-3步,直到加密所有的明文單元。解密過程相反4)輸出回饋模式 Output Feedback Mode(OFB)輸出回饋模式與CFB相似,惟一差別是,CFB中密文填入加密過程下一階段,而在OFB中,初始化向量加密過程的輸入填入加密過程下一階段。1.2摘要演算法

14、摘要演算法是一種能產生特殊輸出格式的演算法,這種演算法的特點是:無論使用者輸入什麼長度的原始資料,經過計算後輸出的密文都是固定長度的,這種演算法的原理是根據一定的運算規則對原資料進行某種形式的提取,這種提取就是摘要,被摘要的資料內容與原資料有密切聯繫,只要原資料稍有改變,輸出的“摘要”便完全不同,因此,基於這種原理的演算法便能對資料完整性提供較為健全的保障。但是,由於輸出的密文是提取原資料經過處理的定長值,所以它已經不能還原為原資料,即消息摘要演算法是不可逆的,理論上無法通過反向運算取得原資料內容,因此它通常只能被用來做資料完整性驗證。如今常用的“消息摘要”演算法經歷了多年驗證發展而保留下來的

15、演算法已經不多,這其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。常用的摘要演算法主要有MD5和SHA1。D5的輸出結果為16位元組,sha1的輸出結果為20位元組。1.3公開金鑰演算法在公開金鑰密碼系統中,加密和解密使用的是不同的金鑰,這兩個金鑰之間存在著相互依存關係:即用其中任一個金鑰加密的資訊只能用另一個金鑰進行解密。這使得通信雙方無需事先交換金鑰就可進行保密通信。其中加密金鑰和演算法是對外公開的,人人都可以通過這個金鑰加密檔然後發給收信者,這個加密金鑰又稱為公開金鑰;而收信者收到加密檔後,它可以使用他的解密金鑰解密,這個金鑰是由他自己私人掌管的,並不需要分

16、發,因此又成稱為私密金鑰,這就解決了金鑰分發的問題。主要的公開金鑰演算法有:RSA、DSA、DH和ECC。(1)RSA演算法當前最著名、應用最廣泛的公開金鑰系統RSA是在1978年,由美國麻省理工學院(MIT)的Rivest、Shamir和Adleman在題為獲得數位簽章和公開鑰密碼系統的方法的論文中提出的。它是一個基於數論的非對稱(公開鑰)密碼體制,是一種區塊編碼器體制。其名稱來自於三個發明者的姓名首字母。 它的安全性是基於大整數素因數分解的困難性,而大整數因數分解問題是數學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA演算法的安全性。RSA系統是公開金鑰系統的最具有典型意義的

17、方法,大多數使用公開金鑰密碼進行加密和數位簽章的產品和標準使用的都是RSA演算法。RSA演算法是第一個既能用於資料加密也能用於數位簽章的演算法,因此它為公用網絡上資訊的加密和鑒別提供了一種基本的方法。它通常是先生成一對RSA 金鑰,其中之一是保密金鑰,由用戶保存;另一個為公開金鑰,可對外公開,甚至可在網路服務器中註冊,人們用公開金鑰加密檔發送給個人,個人就可以用私密金鑰解密接受。為提高保密強度,RSA金鑰至少為500位長,一般推薦使用1024位。RSA演算法是R.Rivest、A.Shamir和L.Adleman于1977年在美國麻省理工學院開發,於1978年首次公佈。RSA公開金鑰密碼演算法

18、是目前網路上進行保密通信和數位簽章的最有效的安全演算法之一。RSA演算法的安全性基於數論中大素數分解的困難性,所以,RSA需採用足夠大的整數。因數分解越困難,密碼就越難以破譯,加密強度就越高。其演算法如下:A. 選擇兩質數p、qB. 計算n = p * qC. 計算n的歐拉函數(n) = (p - 1)(q - 1)D. 選擇整數e,使e與(n)互質,且1 e (n)E. 計算d,使d * e = 1 mod (n)其中,公開金鑰KUe, n,私密金鑰KR=d, n。加密/解密過程:利用RSA加密,首先需將明文數位化,取長度小於log2n位元的數位作為明文塊。對於明文塊M和密文塊C,加/解密的

19、形式如下:加密: C = Me mod n解密: M = Cd mod n = (Me)d mod n = Med mod nRSA的安全性基於大數分解質因數的困難性。因為若n被分解為n = p * q,則(n)、e、d可依次求得。目前,因式分解速度最快的方法的時間複雜性為exp(sqrt(ln(n)lnln(n)。統計資料表明,在重要應用中,使用512位的金鑰已不安全,需要採用1024位元的金鑰。(2)DSA演算法DSA(DigitalSignatureAlgorithm,數位簽章演算法,用作數位簽章標準的一部分),它是另一種公開金鑰演算法,它不能用作加密,只用作數位簽章。DSA使用公開金鑰

20、,為接受者驗證資料的完整性和資料發送者的身份。它也可用於由協力廠商去確定簽名和所簽資料的真實性。DSA演算法的安全性基於解離散對數的困難性,這類簽字標準具有較大的相容性和適用性,成為網路安全體系的基本構件之一。 DSA簽名演算法中用到了以下參數:p是L位長的素數,其中L從512到1024且是64的倍數。q是160位長且與p-1互素的因數,其中h是小於p-1並且滿足大於1的任意數。x是小於q的數。另外,演算法使用一個單向散列函數H(m)。標準指定了安全散列演算法(SHA)。三個參數p,q和g是公開的,且可以被網路中所有的使用者公有。私人金鑰是x,公開金鑰是y。對消息m簽名時:(1)發送者產生一個

21、小於q的亂數k。(2)發送者產生:r和s就是發送者的簽名,發送者將它們發送給接受者。(3)接受者通過計算來驗證簽名:如果v=r,則簽名有效。(3)Diffie-Hellman金鑰交換DH演算法是W.Diffie和M.Hellman提出的。此演算法是最早的公開金鑰演算法。它實質是一個通信雙方進行金鑰協定的協議:兩個實體中的任何一個使用自己的私密金鑰和另一實體的公開金鑰,得到一個對稱金鑰,這一對稱金鑰其它實體都計算不出來。DH演算法的安全性基於有限域上計算離散對數的困難性。離散對數的研究現狀表明:所使用的DH金鑰至少需要1024位元,才能保證有足夠的中、長期安全。(4)橢圓曲線密碼體制(ECC)1

22、985年,N. Koblitz和V. Miller分別獨立提出了橢圓曲線密碼體制(ECC),其依據就是定義在橢圓曲線點群上的離散對數問題的難解性。為了用橢圓曲線構造密碼系統,首先需要找到一個單向陷門函數,橢圓曲線上的數量乘就是這樣的單向陷門函數。橢圓曲線的數量乘是這樣定義的:設E為域K上的橢圓曲線,G為E上的一點,這個點被一個正整數k相乘的乘法定義為 k個G相加,因而有kG = G + G + + G (共有k個G)若存在橢圓曲線上的另一點N G,滿足方程kG = N。容易看出,給定k和G,計算N相對容易。而給定N和G,計算k = logG N相對困難。這就是橢圓曲線離散對數問題。離散對數求解

23、是非常困難的。橢圓曲線離散對數問題比有限域上的離散對數問題更難求解。對於有理點數有大素數因數的橢圓離散對數問題,目前還沒有有效的攻擊方法。1.4回呼函數Openssl中大量用到了回呼函數。回呼函數一般定義在資料結構中,是一個函數指標。通過回呼函數,客戶可以自行編寫函數,讓openssl函數來調用它,即使用者調用openssl提供的函數,openssl函數再回檔使用者提供的函數。這樣方便了使用者對openssl函數操作的控制。在openssl實現函數中,它一般會實現一個預設的函數來進行處理,如果用戶不設置回呼函數,則採用它預設的函數。回呼函數舉例:標頭檔:#ifndef RANDOM_H#def

24、ine RANDOM_H 1typedef int *callback_random(char *random,int len);voidset_callback(callback_random *cb);int genrate_random(char *random,int len);#endif原始程式碼:#include random.h#include callback_random *cb_rand=NULL;static int default_random(char *random,int lenmemset(random,0x01,len);return 0;set_callb

25、ack(callback_random *cb)cb_rand=cb; genrate_random(char *random,int len)if(cb_rand=NULL)return default_random(random,len);elsereturn cb_rand(random,len);測試代碼:static int my_rand(char *rand,int len)memset(rand,0x02,len); main()charrandom10; ret;set_callback(my_rand);ret=genrate_random(random,10);本例子用來

26、生產簡單的亂數,如果用戶提供了生成亂數回呼函數,則生成亂數採用用戶的方法,否則採用默認的方法。第二章openssl簡介2.1openssl簡介openssl是一個功能豐富且自包含的開源安全工具箱。它提供的主要功能有:SSL協議實現(包括SSLv2、SSLv3和TLSv1)、大量軟演算法(對稱/非對稱/摘要)、大數運算、非對稱演算法金鑰生成、ASN.1編解碼庫、證書請求(PKCS10)編解碼、數位憑證編解碼、CRL編解碼、OCSP協議、數位憑證驗證、PKCS7標準實現和PKCS12個人數位憑證格式實現等功能。openssl採用C語言作為開發語言,這使得它具有優秀的跨平臺性能。openssl支援Linux、UNIX、windows、Mac等平臺。openssl目前最新的版本

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2