PKI基础知识
PKI概念
所有提供公钥加密和数字签名服务的系统都可叫做PKI系统
PKI的定义
PKI是一种遵循标准的利用公钥理论和技术建立的提供安全服务的基础设施(基础设施的概念??)
主要功能
保密性
完整性
真实性
抗抵赖
PKI组件
- 公钥证书
由可信实体签名的电子记录,记录将公私钥对所有者的身份捆绑在一起 - 证书撤销列表(CRL)
通常由同一个发证实体签名。当公钥的所有者丢失私钥,或者改换姓名时,需要将原有的证书作废 - 认证机构(CA)
一个可信实体,发放和作废公钥证书,并对各作废证书列表签名 - 注册机构(RA)
(一个可选PKI实体与CA分开),不对数字证书或证书撤销列表CRL签名,而负责记录和验证部分有关信息特别是主体的身份,这些信息用于CA发发行证书和CRL以及证书管理中。 - 证书管理机构(CMA)
将CA和RA结合起来称CMA - 证书存档库(Reposity)
一个电子站点,存放证书和作废证书列表CRL,CA在用证书和作废证书 - 署名用户(Subscriber)
作为主体署名证书并依据策略使用证书和相应密钥的实体 - 依赖方(Relying party)
一个接收包括证书和签名信息的人或者机构,利用证书提供的公钥验证其有效性,与持证人建立保密通信,接收处于依赖的地位 - 最终用户(End User)
署名用户和依赖方的统称,也称末端实体,可以是人,也可以是机器,如路由器或计算机中运行程序,如防火墙
PKI应用系统
-
认证中心CA
CA 是PKI 的核心,CA 负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA还要负责用户证书的黑名单登记和黑名单发布。 -
X.500 目录服务器
X.500 目录服务器用于发布用户的证书和黑名单信息,用户可通过标准的LDAP协议查询自己或其他人的证书和下载黑名单信息。) 具有高强度密码算法(SSL)的安全WWW服务器(Secure socket layer(SSL)协议最初由Netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。 -
Web安全通信平台
Web 有Web Client 端和Web Server端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。 -
自开发安全应用系统
自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。完整的PKI包括认证政策的制定(包括遵循的技术标准、各CA之间的上下级或同级关系、安全策略、安全程度、服务对象、管理原则和框架等)、认证规则、运作制度的制定、所涉及的各方法律关系内容以及技术的实现等。 -
PKI体系核心-CA:
CA是具有权威性和公正性的第三方信任机构,负责发放和管理数字证书,其作用就像现实生活中办理证件的部门
-
CA的延伸部分-RA(RA是数字证书注册审批机构)
RA主要功能有:
填写用户注册信息
提交用户注册信息
审核:对用户申请进行审核,以决定批准还是拒绝用户的证书申请
发送生成证书申请:向CA提交生成证书请求
发放证书:将用户证书和私钥发放给用户
登记黑名单:对过期证书和因各种原因而撤销的证书及时登记,并向CA发送CRL管理
日志审计:维护RA的操作日志自身安全保证
PKI行业所涉及到产品
从下到上依次为:
基础硬件:密码机、密码卡,厂商包括:卫士通、三未信安等;
基础软件:PKI/CA软件系统,CA系统从逻辑上分为KMS(密钥管理系统)、LDAP(证书发布目录)、OCSP/CRL(证书状态查询)、CSS(证书签发系统)、RA(证书注册系统),厂商包括:格尔、吉大正元等,也有不少第三方CA具有相应产品,比如北京CA;
PKI中间件:基于数字证书的应用服务中间件,包括了身份认证服务器、电子签章系统、可信时间戳服务器、签名验签服务器、安全接入网关等,作为数字证书到应用系统之间的粘合层,PKI中间件为应用系统屏蔽了密码算法、数据编解码等细节,为上层应用提供简单易调用的API;
PKI客户端:分为两部分,(1)是客户端软件,包括硬件驱动及接口;(2)客户端硬件,包括U盾,以及满足移动终端需要的TF卡、音频KEY、蓝牙KEY、SIMKEY,也有厂商实现了软硬一体化客户端装置,如安全盒子
PKI提供的基本服务
-
认证(Authentication)-采用数字签名技术,签名作用于相应的数据之上
被认证的数据 —— 数据源认证服务
用户发送的远程请求 —— 身份认证服务
远程设备生成的challenge信息 —— 身份认证 -
完整性(Integrity)-PKI采用了两种技术
数字签名:既可以是实体认证,也可以是数据完整性
MAC(消息认证码):如DES-CBC-MAC或者HMAC-MD5 -
保密性(Confidentiality)
用公钥分发随机密钥,然后用随机密钥对数据加密 -
不可否认(Non-repudiation)
发送方不可否认-数字签名
接受方的不可否认 -收条(reception)+ 数字签名(digital signature)
证书
- 概念
证书( Certificate), 有时候简称为Cert。PKI适用于异构环境中,所以证书的格式在所使用的范围内必须统一
证书是一个机构颁发给一个安全个体的证明,所以证书的权威性取决于该机构的权威性
一个证书中,最重要的信息是个体名字、个体的公钥、机构的签名、算法和用途
双证书机制:签名证书和加密证书分开
最常用的证书格式为X.509 v3
- 常见证书的格式(X.509 v3)
- 证书生命周期
- PKI常规的层次信任关系型
- 与PKI相关的标准
Certificates —— X.509 v.3
交叉认证 —— PKIX group in IETF(RFC 2459)
智能卡/硬件插件 PKCS #11
目录服务LDAP
密码学基础
密码主要功能
- 机密性:为了防止信息被窃听,对应的密码技术有对称密码和公钥密码。
- 完整性:为了防止信息被篡改,对应的密码技术有单向散列函数、消息认证码、数字签名。
- 认证:为了防止攻击者伪装成真正的发送者,对应的密码技术有消息认证码和数字签名。
- 不可否认性:为了防止发送者事后否认自己没有做过,对应的密码技术为数字签名。
信息安全和密码技术之间的关系可以用下图来表示:
常见密码技术
- 对称密码:也称为共享密钥密码、私钥密码等,是指在加密和解密时使用同一密钥的方式。
- 公钥密码:也称为非对称密码,是指在加密和解密时使用不同的方式。对称密码和公钥密码可以保证数据的机密性。
- 单向散列函数:MD5、SHA-1,就是单向散列函数的例子,使用单向散列函数可以计算出散列值,散列值也称为哈希值、密码校验和、指纹、消息摘要。使用单向散列函数可以保证数据的完整性。
- 消息认证码:消息认证码是一种确认完整性并进行认证的技术,英文名称为message authentication code,简称为MAC。
- 数字签名:数字签名相当于现实世界中的盖章、签字的功能,使用数字签名可以识别篡改和伪装,还可以防止否认。
- 伪随机数生成器:伪随机数生成器并不直接解决信息安全问题,但它承担了密钥生成的重要职责。而密钥的重要性就不用多说了。
对称密码
- DES(Data Encryption Standard)是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特,即7个字节。DES的结构采用的是Feistel网络。Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。下图是Feistel网络中一轮的计算流程。DES是一种16轮循环的Feistel网络。)
一轮的具体计算步骤如下: 将输入的数据等分为左右两部分; 将输入的右侧直接发送到输出的右侧; 将输入的右侧发送到轮函数; 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列; 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。 其中,子密钥指的是本轮加密使用的密钥。每一轮的子密钥都是不同的。轮函数的作用则是根据“右侧”和子密钥生成对“左侧”进行加密的比特序列,它是密码系统的核心。 但是,这样一来“右侧”根据没有被加密,因此需要用不同子密钥对一轮的处理重复若干次,并在没两轮之间将左侧和右侧的数据对调。
- 三重DES
明文经过三次DES处理才能变成最后的密文,而由于DES的密钥长度为56比特,因此三重DES的密钥长度则为56*3=168比特。另外,从图中也可以发现,三重DES并不是进行3次DES加密,而是加密->*解密->加密的过程。这是为了向下兼容,即使用DES加密的密文,也可以通过三重DES进行解密。
三重DES的解密过程和加密相反,是以密钥3、密钥2、密钥1的顺序执行解密->加密->解密的操作。即将上图从明文到密文的箭头反过来就是解密的流程了。
- AES
AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。AES最终候选算法名单中,总共有5种算法,分为为:MARS、RC6、Rijndael、Serpent、Twofish。但最终被选定为AES的是Rijndael算法。
Rijndael使用的并不是Feistel网络,而是SPN结构。Rijndael加密中的一轮如下图所示,其分组为128比特,即16字节,加密过程经过4个步骤:SubBytes、ShiftRows、MixColumns、AddRoundKey。
分组模式
- 常见的分组模式(DES、AES都属于分组密码,它们只能加密固定长度的铭文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而迭代方法就称为分组密码的“模式”。分组密码有很多种模式,主要有:ECB、CBC、CFB、OFB、CTR。如果模式选择不恰当,就无法保证机密性。)
- ECB模式(ECB全称为Electronic Code Book,电子密码本模式,是最简单的一种模式,它直接将明文分割成多个分组并逐个加密,如下图,其中,加密和解密是指用分组密码算法加密和解密,其中也省略了密钥的描述。)
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。 优点:简单、快速,加密和解密都支持并行计算。而缺点也比较明显,因为每个明文分组都各自独立地进行加密和解密,如果明文中存在多个相同的明文分组,则这些分组最终会被转换为相同的密文分组。
这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码。另外,攻击者可以通过改变密文分组的顺序,或删除密文分组,或替换掉密文分组,就可以达到对明文操纵的目的,而无需破译密码。
- CFB模式(CFB全称为Cipher FeedBack,密文反馈模式,前一个密文分组会被送回到密码算法的输入端,如下图:)
CFB模式中,由密码算法所生成的比特序列称为密钥流(key stream)。需要注意的是,CFB模式解密时,密码算法执行的是加密操作,因为密钥流是通过加密操作来生成的。
CFB模式无法抵御重放攻击。因此,一般不建议使用了,推荐用CTR模式代替。
- OFB模式
OFB模式有个缺陷,如果对密钥流的一个分组进行加密后其结果碰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。因此,一般不建议使用了,推荐用CTR模式代替。
- CTR模式(CTR全称为CountTeR,计数器模式,是一种通过逐次累加的计数器进行加密来生成密钥流的流密码,如下图:)
CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。计数器分为两部分,前部分为nonce,这和初始化向量一样,也是一个随机比特序列;后部分为分组序号。
从图中还可以知道,CTR模式对每个分组的处理是相对独立的,这就意味着加密和解密都能够实现并行计算。
CTR模式在错误和机密性方面都具有不错的性质,也没有上面提到的CFB和OFB的弱点,因此,现在都推荐使用CTR了。
初始化向量问题
CBC、CFB、OFB都用到了初始化向量IV,而CTR则使用了计数器,计数器的nonce部分和初始化向量IV是一样的,只是叫法不同而已。关于初始化向量IV,是一个随机比特序列,为了提高安全性,建议每次加密时都使用不同的值,这样的话,即使有两条相同的明文信息,加密后的密文也是不同的。但是,每一次发送端使用IV对明文加密后,接收端也需要使用同样的IV才能够解密,那么,发送端和接收端如何同步这个IV呢?关于这个问题,书中没有提到。于是,只好自己寻找解决方案。
最简单的方式可能就是,发送端每次发送信息时,将IV和加密后的密文一起发送给接收端。接收端收到信息后,就可以将收到的IV用于解密收到的密文了。而这种方式最明显的缺陷就是IV直接暴露给攻击者了,攻击者就可以利用IV发起攻击,比如使用CBC模式时,攻击者将IV进行比特反转,就可达到操纵明文的目的。攻击者将IV中的任意比特进行反转(1变0,0变1),则解密后的明文分组中相应的比特也会被反转。
为了避免将IV直接暴露,那将IV进行加密后再发送呢?因为IV的长度和一个分组的长度是等长的,这就不需要考虑分组迭代的问题,即不需要考虑使用什么模式了,直接用密码算法进行加密即可。加密后,攻击者再想通过比特反转IV来操纵明文就困难多了。
密钥配送问题(对称密钥)
- 通过事先共享密钥来解决
事先用安全的方式将密钥交给对方,就称为密钥的事先共享。这是密钥配送问题最简单的一种解决方法,但有其局限性。
公司内部开发的应用产品,客户端和服务端都是自己开发的,事先共享密钥就很简单,服务端人员生成密钥后直接给到客户端的开发人员就可以了。
但这种情况又会带来其他问题,比如密钥在客户端如何才能安全的保存。
一般,密钥都是通过硬编码或存为文件的形式保存在客户端的,那么客户端应用一旦被反编译,就很容易窃取到密钥了。
而如果是开放性平台,像微博开放平台、微信开放平台等,要做到事先共享密钥就很有难度了。
开发者在开放平台注册的应用,其密钥都是通过平台的管理端给到开发者的,也就是通过了网络,那就存在被窃听的风险了。
- 通过密钥分配中心来解决
当使用密钥分配中心时,需要通信的双方可以事先在密钥分配中心注册,然后密钥分配中心给每个注册方发送一个密钥,不同注册方的密钥是不同的。那么,当某个发送端需要向某个接收端发送消息时,通信流程如下:
1.发送端向密钥分配中心发起希望与接收端通信的请求;
2.密钥分配中心随机生成一个会话密钥,该会话密钥是供发送端和接收端在本次通信中使用的临时密钥,我们简称为TempKey;
3.密钥分配中心查询出发送端的密钥,即发送端注册时分配的密钥,我们简称为SenderKey;
4.密钥分配中心使用SenderKey对TempKey进行加密,加密后的密文称为CipherTempKeyToSender,并发送给发送端;
5.密钥分配中心用同样的方式查询出接收端的密钥,简称为ReceiverKey;
6.密钥分配中心再用ReceiverKey对TempKey进行加密,加密后的密文称为CipherTempKeyToReceiver,并发送给接收端;
7.发送端对来自密钥分配中心的CipherTempKeyToSender,用自己的密钥即SenderKey进行解密,得到TempKey;
8.发送端将要发送给接收端的消息用TempKey进行加密,然后发送给接收端;
9.接收端对来自密钥分配中心的CipherTempKeyToReceiver,用自己的密钥即ReceiverKey进行解密,也得到TempKey;
10.接收端收到发送端的密文后,用TempKey对密文进行解密;
11.通信完毕,发送端和接收端都删除TempKey。 这个通信过程还挺复杂的,总的来说就是,发送端和接收端通信时是使用密钥分配中心分配的临时密钥进行加密和解密的。
这种方案,密钥分配中心的安全性就显得非常重要了。如果攻击者入侵了密钥分配中心,盗取到所有密钥,则后果很严重。
- 通过Diffie-Hellman密钥交换来解决
在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息,而这些信息即便被窃听者窃听到也没有问题。根据所交换的信息,双方可以各自生成相同的密钥,而窃听者却无法生成相同的密钥。
虽然这种方法叫“密钥交换”,但实际上双方并没有真正交换密钥,而是通过计算生成出了一个相同的共享密钥。因此,这种方法也称为Diffie-Hellman密钥协商。支撑Diffie-Hellman密钥交换算法的是有限群的离散对数问题的复杂度。
-
通过公钥密码来解决
-
RSA非对称加密算法
-
公钥密码问题
1.公钥密码处理速度远远低于对称密码
2.公钥密难以抵御中间人攻击(通过公钥认证书预防次问题)
-
混合密码系统
从图中就可得知: 1.会话密钥是随机生成的,因此,每次加密的会话密钥都会不同; 2.混合密码系统的明文是用对称密码加密的,而加密使用的密钥就是上一步生成的会话密钥; 3.用公钥密码对会话密钥进行加密,形成了加密后的会话密钥; 4.将加密后的会话密钥和加密后的消息组合在一起,就是混合密码系统的密文。
单向散列函数
单向散列函数特点
- 根据任意长度的消息计算出固定长度的散列值
- 能够快速计算出散列值
- 具备单向性
- 消息不同散列值也不同(碰撞现象)
- 常见单向散列函数(MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3)
单向散列函数可以用于完整性检查
消息认证码
- 概念(消息认证码(message authentication code)是一种确认完整性并进行认证的技术,简称为MAC。消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,它可以输出固定长度的数据,这个数据称为 MAC 值。)
- 消息认证常见实现方法(HMAC)
数字签名(完整性和防否认性)
公钥证书
- 公钥证书的概念:公钥证书(Public-Key Certificate,PKC)和驾照类似,一般会记有姓名、组织、邮箱地址等个人信息,以及属于本人的公钥,并由认证机构(Certification Authority、Certifying Authority,CA)施加数字签名。
- 证书应用场景
公钥基础设施(PKI)
- 基本概念(公钥基础设施(Public-Key Infrastructure)是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。公钥基础设施一般根据其英语缩写而简称为PKI。PKI只是一个总称,而并非指某一个单独的规范或规格。比如,使用最广泛的X.509 规范也是PKI的一种。)
- PKI的组成要素主要3个
用户:使用PKI的人
认证机构:颁发证书的人
仓库:保存证书的数据库
密钥
常见密钥长度:DES的密钥长度为56比特(7字节),密钥空间为2^56 ,三重DES密钥长度为168比特(21字节),DES-EDE3的密钥空间为2^168,AES的密钥长度则可以从128、192和256比特中进行选择,三者的密钥空间也是不小的。
随机数
- 随机数应用场景:
生成密钥
生成密钥对
生成初始化向量(IV)
生成nonce
生成随机盐 - 随机数的特性
随机性
不可预测性
不可重现性 - 随机数生成器真伪(从不可重现的物理现象中获取信息而生成数列,靠软件生成的随机数叫伪随机数生成器)
- 常见的伪随机数生成器
4.1. 杂乱的方法(杂乱的方法就是使用杂乱无章的算法来生成随机数,但这种方法其实并不可取。一是因为复杂算法所生成的数列大多数具有很短的周期(即短数列的不断重复);二是因为如果程序员不能够理解算法的详细内容,那么就无法判断所生成的随机数是否具备不可预测性。)
4.2. 线性同余法(线性同余法就是将当前的伪随机数值乘以 A 再加上 C,然后将除以 M得到的余数作为下一个伪随机数。其中,A、C、M都是常量,且 A 和 C 需要小于 M。C 语言的库函数 rand,以及Java 的Random 类,都采用了线性同余法。线性同余法并不具备不可预测性,因此不可以用于密码技术。)
4.3. 单向散列函数法(使用单向散列函数可以编写出具备不可预测性的伪随机数列(即强伪随机数)的伪随机数生成器。单向散列函数的单向性是支撑伪随机数生成器不可预测性的基础。)
4.4. 密码法(也可以使用密码来编写能够生成强伪随机数的伪随机数生成器。既可以使用 AES 等对称密码,也可以使用 RSA等公钥密码。密码的机密性是支撑伪随机数生成器不可预测性的基础。)
4.5. ANSI X9.17(ANSI X9.17 伪随机数生成器的结构则有点复杂,PGP 密码软件就使用了这种方法。)
PGP
基本概念(PGP 将多种密码技术进行了完美的组合,其具备了现代密码软件所必需的几乎全部功能,包括但不限于:对称密码、公钥密码、数字签名、单向散列函数、证书、压缩、大文件的拆分和拼合、钥匙串管理等。)
SSL、TLS
- SSL/TLS最广泛的应用就是套接HTTP上
- TLS安全协议可分为两层:TLS记录协议和TLS握手协议
TLS记录协议在TLS握手协议的下层,负责数据封装、压缩、加密等功能。
而TLS握手协议则用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换密钥等。
TLS握手协议又分为4个子协议:握手协议、密码规格变更协议、警告协议和应用数据协议。
- TLS握手协议
TLS握手协议可分为4个子协议,其中,握手协议是最复杂的一个子协议,其过程如下图:
- ClientHello(客户端->服务器) 客户端向服务器发送ClientHello消息,消息内容主要包括:可用的版本号、当前时间、客户端随机数、会话ID、可用的密码套件清单、可用的压缩方式清单。
- ServerHello(服务器->客户端) 对于客户端发送的ClientHello消息,服务器会返回一个ServerHello消息,消息内容主要包括:使用的版本号、当前时间、服务器随机数、会话ID、使用的密码套件、使用的压缩方式。这一步确定了通信中使用的“版本号”、“密码套件”和“压缩方式”。
- Certificate(服务器->客户端) 服务器再向客户端发送Certificate消息,主要是证书清单。首先发送的是服务器的证书,然后会按顺序发送对服务器证书签名的认证机构的证书。
- ServerKeyExchange(服务器->客户端) 当Certificate消息不足以满足需求时,服务器会向客户端发送ServerKeyExchange消息。具体所发送的消息内容会根据所使用的密码套件而有所不同。
- CertificateRequest(服务器->客户端) CertificateRequest消息用于服务器向客户端请求证书,这是为了进行客户端认证。消息内容还包括:服务器能够理解的证书类型清单和认证机构名称清单。当不使用客户端认证时,不会发送CertificateRequest消息。
- ServerHelloDone(服务器->客户端) 服务器发送ServerHelloDone消息则表示从ServerHello消息开始的一系列消息的结束。
- Certificate(客户端->服务器) 当服务器发送了CertificateRequest消息时,则客户端会发送Certificate消息,将自己的证书同消息一起发送给服务器。如果服务器没有发送CertificateRequest消息,客户端则不会发送Certificate消息。
- ClientKeyExchange(客户端->服务器) 客户端发送ClientKeyExchange消息。当密码套件中保护RSA时,会随消息一起发送经过加密的预备主密码。当密码套件中包含Diffie-Hellman密钥交换时,会随消息一起发送Diffie-Hellman的公开值。预备主密码是由客户端生成的随机数,之后会被用作生成主密码的种子。根据预备主密码,服务器和客户端会计算出相同的主密码,然后再根据主密码生成:对称密码的密钥、消息认证码的密钥、对称密码的CBC模式中使用的初始化向量(IV)。
- CertificateVerify(客户端->服务器) 客户端只有在服务器发送CertificateRequest消息时才会发送CertificateVerify消息。这个消息的目的是向服务器证明自己的确持有客户端证书的私钥。为了实现这一目的,客户端会计算“主密码”和“握手协议中传送的消息”的散列值,并加上自己的数字签名后发送给服务器。
- ChangeCipherSpec(客户端->服务器) 客户端发送ChangeCipherSpec消息表示要切换密码。实际上,这不是握手协议的消息,而是密码规格变更协议的消息。在ChangeCipherSpec消息之前,客户端和服务器之间以及交换了所有关于密码套件的信息,因此在收到这一消息时,客户端和服务器会同时切换密码。在这一消息之后,TLS记录协议就开始使用双方协商决定的密码通信方式了。
- Finished(客户端->服务器) 客户端发送Finished消息表示握手协议到此结束。这个消息其实是使用切换后的密码套件来发送的。实际负责加密操作的是TLS记录协议。
- ChangeCipherSpec(服务器->客户端) 这次轮到服务器发送ChangeCipherSpec消息了,表明服务器要切换密码了。
- Finished(服务器->客户端) 服务器也同样发送Finished消息表明握手协议到此结束。这个消息同样使用切换后的密码套件来发送。实际负责加密操作的也是TLS记录协议。
- 切换至应用数据协议 在此之后,客户端和服务器会使用应用数据协议和TLS记录协议进行密码通信。
密码学
- Base64
编码规则:将每三个字节作为一组,一共2个二进制位。
将这24个二进制位分为四组,每个组有6个二进制位
在每个组前面加两个00,扩展成32个二进制位,即四个字节
根据映射表,得到扩展的每一个字节对应符号,得到Base64的编码值
填充
并不是加密算法,违反了加密算法公开密钥不公开的原则
补位规则(采用补=一般一个=或两个=) - 对称密钥算法
加密Key=解密key
常用算法包括DES 3DES AES RC4 SM1 SM4(国产)
优点:加密速度快,便于实现和大规模生产
缺点:需要保障密钥安全,无法用来签名和抵抗依赖
分组密码:一次加密解密操作作用用于一个数据块,例如64位算法:DES 3DES
流密码:一次加密解密作用用于一位或一个字节算法:RC4 - 电子密码本模式
优点:简单 有利于并行计算 误差不会被传递
.缺点:不能隐藏明文的模式 可能对明文进行主动攻击 - 密码分组链模式
优点:不容易主动攻击,安全性好于ECB适合传输长度长的报文,是SSL、IPSec的标准。
缺点:不利于并行计算 误差传递 需要初始化向量IV - 非对称密钥算法
公开密钥密码体制、双密钥密码体制 主流非对称算法:RSA Elgamal(离散对数) ECC(椭圆曲线)
特点:一个密钥公开,称公钥 一个密钥保密,称私钥 常用算法:RSA ECC Elgamal
优点:密钥分配,不必保持信道的保密、可以用来签名和防抵赖
在RSA加密算法,由于PANDING的不一致,会导致加密结果不一致:使用NoPadding加密结果一致,使用PKS1Padding加密结果不一致
RSA签名结果每一次一致 ECC每次签名不一致 - 对称密码和非对称密码结合
使用对称密码加密数据
协商对称对称密钥算法
非对称密码加密密钥:公钥加密密钥 私钥解密
-数字证书解决了数据完整性和不可否认性 - HASH算法
特点:输入长度不定,输出长度不位定值
不可逆
碰撞几率大
应用场景:密码 签名(用于确保同一个人操作) - PKI基础知识(公钥基础设施)
CA(权威认证机构)
RA(注册中心)
LDAP(数字证书存储库LDAP)
KMC(密钥备份及恢复系统)
CRL(证书作废系统)
RADS(应用接口) - 数字证书基本概念()
版本号-标识书的版本(v1 v2 v3)
序列号-证书的唯一标识符 签名-签名算法标识符
颁发者-证书颁发者可识别名
有效期-证书有效时间段
主体-证书拥有者的可识别名
主体公钥信息-主体的公钥
颁发者唯一标识符-证书颁发者唯一标识符
主体唯一标识符 - SSL协议
Secure Socket Layer安全套接层和Transport layer Security传输安全协议(IETF TLS v1)协议是目前Intetnet使用最广泛的安全协议
MS IE和其他主流浏览器内置SSL 客户端
为基于TCP/IP协议的客户、服务器模式的应用提供安全访问机制:客户-服务器身份认证 客户-服务器之间数据传输通道加密 保证数据传输过程中的私密性、完整性。
短连接(每次请求都新建一次连接) 长连接(连接上超时断开) - 按照保密的内容分:
基于算法的加密算法:数据保密性基于保持算法的秘密
基于密钥的加密算法:数据保密性基于对密钥的保密 - 非对称密码体制
-互联网上密钥管理 私钥加密公钥公开 - SM2私钥培训
私钥格式
流程 - 数字签名
原文hash—私钥加密hash值
HMAC——HASH,P_HASH和PRF - DH/ECDH密钥交换
- SSL-TLS四步握手
PKI(公钥基础设施)系统深入介绍
- PKI组成:证书认证机构CA、PKI应用、应用编程接口和PKI标准
- PKI采用证书进行公钥管理,通过第三方的可信任结构(认证中心即 CA),把用户的公钥和用户的其他标识信息捆绑在一起,其中包括用户名和电子邮件地址等信息,以在Internet网上验证用户信息,PKI把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的安全传输。
- PKI主要目的是通过自动管理密钥和证书,为用户建立起一个安全环境,使用户可以在多种应用环境下方便的使用加密和数字签名技术,从而保证网上数据的机密性、完整性、有效性。数据的机密性是指数据在传输过程中,不能被非授权者偷看;数据的完整性是指数据在传输过程中不能被非法篡改;数据的有效性是指数据不能被否认。
- PKI标准化主要两个方面:
公钥加密标准PKCS 由Internet工程任务组IETF(Internet Engineering Task Force)和PKI工作组PKIX(Public Key Infrastructure Working Group)所定义的一组具有互操作性的公钥基础设施协议