openssl札记
文章平均质量分 80
openssl基础知识
openssl应用方向
艾-小小雨
再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。
展开
-
01.openssl-基础知识笔记
1.1 对称算法 加密:明文+密钥->密文 解密:密文+密钥->明文 对称算法主要四种加密模式a.电子密码本模式 Electronic Code Book(ECB) 将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密 b.加密块链模式 Cipher Block Chaining(CBC) b1.将明文分成固定长度的块,原创 2018-01-16 19:44:45 · 335 阅读 · 0 评论 -
02.openssl编程——简介
2.1 openssl简介openssl是一个功能丰富且自包含的开源安全工具箱。他提供的主要功能有:SSL协议实现(SSLv2 SSLv3和TLSv1)大量的软算法(对称/非对称/摘要)大数运算非对称算法密钥生成ASN.1编解码库证书请求(PKCS10)编解码数字证书编解码CRL编解码数字证书验证PKCS7标准原创 2018-01-16 19:44:47 · 364 阅读 · 0 评论 -
03.openssl编程——堆栈
3.1 openssl堆栈堆栈是一种先进先出的数据结构。openssl大量采用堆栈来存放数据。他实现一个通用的堆栈,可以方便的存储任意数据。他实现了许多基本的堆栈操作。主要有:a.堆栈拷贝(sk_dup)b.构建新堆栈(sk_new_null, sk_new)c.插入数据(sk_insert)d.删除数据(sk_delete)e.查找数据(sk原创 2018-01-16 19:44:50 · 304 阅读 · 0 评论 -
04.openssl编程——哈希表
4.1 哈希表在一般的数据结构如线性表和树中,记录在结构中的相对位置与记录的关键字之间不存在确定的关系,在结构中查找记录时需要进行一系列的关键字比较。这一类查找方法建立在比较的基础上,查找的效率与比较次数密切相关。理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和他的关键字之间建立的对应关系,使每个关键字哈希表存在冲突现象:不同的关键字可能得到同一哈希地址。在建造哈希表时不仅原创 2018-01-16 19:45:10 · 315 阅读 · 0 评论 -
05.openssl内存分配
5.1 openssl内存分配openssl供用户调用内存分配等函数主要在crypto/mem.c中实现,其那只的分配函数在crypto/mem_dbg.c中实现。默认情况下mem.c中函数mem_dbg.c中实现。如果用户的内存分配函数以及查找内存泄漏的函数,可以通过CRYPTO_set_mem_functions函数和CRYPTO_set_mem_debug_function函数来设置。原创 2018-01-16 19:45:13 · 235 阅读 · 0 评论 -
06.openssl动态模块加载
6.1 动态库加载动态库加载函数能让用户在程序中加载所需要的模块,各个平台下的加载函数是不一样。动态加载函数一般有如下功能:a.加载动态库比如windows下的函数LoadLibraryA;linux下的函数dloopenb.获取函数地址比如windows下的函数GetProcAddress以及Linux下的函数dlsym。c.卸载动态库比如windows下的函数Fre原创 2018-01-16 19:45:16 · 341 阅读 · 0 评论 -
07.openssl编程——抽象IO
7.1 openssl抽象IOopenssl抽象(I/O abstraction,即BIO)是openssl对于io类型的抽象封装,包括:内存、文件、日志、标准输入输出、socket(TCP/UDP)、加解密、摘要和ssl通道等。Openssl BIO通过回调函数为用户隐藏了底层实现细节,所有的类型bio的调用答题上是类似的。7.2 数据结构a. BIO_METHODst原创 2018-01-26 19:03:30 · 224 阅读 · 0 评论 -
08.openssl编程——配置文件
8.1 概述openssl采用自定义的配置文件获取配置信息。段信息,段信息由[xxx]来表示,其中xxx为段标识;属性-值信息,表示方法为a=b,这种信息可以在一个段内页可以不属于任何段。典型配置文件为apps/openssl.cnf(同时该文件也是openssl最主要的配置文件) # OpenSSL example configuration file.oid_原创 2018-01-26 19:03:32 · 282 阅读 · 0 评论 -
09.openssl编程——随机数
9.1 随机数随机数是一种无规律的数,但是真正做到完全无规律也比较困难,所有一般将它称为伪随机数。9.2 openssl随机数数据结构与源码a.openssl生成随机数的源码位于crypto/rand目录下。openssl维护一个内部随机状态数据(md_rand.c中定义的全局变量state和md),通过对这些内部数据计算摘要来生成随机数struct rand_meth_s原创 2018-01-26 19:03:35 · 1144 阅读 · 0 评论 -
10.openssl编程——文本数据库
10.1 概述openssl实现了一个简单的文本数据库,他可以从文件读取数据和将数据写到文件中,兵切可以根据关键字段来查询数据。 10.2 数据结构typedef struct txt_db_st {int num_fields; 表明文本数据库的列数STACKP_OF(OPENSSL_PSTRING) *data; 用来存放数据,每一行数据组织成为一个字符串数组(每个原创 2018-01-26 19:03:38 · 202 阅读 · 0 评论 -
11.openssl编程——大数
11.1 介绍大数一般指的是位数很多的数。计算机表示的数的大小是有限的,精度也是有限的,精度也是有限的,它不能支持大数运算。密码学中采用了很多大数计算,为了让计算机实现大数运算,用户需要定义自己的大数表示方式及实现各种大数运算。Openssl为我们提供了这些功能,主要用于非对称算法。 11.2 openssl大数表示struct bignum_st{BN_ULONG *原创 2018-01-26 19:03:40 · 713 阅读 · 0 评论 -
12.openssl编程——BASE64编码介绍
12.1 BASE64编码介绍BASE64编码是一种常用的将十六进制数据转换为可见字符编码。与ASCII码相比,它占用的空间较小。BASE64编码在rfc3548中定义。 12.2 BASE64编解码原理将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制,将24bit的二进制数据,得到一个数字:0-63。 Value Encoding Value原创 2018-01-26 19:03:43 · 317 阅读 · 0 评论 -
13.openssl编程——ASN1库
13.1 ASN1简介ANS.1(Abstract Syntax Notation One, X.208),是一套灵活的标记语言,他允许定义多种数据类型,从integer、bit string、一类的简单类型到结构化类型,如set和sequence,并且可以使用这些类型构建复杂类型。DER编码是ANS.1定义的将对象描述数据编码成8位串值的编码规则,他给出了对ANS.1值(对象的类型和值原创 2018-01-26 19:03:46 · 6444 阅读 · 4 评论 -
14.openssl编程——错误处理
14.1 概述程序设计时,一般通过函数的返回值来判断是否调用成功。设计良好的函数以及好的错误处理能版主调用者快速找到错误:*错误码*出错文件以及行号*错误原因*出错函数*出错库*出错模块与类别信息*错误堆栈信息等 14.2 数据结构openssl中,通过unsgined long 类型来存放错误信息。它包含三部分内容:库代码、函数代码以及错误原因代码。原创 2018-01-26 19:03:49 · 501 阅读 · 0 评论 -
15.openssl编程——摘要与HMAC
15.1 概述摘要函数用于将任意数据通过计算获取唯一对应值,而这个值的长度比较短。他是一种多对一关系。用户需要对数据进行签名时,不可能对大的数据进行运算。如果只对摘要结果进行计算,则会提供运算速度。常用摘要算法有:sha\sha1\sha256\md5\md4\md2\mdc2或ripemd160 15.2 openssl摘要实现openssl摘要实现的源码位于crypto目录下的原创 2018-01-26 19:03:51 · 312 阅读 · 0 评论 -
16.openssl编程——数据压缩
16.1 简介数据压缩是将原有数据通过某种压缩算法计算得到相对数据量小的过程。这种过程是可逆的,即能通过压缩后的数据恢复出原数据。数据压缩能够节省存储空间,减轻网络负载。在即需要加密又需要压缩的情况下,必须先压缩在加密,次序不能颠倒。 16.2 数据结构openssl通过函数地址来抽象数据压缩a.COMP_METHOD该数据结构定义了具体压缩/解压函数,这些函数可原创 2018-01-26 19:03:54 · 287 阅读 · 0 评论 -
17.openssl编程——RSA介绍
17.1 RSA介绍RSA算法是一个广泛使用的公钥算法。器密钥包括公钥和私钥。他能用于数字签名、身份认证以及密钥交换。RSA密钥信息主要包括:* n:模数* e:公钥指数* d:私钥指数* p:最初的大素数* q:最初的大素数* dmp1:e * dmp1 = 1 (mod(p-1))* dmp1:e * dmp1 = 1 (mod(q -1))* iqmp:原创 2018-01-26 19:03:57 · 921 阅读 · 0 评论 -
19.openssl编程——DH
19.1 DH算法介绍DH算法实质是一个通信双方进行密钥协商的协议:两个实体中的任何一个使用自己的私钥和另一个实体的公钥,得到一个对称密钥,这一对称密钥其他实体都计算不出来。首先,发送方和接收方设置相同的大数数n和g,这两个不是保密的,他们可以通过非安全通道来协商这两个素数。协商密钥:a.发送方选择一个大随机整数x,计算X=g^x mod n,发送X给接收者b.接收方选择一个大原创 2018-01-26 19:03:59 · 762 阅读 · 0 评论 -
18.openssl编程——DSA
18.1 DSA简介Digital Signature Algorithm(DSA)算法是一种公钥算法。a.p一个大素数,长度为L(64的正数倍)比特。b.q一个160比特素数c.g=h(p-1)/q mod p,其中h小于p-1。d.xe.y= gx mod p 其中x为私钥,y为公钥.p、q和g是公开信息(openssl中称为密钥参数)DSA签名包括两个部分原创 2018-01-26 19:04:02 · 1682 阅读 · 0 评论 -
20.openssl编程——椭圆曲线
20.1 ECC介绍椭圆曲线(ECC)算法一种公钥算法,他比流行的RSA算法很多优点:a.安全性能更高,如果160位ECC与1024位RSA、DSA有相同的安全强度b.计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC比RSA、DSA快得多c.存储空间占用小、ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,d.带宽要求低。 20.2 openssl的原创 2018-01-26 19:04:05 · 1142 阅读 · 0 评论 -
21.openssl编程——EVP
21.1 EVP简介Openssl EVP (high-level cryptographic functions)提供丰富的密码学中的各种函数。EVP主要封装如下功能函数:a.实现了base64编解码BIOb.实现了加解密BIOc.实现了摘要BIOd.实现了reliableBIO;e.封装了摘要算法f.封装了对称加解密算法g.封装了非对称密钥的加密(公钥)、解原创 2018-01-26 19:04:08 · 800 阅读 · 0 评论 -
24.openssl编程——通用数据结构
24.1 通用数据结构本文中数据结构主要指的是证书相关各个数据结构。他们主要用在数字证书申请、数字证书和CRL中。*X509_ALGORX509算法*X509_VALX509有效时间*X509_PUBKEYX509公钥*X509_SIGX509摘要或者签名值*X509_NAME_ENTRYX509中的一项名臣*X509_NAMEX509名称集原创 2018-01-26 19:04:11 · 572 阅读 · 0 评论 -
23.openssl编程——Engine
23.1 Engineopenssl硬件引擎(Engine)能够使用户比较容易地将自己的硬件加入到openssl中去,替换提供的软算法。一个Engine提供了密码计算中各种计算方法的集合,他用于控制opnessl的各种密码计算23.2 Engine支持的原理Openssl中的许多数据结构不仅包含数据本身,还包含各种操作,并且这些操作是可替换的。Openssl中这些结构集合一般叫做原创 2018-01-26 19:04:13 · 1377 阅读 · 0 评论 -
22.openssl编程——PEM格式
22.1 PEM概述openssl使用PEM(Privacy Enhanced Mail)格式来存放各种信息,他是openssl默认采用信息方式。openssl中PEM文件一般包含如下信息:a.内容类型表明本文件存放的是什么信息内容,他的形式为"---------------BEGIN XXXX-------------------",与结尾的"-----------------EN原创 2018-01-26 19:04:16 · 1245 阅读 · 0 评论 -
25.openssl编程——证书申请
25.1 证书申请介绍生成X509数字证书前,一般先由用户提交证书申请文件,然后由CA来签发证书。a.用户生成自己的公私钥对b.构造自己的证书申请文件,符合PKCS#10标准。该文件主要包括了用户信息、公钥以及一些可选的属性信息,并用自己的私钥给改内容签名c.用户将证书申请文件提交给CAd.CA验证签名,提取用户信息,并加上其他信息,用CA的私钥签发数字证书。X509证原创 2018-01-26 19:04:19 · 431 阅读 · 0 评论 -
26.openssl编程——X509数字证书
26.1 X509数字证书数字证书是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合X509格式规范,还必须有CA的签名。用户不仅有自己的数字证书,还必须有对应的私钥。X509V3数字证书主要包含的内容有:a.证书版本b.证书序列号c.签名算法d.颁发者信息e.有效时间f.持有者信息g.公钥信息h.颁发者信息i.公钥信息j.原创 2018-01-26 19:04:22 · 1379 阅读 · 0 评论 -
29.openssl编程——PKCS7
29.1 概述加密消息语法(pkcs7),是各种消息存放的格式标准。这些消息包括:数据、签名数据、数字信封、签名数据数字信封、摘要数据和加密数据。29.2 数据结构typedef struct pkcs7_signed_st {ASN1_INTEGETR *version;STACK_OF(X509_ALGOR) *MD_ALGS;STACK_OF(X509) *cer原创 2018-01-26 19:04:24 · 1207 阅读 · 0 评论 -
28.openssl编程——CRL
28.1 CRL介绍证书撤销列表(Certificate Revocation List, 简称CRL),是液体中包含撤销的证书列表的签名数据结构。CRL是证书撤销状态的公布形式,CRL就像信用卡的黑名单,用于公布某些数字证书不在有效。CRL是一种离线的证书状态信息。他一一定的周期进行更新。CRL可以分为完全CRL和增量CRL。在完全CRL中包含了所有的被撤销证书信息,增量CRL由一些列的原创 2018-01-26 19:04:27 · 910 阅读 · 0 评论 -
30.openssl编程——PCKS12
30.1 概述pkcs12(个人数字标准)用于存放用户证书、crl、用户私钥以及证书链,pkcs12中的私钥是加密存放的。30.2 openssl实现openssl的pkcs12实现在crypto/pkcs12目录,有如下源码:目录架构用途p12_add.c处理PCKS12_SAFEBAG, PKCS12_SA原创 2018-01-26 19:04:29 · 809 阅读 · 0 评论 -
27.openssl编程——OCSP
27.1 概述在线证书状态协议(OCSP, Online Certificate Status Protocol,rfc2560)用于实时表明证书状态。OCSP客户端通过查询OCSP服务来确定一个证书的状态。OCSP可以通过HTTP协议来实现。27.2 Openssl实现openssl在crypto/ocsp目录实现了ocsp模块,包括客户端和服务端各种函数*ocsp_asn.原创 2018-01-26 19:04:32 · 1481 阅读 · 0 评论 -
31.openssl编程——SSL实现
31.1 概述SSL协议最先由netscape公司提出,包括sslv2和sslv3两个版本。当前形成标准为tls协议(rfc2246规范)和DTLS(rfc4347,用于支持UDP协议)。sslv3和tls协议大致一样。SSL协议能够保证通信双方的信道安全。他能提供数据加密、身份验证以及消息完整性保护。SSL协议通过客户端和服务端握手来协商各种算法和密钥。31.2 openss原创 2018-01-26 19:04:35 · 1281 阅读 · 0 评论 -
01.openssl基础介绍
本章介绍SSL和OpenSSL库。 我们给出一个概述涉及部署图书馆的最大安全风险,并讨论如何缓解他们在高层次。 我们也看看如何使用OpenSSL和Stunnel来保护第三方软件,例如没有内置SSL支持的POP服务器。1.1 Cryptography for the Rest of Us1.1.1 Goals of Cryptography有许多不同的加密算法,每个加密算法可以为应用程序提供以下一项或原创 2017-12-20 20:05:38 · 482 阅读 · 2 评论