以下为 mindmanager 的预览
密码常用术语
明文
待加密的信息
密文
经过加密后的明文
加密
明文转为密文的过程
加密算法
明文转为密文的转换算法
加密密钥
通过加密算法进行加密操作作用的密钥
解密
将密文转为明文的过程
解密算法
密文转为明文的算法
解密密钥
通过解密算法进行解密操作作用的密钥
密码分析
截获密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程
主动攻击
攻击者非法入侵密码系统,采用伪造,修改,删除等手段向系统注入假消息进行欺骗。(对密文具有破环作用)
被动攻击
对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
密码体制
由明文空间,密文空间,密钥空间,加密算法和解密算法五部分构成
组成
明文空间
密文空间
密钥空间
加密算法
解密算法
密码协议
也称安全协议,指以密码学为基础的消息交换通信协议,目的是在网络环境中提供安全的服务
密码系统
指用于加密,解密的系统
柯克霍夫原则
Kerchoff原则
现代密码学设计的基本原则
算法应当公开,但是所有的密钥应当保密
数据的安全基于密钥而不是算法的保密。
即系统的安全取决于密钥,对密钥保密,对算法公开。
KM
Keypair Management用户密钥管理系统,提供对加密证书密钥进行全过程管理的功能。
PKI
定义
公钥基础设施(PKI)
PKI(Public Key Infrastructure)体系
Public Key Infrastructure公钥基础设施,是提供公钥加密和数字签名服务的系统或平台,
目的是为了管理密钥和证书安全并负责验证数字证书持有者身份的一种体系。
是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。
公钥基础设施一般根据其英语缩写而简称为PKI。
作用
安全地管理和分发证书
PKI 体系核心解决的是证书生命周期相关的认证和管理问题
证书
概述
数字证书
主要是针对以数字的形式存储的消息进行的处理
包含实体基本资料、公钥和扩展项的数据集
数字证书本质上是个人公钥的认可副本。
数字证书为通信双方提供了保证,保证正在与之通信的人确实具有他们所宣称的身份。
数字证书包含特定的身份标识信息,并且其结构归国际标准X.509决定。
数字证书机制解决非对称加密算法和数字签名中公钥的分发的安全问题
为公钥加上数字签名
- 公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,
里面记有姓名、组织、邮箱地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority、CertifyingAuthority,CA)施加数字签名。
只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书(certificate)
分类
加密数字证书(Encryption Certificate)
- 用于保护用于加密信息的公钥
签名验证数字证书(Signature Certificate)
- 保护用于解密签名完成身份验证的公钥
X.509
概述
X.509 证书规范
证书遵循的X.509版本。
一般的,一个数字证书内容可能包括基本数据(版本、序列号)、所签名对象信息(签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA 的数字签名等等。
目前使用最广泛的标准为 ITU 和 ISO 联合制定的 X.509 的 v3 版本规范(RFC 5280),
其中定义了如下证书信息域:
版本号(Version Number)
- 规范的版本号,目前为版本 3,值为 0x2;
序列号(Serial Number)
序列号(来自证书建立者)。
由 CA 维护的为它所颁发的每个证书分配的唯一的序列号,用来追踪和撤销证书。
只要拥有签发者信息和序列号,就可以唯一标识一个证书。最大不能超过 20 个字节;
签名算法(Signature Algorithm)
数字签名所采用的算法,如 sha256WithRSAEncryption 或 ecdsa-with-SHA256;
签名算法标识符(指定证书授权机构对证书的内容进行数字签名时使用的技术)。
颁发者(Issuer)
颁发证书单位的标识信息,如 “C=CN, ST=Beijing, L=Beijing, O=org.example.com, CN=ca.org.example.com”;
发布者姓名(发布证书的证书授权机构的身份标识)。
有效期(Validity)
有效期(指定证书有效的日期和时间:开始的日期、时间,以及结束的日期、时间)。
证书的有效期限,包括起止时间;
主体(Subject)
证书拥有者的标识信息(Distinguished Name),如 “C=CN, ST=Beijing, L=Beijing, CN=person.org.example.com”;
主体的名字(包括区分实体身份的唯一名字或DN,相应实体拥有证书中包含的公钥)。
主体的公钥信息(Subject Public Key Info)
主体的公钥(证书的内容:证书拥有者用于建立安全通信的实际公钥)。
所保护的公钥相关的信息;
公钥算法(Public Key Algorithm):公钥采用的算法;
主体公钥(Subject Public Key):公钥的内容;
颁发者唯一号(Issuer Unique Identifier):代表颁发者的唯一信息,仅 2、3 版本支持,可选;
主体唯一号(Subject Unique Identifier):代表拥有证书实体的唯一信息,仅 2、3 版本支持,可选;
扩展(Extensions,可选):可选的一些扩展。
v3 中可能包括:Subject Key Identifier:实体的密钥标识符,区分实体的多对密钥;
Basic Constraints:一般指明是否属于 CA;
Authority Key Identifier:颁发这个证书的颁发者的公钥标识符;
CRL Distribution Points:撤销文件的发布地址;
Key Usage: 证书的用途或功能信息。
此外,证书的颁发者还需要对证书内容利用自己的私钥进行签名,以防止他人篡改证书内容。
其他
……
……
……
……
……
证书格式
PEM
X.509 规范中一般推荐使用 PEM(Privacy Enhanced Mail)格式来存储证书相关的文件
X.509 规范中一般推荐使用 PEM(Privacy Enhanced Mail)格式来存储证书相关的文件。
证书文件的文件名后缀一般为 .crt 或 .cer,对应私钥文件的文件名后缀一般为 .key,证书请求文件的文件名后缀为 .csr。有时候也统一用 .pem 作为文件名后缀。PEM 格式采用文本方式进行存储,一般包括首尾标记和内容块,内容块采用 base64 编码。
DER
- DER(Distinguished Encoding Rules)格式,是采用二进制对证书进行保存,可以与 PEM 格式互相转换。
查看工具
- openssl 工具
证书信任链
证书中记录了大量信息,其中最重要的包括 签发的公开密钥 和 CA 数字签名 两个信息。
因此,只要使用 CA 的公钥再次对这个证书进行签名比对,就能证明某个实体的公钥是否是合法的。
证书授权机构
证书授权机构(CA)将公钥基础设施绑定在一起,为数字证书提供公证服务。
任何组织都可以开展CA性质的业务。
注册授权机构(RA)在数字证书发布之前帮助CA验证用户的身份。
证书的生成与撤销
注册
当希望获得一个数字证书时,你必须首先采用某种方式向证书授权机构证明身份, 这个过程被称为注册。
一旦证书授权机构对你的身份表示满意,你就可以向其提供你的公钥。
CA接着建立一个包合你的身份识别信息和公钥副本的X.509数字证书。
CA随后使用其私钥对证书进行数字化签名,并且向你提供己签名数字证书的副本。
你可以安全地将这个证书分发给希望与之进行安全通信的人。
验证
使用CA的公钥检查CA的数字签名来验证这个证书。
信任的前提
CA的数字签名是可信的。
你信任CA。
证书没有被列在CRL(Certificate Revocation List证书撤销列表)中。
证书实际上包含你信任的数据。
购买证书时,应该选择一个被广泛信任的CA。
撤销
撤销的理由
证书遭到破坏(例如,证书所有者不慎丢失了私钥)。
证书被错误地发放(例如,CA错误地发放了一个没有进行正确验证的证书)。
证书的细节发生变化(例如,主体的名字发生了变化)。
安全性关联发生变化(例如,担保这份证书的组织机构不再雇用主体)。
证书撤消列表
证书撤销列表(Certificate Revocation List,CRL)
- 证书被撤消和通知最终用户证书撤消之间存在一段时间延迟。
联机证书状态协议
联机证书状态协议(Online Certificate Status Protocol,OCSP)
- 消除了认证撤消列表所带来的固有延迟。
非对称密钥的管理
目的
维护安全性
明智地选择加密系统
隐藏式安全不可取,选择算法公开的加密系统。
选择合适的密钥
选择密钥长度时应当考虑安全需求与性能之间的平衡。
保证私钥的机密性
偶尔允许某人访问私钥,会持久地危害使用该密钥加密的所有通信。
密钥强制轮换
备份密钥
组成要素
用户
使用PKI的人
认证机构CA
颁发证书的人
仓库
保存证书的数据库
四个关键要素
数字证书
公钥和私钥
证书颁发机构CA
CA 对用户签发证书实际上是对某个用户公钥,使用 CA 的私钥对其进行签名。
用户证书的签发
由 CA 直接来生成证书(内含公钥)和对应的私钥发给用户
由用户自己生成公钥和私钥,然后由 CA 来对公钥内容进行签名。
CA 对用户签发证书实际上是对某个用户公钥,使用 CA 的私钥对其进行签名。
这样任何人都可以用 CA 的公钥对该证书进行合法性验证。验证成功则认可该证书中所提供的用户公钥内容,实现用户公钥的安全分发。
用户证书的签发可以有两种方式。
一般可以由 CA 直接来生成证书(内含公钥)和对应的私钥发给用户;
也可以由用户自己生成公钥和私钥,然后由 CA 来对公钥内容进行签名。
- 后者情况下,用户一般会首先自行生成一个私钥和证书申请文件(Certificate Signing Request,即 csr 文件),
该文件中包括了用户对应的公钥和一些基本信息,如通用名(common name,即 cn)、组织信息、地理位置等。
CA 只需要对证书请求文件进行签名,生成证书文件,颁发给用户即可。整个过程中,用户可以保持私钥信息的私密性,不会被其他方获知(包括 CA 方)。
- 后者情况下,用户一般会首先自行生成一个私钥和证书申请文件(Certificate Signing Request,即 csr 文件),
生成证书申请文件的过程并不复杂,用户可以很容易地使用开源软件 openssl 来生成 csr 文件和对应的私钥文件。
证书撤销列表
证书超出有效期后会作废,用户也可以主动向 CA 申请撤销某证书文件。
由于 CA 无法强制收回已经颁发出去的数字证书,因此为了实现证书的作废,
往往还需要维护一个撤销证书列表(Certificate Revocation List,CRL),用于记录已经撤销的证书序号。
因此,通常情况下,当第三方对某个证书进行验证时,需要首先检查该证书是否在撤销列表中。
如果存在,则该证书无法通过验证。如果不在,则继续进行后续的证书验证过程。
核心组件
CA(Certification Authority)
负责证书的颁发和吊销(Revoke),接收来自 RA 的请求,是最核心的部分
CA 是最核心的组件,主要完成对证书信息的维护
RA(Registration Authority)
对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA
证书数据库
存放证书,多采用 X.500 系列标准格式。可以配合LDAP 目录服务管理用户信息
操作流程
用户通过 RA 登记申请证书,提供身份和认证信息等;
CA 审核后完成证书的制造,颁发给用户。
用户如果需要撤销证书则需要再次向 CA 发出申请。
CA
证书签发机构CA
Certificate Authority证书管理系统,也称认证中心,具备有限的政策制定功能,
担任具体的用户公钥证书的签发、生成和发布及CRL生成及发布职能。
一般情况下,证书需要由证书认证机构(Certification Authority,CA)来进行签发和背书
RA
Register Authority 用户注册系统,负责管理用户信息,执行用户与证书相关的操作。
SSL
Security Socket Layer 安全套接层协议,由Netscape(网景)公司开发,
是一种因特网上最普遍使用的安全通讯协议,保障网站服务器及浏览器之间的数据传输的安全性。
SSL(Secure Socket Layer )或者 TLS(Transport Layer Security)
SSL
……
……
要对通信对象进行认证,可以使用对公钥加上数字签名所生成的证书
……
……
PIN
加密模块的口令,当用户使用该加密模块时,需要输入PIN,以防他人使用。
密钥
介绍
Cryptographic Keys
算法公开,密钥隐匿。
现代密码系统不依赖保密的算法,而是依赖于具体的用户或者用户组专用的一个或者多个密钥
密钥长度越长,就越难破解加密系统。
现代密码学系统使用至少128位的密钥对数据进行保护,密钥的长度越长,就越难破解加密系统
分类
私钥
在公共密码系统中,用户的密钥对中只有用户本身才能持有的密钥。
公钥
在公共密码系统中,用户的密钥对中可以被其他用户所持有的密钥。
数字签名
概述
数字签名,常用于身份验证,如数字证书中的身份验证功能即是通过数字签名来完成
签名认证是对非对称加密技术与数字摘要技术的综合运用,指的是将通信内容的摘要信息使用发送者的私钥进行加密,然后将密文与原文一直传输给信息的接收者,接收者通过发送者的公钥解密被解密的摘要信息,然后使用发送者相同的方式产生接要串,与解密的摘要串进行对比,如果相同,则说明接收到的内容是完整的,在传输过程中没有受到第三方篡改,否则说明通信内容已被第三方修改。
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。
也就是说,数字签名算法是非对称加密算法和消息摘要的结合体。
数字签名是利用了“没有私钥的人事实上无法生成使用该私钥所生成的密文”这一性质来实现的。
这里所生成的密文并非被用于保证机密性,而是被用于代表一种只有持有该密钥的人才能够生成的信息
这样的信息一般称为认证符号(authenticator),消息认证码也是认证符号的一种,
数字签名也是一样。数字签名是通过使用私钥进行加密来产生认证符号的。
主要是针对以数字形式存储消息进行的处理
产生一种带有操作者身份信息的编码
区别于不同的摘要的算法,不同的非对称加密方式,数字签名算法也不尽相同。常见的数字签名算法包括MD5withRSA、SHA1withRSA 、MD2withRSA、SHA384withRSA、SHA512withRSA
- 使用Java Signature API
签名方式
直接对消息内容签名
实际中用得少,因为消息内容通常很长,而公钥密码加密解密过程耗时比较长。
对消息哈希值进行签名
实际中用的多,因为消息哈希值通常比消息短很多
数字签名的生成
……
数字签名的检验
……
应用实例
安全信息公告
对消息明文哈希进行签名,因为是公告,所以消息没必要加密,直接明文展示。
软件下载
公钥证书
SSL/TSL
实现方式
RSA
过程
……
……
……
……
……
实践
DSA
只能用于数字签名
ECDSA
Rabin
ElGamal
攻击
中间人攻击
双方确认公钥哈希值,如通过打电话
对单向哈希函数的攻击
利用数字签名攻击公钥密码
签名操作实际上是在对消息进行解密
防止攻击1:不对消息明文签名,只对消息哈希值签名
防止攻击2:公钥加密和数字签名使用两套不同的密钥对
潜在伪造
其他攻击
数字签名无法解决的问题
用于验证签名的公钥的合法性
解决办法: 公钥基础设施PKI
……
……
……
消息验证码
消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC
消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值
……
……
消息认证码
解决的问题
判断消息是否被篡改
消息完整性(一致性)
判断是否有人伪装成发送者发送了该消息
消息的认证
- 消息来自正确的发送者
是一种与密钥相关联的单向哈希函数
应用场景
SWIFT
IPsec
SSL/TSL
实现方式
单向哈希函数
HMAC
分组密码
流密码
公钥密码
重放攻击
解决方案
使用递增序号
使用时间戳
使用UUID
无法解决的问题
对第三方证明消息来源
原因
- 通信双方都拥有共享密钥,无法确认消息一定是其中一个人发送的
防止否认
原因
- 通信双方都拥有共享密钥,任何一方完全可以否认自己向对方发送过某条消息
认证加密
Encrypt-then-MAC
先用共享密钥对明文消息进行加密,再对密文进行认证
Encrypt-and-MAC
先用共享密钥对明文消息进行加密,再对明文进行认证
MAC-then-Encrypt
先对明文进行MAC值计算,再对明文和MAC进行加密
PBE
概述
基于口令的密码
顾名思义,基于口令的密码(Password Based Encryption,PBE)
就是一种根据口令生成密钥并用该密钥进行加密的方法。
其中加密和解密使用同一个密钥。
……
……
盐的作用
盐是由伪随机数生成器生成的随机数,在生成密钥(KEK)时会和口令一起被输入单向散列函数。
密钥(KEK)是根据秘密的口令生成的,加盐好像没有什么意义,那么盐到底起什么作用呢?
盐是用来防御字典攻击的。
字典攻击是一种事先进行计算并准备好候选密钥列表的方法。
我们假设在生成KEK的时候没有加盐。
那么主动攻击者Mallory就可以根据字典数据事先生成大量的候选KEK。
PGP
……
……
……
零知识证明
零知识证明(Zero Knowledge Proof),是这样的一个过程,
证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。
例如,Alice 向 Bob 证明自己知道某个数字,在证明过程中 Bob 可以按照某个顺序提出问题(比如数字加上某些随机数后的变换)由 Alice 回答,并通过回答确信 Alice 较大概率确实知道某数字。
证明过程中,Bob 除了知道 Alice 确实知道该数字外,自己无法获知或推理出任何额外信息(包括该数字本身),也无法用 Alice 的证明去向别人证明(Alice 如果提前猜测出 Bob 问题的顺序,存在作假的可能性)。
零知识证明的研究始于 1985 年 Shafi Goldwasser 等人的论文《The Knowledge Complexity of Interactive Proof-Systems》,目前一般认为至少要满足三个条件:
完整性(Completeness):真实的证明可以让验证者成功验证;
可靠性(Soundness):虚假的证明无法让验证者保证通过验证,但允许存在小概率例外;
零知识(Zero-Knowledge):如果得到证明,无法从证明过程中获知除了所证明信息之外的任何信息。
零知识证明是一个通信概念。
正如数字签名和数字证书一样,零知识证明交换特定类型的信息, 但是不传输实际的数据。