openssl 介绍(一)

1.1 对称算法

对称算法是使用一个秘钥,把明文加密成密文。解密就是读秘钥与加密秘钥相同。

  1. 电子密码本模式(ECB)
    加密数据分成若干组,大小与密钥相同,每组都用同一个密钥进行加密
  2. 加密块链模式(CBC)
    将明文分成固定长度的块,然后将前面一个加密块输出的密文与下一个加密的明文进行异或操作,将计算的结果在用密钥进行加密得到密文,直到整个加密完成。一个会初始化一个向量。
  3. 加密反馈模式(CFB)
    使用流加密法,数据使用更小的单元加密,比如8位,长度小于定义的块长比如64位,其加密步骤:
    a) 使用64位的初始化向量。初始化向量放在移位寄存器中,第一步加密,产生64位的初始化密文。
    b)初始化向量最左边的8位域明文前8位进行异或运算,产生密文第一部分(假设为c)然后将c传输到接收方;
    c)向量的位(即初始化向量所在的移位寄存器内容)左移8位,使移位寄存器最右边的8位为不可测的数据,在其中填入c的内容。
    d)第1-3补,知道加密所有的明文单元
    解密过程相反
  4. 输出反馈模式(OFB)
    与cfb相似,唯一差别是,cfb中的密文填入加密过程下一阶段,而在ofb中,初始化向量加密过程的输入填入加密过程下一阶段
1.2 摘要算法

无论用户输入什么长度的原始数据,进过计算后输出的密文都是固定长度的,原理是根据一定的运算规则对原始数据进行莫种形式的提取,这种提取就是摘要,摘要与原文有密切联系,原始数据稍有不同,摘要就完全不同。缺点是不能还原数据。只能验证数据的完整性。现阶段算法:MD2, MD4, MD5, SHA, SHA-1/256/383/512 等,常用的主要有MD5 和 SHA1。 D5的输出结果问16字节,sha1的输出结果为20字节

openssl 源代码

openssl 源代码主要由 eay 库、 ssl 库、工具源码、范例源码以及测试源码组成。
eay 库是基础的库函数,提供了很多功能。源代码放在 crypto 目录下。包括如下内
容:
1) asn.1 DER 编码解码(crypto/asn1 目录),它包含了基本 asn1 对象的编解码以及
数字证书请求、数字证书、 CRL 撤销列表以及 PKCS8 等最基本的编解码函数。
这些函数主要通过宏来实现。

2) 抽象 IO(BIO,crypto/bio 目录),本目录下的函数对各种输入输出进行抽象,包括
文件、内存、标准输入输出、 socket 和 SSL 协议等。

3) 大数运算(crypto/bn 目录),本目录下的文件实现了各种大数运算。这些大数运
算主要用于非对称算法中密钥生成以及各种加解密操作。另外还为用户提供了
大量辅助函数,比如内存与大数之间的相互转换。

4) 字符缓存操作(crypto/buffer 目录)。

5) 配置文件读取(crypto/conf 目录), openssl 主要的配置文件为 openssl.cnf。本目
录下的函数实现了对这种格式配置文件的读取操作。

6) DSO(动态共享对象,crypto/dso 目录),本目录下的文件主要抽象了各种平台的
动态库加载函数,为用户提供统一接口。

7) 硬件引擎(crypto/engine 目录),硬件引擎接口。用户如果要写自己的硬件引擎,
必须实现它所规定的接口。

8) 错误处理(crypto/err 目录),当程序出现错误时, openssl 能以堆栈的形式显示各
个错误。本目录下只有基本的错误处理接口,具体的的错误信息由各个模块提
供。各个模块专门用于错误处理的文件一般为*_err…c 文件。

9) 对称算法、非对称算法及摘要算法封装(crypto/evp 目录)。

10) HMAC(crypto/hmac 目录),实现了基于对称算法的 MAC。

11) hash 表(crypto/lhash 目录),实现了散列表数据结构。 openssl 中很多数据
结构都是以散列表来存放的。比如配置信息、 ssl session 和 asn.1 对象信息等。

12) 数字证书在线认证(crypto/ocsp 目录), 实现了 ocsp 协议的编解码以及证书
有效性计算等功能。

13) PEM 文件格式处理(crypto/pem),用于生成和读取各种 PEM 格式文件,
包括各种密钥、数字证书请求、数字证书、 PKCS7 消息和 PKCS8 消息等。

14) pkcs7 消息语法(crypto/pkcs7 目录),主要实现了构造和解析 PKCS7 消息;

15) pkcs12 个人证书格式(crypto/pckcs12 目录),主要实现了 pkcs12 证书的构
造和解析。

16) 队列(crypto/pqueue 目录),实现了队列数据结构,主要用于 DTLS。

17) 随机数(crypto/rand 目录),实现了伪随机数生成,支持用户自定义随机数
生成。

18) 堆栈(crypto/stack 目录),实现了堆栈数据结构。

19) 线程支持(crypto/threads), openssl 支持多线程,但是用户必须实现相关接
口。

20) 文本数据库(crypto/txt_db 目录)。

21) x509 数字证书(crypto/x509 目录和 crypto/x509v3),包括数字证书申请、
数字证书和 CRL 的构造、解析和签名验证等功能了;

22) 对称算法(crypto/aes、 crypto/bf、 crypto/cast、 ccrypto/omp 和 crypto/des 等
目录)。

23) 非对称算法(crypto/dh、 crypto/dsa、 crypto/ec 和 crypto/ecdh)。

24) 摘要算法(crypto/md2、 crypto/md4、 crypto/md5 和 crypto/sha)以及密钥交
换/认证算法(crypto/dh 和 crypto/krb5)。

openssl 学习方法

通过学习 openssl,用户能够学到 PKI 方面的各种知识,其重要性不言而喻。以下
为学习 openssl 的方法,供参考。

1) 建立学习环境
建立一个供调试的 openssl 环境,可以是 windows 平台,也可以是 linux 或者其
他平台。用户需有在这些平台下调试源代码的能力。

2)学习 openssl 的命令
通过 openssl 命令的学习,对 openssl 有基本的了解。

3) 学习 openssl 源代码并调试
主要的源代码有:
apps 目录下的各个程序,对应于 openssl 的各项命令;
demos 下的各种源代码;
engines 下的各种 engine 实现;
test 目录下的各种源代码。
对于 openssl 函数的学习,主要查看 openssl 自身是如何调用的,或者查看函数的实
现。对于 openssl 中只有实现而没有调用的函数,读者需要自己写源码或研究源代
码去学习。

4) 学会使用 openssl 的 asn.1 编解码
openssl 中很多函数和源码都涉及到 asn1 编解码,比如数字证书申请、数字证
书、 crl、 ocsp、 pkcs7、 pkcs8、 pkcs12 等。

5) 查找资料
Linux 下主要用 man 就能查看 openssl 命令和函数的帮助。 Windows 用户可用
到 www.openss.org 去查看在线帮助文档, 或者用 linux 下的命令 man2html 将帮助文
档装换为 html 格式。用户也可以访问 openssl.cn 论坛来学习 openssl。

6) 学习 openssl 相关书籍
读者可以参考《OpenSSL与网络信息安全–基础、结构和指令》、 《Network
Security with OpenSSL》 (OReilly出版)和《OpenSSL for windows Developer’s Guide》。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值