刚进公司,在实习期需要了解很多关于加解密算法和证书相关的东西,我以写博客的方式把我近1个多月了解的东西整理出来传授给大家,大家觉得可以的话请不要吝啬你们的赞。
目录
通过LDAP进行证书CRL验证和OCSP方式验证有什么区别?
Pkcs7、Pkcs1、attach报文、detached报文、RAW等概念
SSL协议认证握手流程 原文:https://blog.csdn.net/chris_hee/article/details/83262745
什么是PKI
PKI的基础技术包括数据保护 ,数字签名 ,数据完整性验证, 抗抵赖性 , 数组信封等。
完整的PKI机构必须有以下5大系统:
- 权威认证机构(CA)
- 注册中心(RA) 和证书存储库(LDAP)
- 证书管理机构/证书备份与恢复系统(KMC)
- 证书作废系统(CRL)
- 应用接口(RADS)
证书申请流程
- 用户到RA(证书注册中心)提交申请
- USEBKEY生成签名密钥对,同时产生CSR(证书签名请求文件) ,传递给RA
- RA将用户信息和CSR提交个CA(证书权威认证机构)
- CA向KMC(证书管理机构)请求加密密钥,同时提交用户的签名公钥
- KMC生成加密密钥对,使用用户的签名公钥对生成的加密私钥进行加密
- KMC将经过签名公钥加密的加密私钥和加密公钥发送给CA
- CA将用户信息和签名和加密公钥签名,生成证书
- 发布证书
- RA从CA下载证书和经过签名公钥加密的私钥
- 下载和安装证书和经过签名公钥加密过的私钥
加密与解密
公钥加密,私钥解密
签名认证
私钥加密叫做签名,公钥解密叫做认证(验签),具有抗抵赖性,不是该私钥的公钥解不了密,所以具有验证性
数字信封
对称加密和非对称加密都有着自己各自的优点。
对称加密加解密运算非常快,适合处理大批量数据,非对称密码算法公私钥分离,适合密钥分发和管理,但运算速度慢,不适合大批量处理数据。若能够将对称密码算法和非对称密码算法的优点结合起来,既能够处理大批量的的数据,又能高效的分发管理密钥,于是数字信封由此诞生。
数字信封的原理是采用对称密码算法对大批量数据进行加密,然后采用非对称密码算法对其中的对称密钥进行加密;解密过程时,首先用非对称密码算法解密获取对称密钥,然后使用对称密钥解密数据,获取数据明文。
数字签名
将数据明文通过Hash函数生成数字摘要,然后通过加密私钥进行加密,然后将数字摘要和数据明文一起发送给接收者,接收者只有通过发送者的公钥才能解密获取数字摘要,然后将原文通过相同的Hash函数生成摘要与获取到的摘要进行对比,如果一样就是正确的原文。
证书包含的内容
- 版本号
- 序列号
- 签名
- 颁发者
- 有效期
- 主体
- 主体公钥信息
- 主体唯一标识符
- 颁发者唯一标识符
- 扩展
通过LDAP进行证书CRL验证和OCSP方式验证有什么区别?
一般对于证书状态的查询,是通过LDAP协议从证书存储的目录服务器,将CRL下载到自己的机器上,再根据CRL了解证书的目前状况。但CRL自身存在着一些缺点(如:延时性,文件过大和重复下载等),OCSP就是针对这些缺点所推出的,在线证书状况协议,此协议在1999年6月为IETF所接收
常见的对称加密和非对称加密算法
常见的对称加密算法: DES , 3DES ,RC , RC4,AES等
常见的非对称加密算法: RSA ,DSA ,ECC
四种算法模式及其各自的优缺点
- 电子密码本(Eletronic CoodBook, ECB)
- 密码分组链(Cipher Block Chaining , CBC)
- 输出反馈(Output FeedBack , OFB )
- 密文反馈( Cipher FeedBack , CFB)
电子密码本模式
优点: 简单 ,有利于并行运算,误差不会被传送
缺点: 不能隐藏明文的模式,可能对明文进行主动攻击
密码分组链模式
优点:不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL,IPSec的标准
缺点:不利于并行运算 , 误差传递,需要初始化向量IV
密文反馈
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.误差传送:一个明文单元损坏影响多个单元;
3.唯一的IV;
输出反馈
优点:
1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.对明文的主动攻击是可能的;
3.误差传送:一个明文单元损坏影响多个单元;
base64编码原理与长度
长度计算:beforeEncode为Encode之前的字符串
if(beforeEncode.length%3!=0){ Encode.length = (beforeEncode.length/3+1)*4}
else{ Encode.length = (beforeEncode.length/3)*4}
Pkcs7、Pkcs1、attach报文、detached报文、RAW等概念
PKCS#1:RSA加密标准。PKCS#1定义了RSA公钥函数的基本格式标准,特别是数字签名。它定义了数字签名如何计算,包括待签名数据和签名本身的格式;它也定义了PSA公/私钥的语法。
PKCS#7:密码消息语法标准。PKCS#7为使用密码算法的数据规定了通用语法,比如数字签名和数字信封。PKCS#7提供了许多格式选项,包括未加密或签名的格式化消息、已封装(加密)消息、已签名消息和既经过签名又经过加密的消息。
签名类型一共有三种,如下
1,Attach签名:
它符合PKCS#7语法标准
其特点是将 数据原文,签名证书,签名算法,签名数据 封装成签名结果,因此验签名时只需要将签名结果提交到服务器进行验证。
2,Detached签名:
它符合PKCS#7语法标准
其特点是将 签名证书,签名算法,签名数据 封装为签名结果,因为不包含数据原文,因此验签名时需要将数据原文和签名结果提交到服务器进行验证。
3,RAW签名:
又称为裸签名
其特点是将签名数据封装成签名结果,因此验签名时需要将数据原文,签名证书,签名算法一起提交到服务器进行验证。
Der、 Cer、 Pfx、 Pem等相关概念
相关链接为:https://blog.51cto.com/wushank/1915795
PEM – Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是 openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
-
内容类型:表明本文件存放的是什么信息内容,它的形式为“——-BEGIN XXXX ——”,与结尾的“——END XXXX——”对应。
-
头信息:表明数据是如果被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量 iv。
-
信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输。
DER – 辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。
CER - 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.证书中没有私钥,DER 编码二进制格式的证书文件
PFX/P12 - predecessor of PKCS#12,包含公钥和私钥的二进制格式证书
各种算法密钥长度
加密算法 | 密钥长度(bit) | 算法种类 | 介绍 |
SM1 | 128 | 对称加密 | 算法不公开 |
SM2 | 公钥64*8=512位,私钥32*8 = 256位 | 非对称加密 | 基于ECC, 比2048位的RSA加密度还高 |
SM3 | ----------Hash----256---- | --------杂凑算法----- |
消息摘要,校验结果为256位 |
SM4 | 128 | 对称加密 | 密钥长度和分组长度均为128位 |
DES | 56 | 对称加密 | 奇偶验证位8位 |
3DES | 112,168 | 对称加密 | 是基于DES的对称算法,使用两个独立密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度. 双倍加密(左边8字节加密 --> 右边8字节加密 --> 左边8字节加密) 三倍加密 (左边8字节加密 --> 中间8字节加密 --> 左边8字节加密) |
RC2 | 密码长度可变 (8-1024) |
对称加密 | 变长密钥对大量数据进行加密,比 DES 快.它的输入和输出都是64bit。密钥的长度是从1字节到128字节可变,但目前的实现是8字节(1998年) |
RC4 | 密码长度可变 (8-2048) |
对称加密 | 不同于 DES的是,RC4 不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密 |
RC5 | 密码长度可变 (0 - 2040) |
对称加密 | 密钥长度和迭代轮数均可变,密码长度由参数决定 |
BLOWFISH | 密码长度可变 (256-448) |
对称加密 | 运算速度很快, 军事级、可通过改变密钥长度调整安全性 |
TwoFish | 支持128、196、256位的密钥长度 |
||
AES | 128(最好)、192、256 | 对称加密 | ,是下一代的加密算法标准,速度快,安全级别高 |
RSA | 1024(常用)、2048 | 非对称加密 |
一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的, |
ECC | 160(最好) | 非对称加密 | 椭圆曲线密码编码学 |
DSA | 1024 | 非对称加密 | 只能用作数字签名,是一种标准的 DSS(数字签名标准),严格来说不算加密算法, |
SSL协议认证握手流程 原文:https://blog.csdn.net/chris_hee/article/details/83262745
单向认证:
①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码 ”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
双向认证:
① 浏览器发送一个连接请求给安全服务器。
② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。
备注:上面所述的是双向认证 SSL 协议的具体通讯过程,这种情况要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。