文章分类 - openssl编程笔记
拥抱开源openssl,分享所思所想所见所闻
摘要:3.1 密钥管理技术 一个好的密码通信系统依赖的不是算法的机密性,而是密钥的机密性。在一个使用的密码通信系统中,安全地产生、保存、分发和使用密钥是整个系统安全性得到保证的前提。 3.1.1 密钥生成 *如何安全地生成密钥。即如何生成可信任的密钥,保证用户得到的密钥是安全的,生成密钥的及其或程序是可信
阅读全文
摘要:27.1 概述 在线证书状态协议(OCSP, Online Certificate Status Protocol,rfc2560)用于实时表明证书状态。OCSP客户端通过查询OCSP服务来确定一个证书的状态。OCSP可以通过HTTP协议来实现。 27.2 Openssl实现 openssl在cry
阅读全文
摘要:31.1 概述 SSL协议最先由netscape公司提出,包括sslv2和sslv3两个版本。当前形成标准为tls协议(rfc2246规范)和DTLS(rfc4347,用于支持UDP协议)。sslv3和tls协议大致一样。 SSL协议能够保证通信双方的信道安全。他能提供数据加密、身份验证以及消息完整
阅读全文
摘要:30.1 概述 pkcs12(个人数字标准)用于存放用户证书、crl、用户私钥以及证书链,pkcs12中的私钥是加密存放的。 30.2 openssl实现 openssl的pkcs12实现在crypto/pkcs12目录,有如下源码: 目录架构用途p12_add.c处理PCKS12_SAFEBAG,
阅读全文
摘要:28.1 CRL介绍 证书撤销列表(Certificate Revocation List, 简称CRL),是液体中包含撤销的证书列表的签名数据结构。CRL是证书撤销状态的公布形式,CRL就像信用卡的黑名单,用于公布某些数字证书不在有效。 CRL是一种离线的证书状态信息。他一一定的周期进行更新。CR
阅读全文
摘要:29.1 概述 加密消息语法(pkcs7),是各种消息存放的格式标准。这些消息包括:数据、签名数据、数字信封、签名数据数字信封、摘要数据和加密数据。 29.2 数据结构 typedef struct pkcs7_signed_st { ASN1_INTEGETR *version; STACK_OF
阅读全文
摘要:26.1 X509数字证书 数字证书是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合X509格式规范,还必须有CA的签名。用户不仅有自己的数字证书,还必须有对应的私钥。 X509V3数字证书主要包含的内容有: a.证书版本 b.证书序列号 c.签名算法 d.颁发者信息 e
阅读全文
摘要:25.1 证书申请介绍 生成X509数字证书前,一般先由用户提交证书申请文件,然后由CA来签发证书。 a.用户生成自己的公私钥对 b.构造自己的证书申请文件,符合PKCS#10标准。该文件主要包括了用户信息、公钥以及一些可选的属性信息,并用自己的私钥给改内容签名 c.用户将证书申请文件提交给CA d
阅读全文
摘要:22.1 PEM概述 openssl使用PEM(Privacy Enhanced Mail)格式来存放各种信息,他是openssl默认采用信息方式。openssl中PEM文件一般包含如下信息: a.内容类型 表明本文件存放的是什么信息内容,他的形式为" BEGIN XXXX ",与结尾的" END
阅读全文
摘要:23.1 Engine openssl硬件引擎(Engine)能够使用户比较容易地将自己的硬件加入到openssl中去,替换提供的软算法。一个Engine提供了密码计算中各种计算方法的集合,他用于控制opnessl的各种密码计算 23.2 Engine支持的原理 Openssl中的许多数据结构不仅包
阅读全文
摘要:24.1 通用数据结构 本文中数据结构主要指的是证书相关各个数据结构。他们主要用在数字证书申请、数字证书和CRL中。 *X509_ALGOR X509算法 *X509_VAL X509有效时间 *X509_PUBKEY X509公钥 *X509_SIG X509摘要或者签名值 *X509_NAME_
阅读全文
摘要:21.1 EVP简介 Openssl EVP (high-level cryptographic functions)提供丰富的密码学中的各种函数。 EVP主要封装如下功能函数: a.实现了base64编解码BIO b.实现了加解密BIO c.实现了摘要BIO d.实现了reliableBIO; e
阅读全文
摘要:20.1 ECC介绍 椭圆曲线(ECC)算法一种公钥算法,他比流行的RSA算法很多优点: a.安全性能更高,如果160位ECC与1024位RSA、DSA有相同的安全强度 b.计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC比RSA、DSA快得多 c.存储空间占用小、ECC的密钥尺寸和系
阅读全文
摘要:19.1 DH算法介绍 DH算法实质是一个通信双方进行密钥协商的协议:两个实体中的任何一个使用自己的私钥和另一个实体的公钥,得到一个对称密钥,这一对称密钥其他实体都计算不出来。 首先,发送方和接收方设置相同的大数数n和g,这两个不是保密的,他们可以通过非安全通道来协商这两个素数。 协商密钥: a.发
阅读全文
摘要: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.x<q e.y= gx mod p 其中x为私钥,y为
阅读全文
摘要:17.1 RSA介绍 RSA算法是一个广泛使用的公钥算法。器密钥包括公钥和私钥。他能用于数字签名、身份认证以及密钥交换。RSA密钥信息主要包括: * n:模数 * e:公钥指数 * d:私钥指数 * p:最初的大素数 * q:最初的大素数 * dmp1:e * dmp1 = 1 (mod(p-1))
阅读全文
摘要:16.1 简介 数据压缩是将原有数据通过某种压缩算法计算得到相对数据量小的过程。这种过程是可逆的,即能通过压缩后的数据恢复出原数据。数据压缩能够节省存储空间,减轻网络负载。 在即需要加密又需要压缩的情况下,必须先压缩在加密,次序不能颠倒。 16.2 数据结构 openssl通过函数地址来抽象数据压缩
阅读全文
摘要:15.1 概述 摘要函数用于将任意数据通过计算获取唯一对应值,而这个值的长度比较短。他是一种多对一关系。用户需要对数据进行签名时,不可能对大的数据进行运算。如果只对摘要结果进行计算,则会提供运算速度。常用摘要算法有:sha\sha1\sha256\md5\md4\md2\mdc2或ripemd160
阅读全文
摘要:14.1 概述 程序设计时,一般通过函数的返回值来判断是否调用成功。设计良好的函数以及好的错误处理能版主调用者快速找到错误: *错误码 *出错文件以及行号 *错误原因 *出错函数 *出错库 *出错模块与类别信息 *错误堆栈信息等 14.2 数据结构 openssl中,通过unsgined long
阅读全文
摘要:13.1 ASN1简介 ANS.1(Abstract Syntax Notation One, X.208),是一套灵活的标记语言,他允许定义多种数据类型,从integer、bit string、一类的简单类型到结构化类型,如set和sequence,并且可以使用这些类型构建复杂类型。 DER编码是
阅读全文