接着上文继续介绍,这篇主要来介绍消息摘要、非对称加密、数字签名、 keytool工具的使用等知识,文章最后会补充一些专有名词的介绍。
消息摘要定义:
消息摘要(Message Digest)又称为数字摘要(Digital Digest)。消息摘要由一个单向Hash加密函数对消息进行作用而产生。为了保证文件或者值的安全,使用消息摘要生成的值是不可以篡改的。
指把任意长的输入消息数据转化成固定长度的输出数据的一种密码算法,又称为散列函数、哈希函数和杂凑函数、单向函数等。
消息摘要特点
无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出。
只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同,但相同的输入必会产生相同的输出。消息摘要是单向、不可逆的
常见摘要算法:MD5、SHA1、SHA256、SHA512、SM3
MD5算法 : 摘要结果16个字节, 转16进制后32个字节
SHA1算法 : 摘要结果20个字节, 转16进制后40个字节
SHA256算法 : 摘要结果32个字节, 转16进制后64个字节
SHA512算法 : 摘要结果64个字节, 转16进制后128个字节
说明:摘要算法所产生的固定长度的输出数据称作摘要值、散列值或哈希值。==摘要算法没有密钥。
在介绍非对称加密之前,先来回忆一下对称加密。
定义:指加密密钥和解密密钥相同的密码算法。
分类:
流密码算法:又称序列密码算法,每次加密或解密一位或一字节的明文或密文。
分组密码算法:将明文(密文)分成固定长度的数据块(比特块或字节块),用同一密钥和算法对每一明文(密文)块加密(解密)后得到等长的密文(明文)块,然后将密文(明文)块按照顺序组合起来最终得到密文(明文)。
常见密码算法:
流密码算法:RC4
分组密码算法:DES、IDEA、RC2、AES、SM4
定义:指加密密钥和解密密钥不相同的密码算法,从一个密钥很难推导出另一个密钥,又称为公开密钥算法或公钥算法。
分类:公钥和私钥
常见非对称算法包括:RSA、DH、DSA、ECDSA、ECC、SM2等
非对称加密特点:
① 非对称加密算法又称现代加密算法
②与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
③公开密钥和私有密钥是一对
④如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密
⑤如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密
⑥因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
⑦加密和解密使用不同的密钥
⑧处理数据的速度较慢, 因为安全级别高
非对称加密示例
首先生成密钥对, 公钥为(5,14), 私钥为(11,14) ,A具有公钥,B具有私钥,现在A希望将原文2发送给B, A使用公钥加密数据。2的5次方mod 14 = 4 , 将密文4发送给B,B使用私钥解密数据, 4的11次方mod14 = 2, 得到原文2。
说明:上面的例子说明这个密钥由B创建,因为私钥只有一个人知道,那就是创建密钥的那个人。
一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
私钥用于签名,因为私钥只有一个人知道,也具有防抵赖性(有效性);公钥是每个人都可以知道,可以用于验证信息是不是由私钥持有者发出的。(完整性)
下面来简单理解一下数字签名:相信我们都写过信,在写信的时候落款处总是要留下自己的名字,用来表示写信的人是谁,我们签的这个字就是生活中的签名。
而数字签名呢?其实也是同样的道理,它的含义是:在网络中传输数据时,给数据添加一个数字签名,表示是谁发的数据,而且还能证明数据没有被篡改。(必须用私钥生成数字签名!)
数字签名的主要作用就是保证了数据的有效性(验证是谁发的)和完整性(证明信息没有被篡改)。下面我们就来好好地看一下它的底层实现原理是什么样子的。
数字签名基本原理
A 的公钥公开,私钥保密 ,A 和 B 都使用同样的摘要算法 HASH。
数字签名是非对称加密算法与数字摘要技术的应用,数字摘要验证了原文是否被篡改、公钥私钥保证了数字摘要的安全性,两者配合使用安全性高,速度快。
数字签名(电子签名)总结:
使用私钥对电子文档进行加密操作后的结果称作数字签名。
数字签名目前只能采用非对称密码算法实现。
数字签名的技术流程描述如下:
i.信息发送者使用摘要算法对信息生成信息摘要;
ii.信息发送者使用自己的私钥对信息摘要进行签名(加密);
iii.信息发送者把信息本身和已签名的信息摘要一起发送出去;
iv.信息接收者使用相同的摘要算法对接收的信息本身生成新的信息摘要;
v.信息接收者使用信息发送者的公钥对已签名的信息摘要进行验签(解密),
获得信息发送者的信息摘要;
vi.信息接收者比较这两个信息摘要是否相同,如果相同则确认信息发送者的身份和信息没
有被修改过;否则,则表示被修改过;
上面提到,当我们对签名进行验证时,需要用到公钥。如果公钥是伪造的,那我们无法验证数字签名了,也就根本不可能从数字签名确定对方的合法性了。这时候证书就闪亮登场了。我们可能都有考各种证书的经历,比如说普通话证书,四六级证书等等,但是归根结底,到任何场合我们都能拿出我们的证书来证明自己确实已经考过了普通话,考过了四六级。这里的证书也是同样的道理。
如果不理解证书的作用,我们可以举一个例子,比如说我们的毕业证书,任何公司都会承认。为什么会承认?因为那是国家发得,大家都信任国家。也就是说只要是国家的认证机构,我们都信任它是合法的。
那么这个证书是如何生成的呢?我们再来看一张图:
数字证书定义:
下面来对颁发数字证书的CA做一下介绍,什么是CA呢?
专门负责颁发数字证书的系统称为CA系统,负责管理并运营CA系统的机构称作为CA中心。
为证书权威,是Certificate Authority的缩写,也称作CA中心或证书认证中心,是一种特殊的密钥管理中心,拥有自己的公钥和私钥,负责给用户签发数字证书。即使用CA中心私钥对用户身份信息和公钥信息进行加密处理(签名)后形成数字证书。
CA中心为每个用户签发包含用户公钥的数字证书,而用户私钥只有用户自己保管,CA中心及每个用户都不知道其他用户的私钥。
CA中心拥有自己的公钥和私钥,使用其私钥给用户签发数字证书,也包含CA中心自己。具体签发过程如下:
i.将用户身份信息和用户公钥信息,按照特定格式组成数据D;
ii.选择摘要算法对数据D进行计算得到摘要H;
iii.使用CA私钥对摘要H进行加密得到数字签名S;(获得数字签名)
iv.将用户身份信息、用户公钥信息和数字签名S,按照特定格式就可组成数字证书。
我们可以拿着我们的信息向数字证书颁发机构CA去申请数字证书。
数字信封并不需要分发和管理对称密钥,而是随机产生对称密钥,采用对称密码算法对大批量数据进行加密,并采用非对称密码算法对该对称密钥进行加密;解密时,先用非对称密码算法解密后获得对称密钥,然后使用对称密码算法解密后获得数据明文。
数字信封机制的具体流程如下:
i.消息发送方需要预先获得消息接收方的公钥;
ii.消息发送方随机产生对称密钥,并用该密钥和对称算法对消息进行加密;
iii.消息发送方用消息接收方的公钥和非对称算法对上述对称密钥进行加密;
iv.消息发送方将消息密文和对称密钥密文一起发送给消息接收方;
v.消息接收方收到消息密文和对称密钥密文;
vi.消息接收方使用自己的私钥和非对称算法对对称密钥密文进行解密后获得对称密钥明文;
vii.消息接收方使用上述对称密钥和对称算法对消息密文解密后获得消息明文;
keytool工具路径:C:\Program Files\Java\jre1.8.0_91\bin
常用命令:
生成keypair
keytool -genkeypair
keytool -genkeypair -alias lisi(后面部分是为证书指定别名,否则采用默认的名称为mykey)
看看keystore中有哪些项目:
keytool -list或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer
生成可打印的证书:
keytool -exportcert -alias lisi -file lisi.cer –rfc
显示数字证书文件中的证书信息:
keytool -printcert -file lisi.cer
直接双击lisi.cer,用window系统的内置程序打开lisi.cer
生成私钥公钥
采用 RSA 算法生成公钥和私钥,创建一个文件夹,在该文件夹下执行如下命令行:
keytool -genkeypair -alias scorpios -keyalg RSA -keypass scorpios
-keystore scorpios.jks -storepass scorpios
Keytool 是一个java提供的证书管理工具
-alias:密钥的别名
-keyalg:使用的hash算法
-keypass:密钥的访问密码
-keystore:密钥库文件名,xc.keystore保存了生成的证书
-storepass:密钥库的访问密码
查询证书信息
keytool -list -keystore scorpios.jks
删除别名
keytool -delete -alias guigu -keystore scorpios.jsk
导出公钥
openssl是一个加解密工具包,这里使用openssl来导出公钥信息。
安装 openssl:http://slproweb.com/products/Win32OpenSSL.html
安装资料目录下的Win64OpenSSL-1_1_0g.exe
配置openssl的path环境变量,如下图:
本教程配置在C:\OpenSSL-Win64\bin
cmd进入scorpios.jks文件所在目录执行如下命令(如下命令在windows下执行,会把-变成中文方式,请将它改成英文的-):
keytool -list -rfc --keystore scorpios.jks | openssl x509 -inform pem -pubkey
下面段内容是公钥
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFsEiaLvij9C1Mz+oyAm
t47whAaRkRu/8kePM+X8760UGU0RMwGti6Z9y3LQ0RvK6I0brXmbGB/RsN38PVnh
cP8ZfxGUH26kX0RK+tlrxcrG+HkPYOH4XPAL8Q1lu1n9x3tLcIPxq8ZZtuIyKYEm
oLKyMsvTviG5flTpDprT25unWgE4md1kthRWXOnfWHATVY7Y/r4obiOL1mS5bEa/
iNKotQNnvIAKtjBM4RlIDWMa6dmz+lHtLtqDD2LF1qwoiSIHI75LQZ/CNYaHCfZS
xtOydpNKq8eb1/PGiLNolD4La2zf0/1dlcr5mkesV570NxRmU1tFm8Zd3MZlZmyv
9QIDAQAB
-----END PUBLIC KEY-----
将上边的公钥拷贝到文本public.key文件中,合并为一行,可以将它放到需要实现授权认证的工程中。
1、当从CA获得数字证书后,使用CA中心的公钥对数字证书中私钥的签名进行解密处理后,就可验证该证书是否被篡改,从而确认公钥与用户身份的映射关系。只要保证CA中心私钥的安全性,就能保证数字证书很难被篡改,从而保证了公钥与用户映射关系很难被篡改。
2、用户在验证数字证书是否被篡改时,必须首先获得CA中心的公钥。为方便用户识别CA中心的公钥,CA中心也为自己签发数字证书,该证书包含CA中心公钥、CA中心身份信息和CA中心私钥的签名。
3、数字证书的应用:基于数字证书可实现四种基本安全功能:身份认证、保密性、完整性和抗抵赖性
4、PKI
所有与数字证书相关的各种概念和技术,统称为PKI(Public Key Infrastructure)
PKI的主要功能是绑定证书持有者的身份和相关的密钥对
PKI的本质:是把非对称密钥管理标准化
5、LDAP
(1)、CA中心存储着所有用户的数字证书,为方便用户快速获得交易对方的数字证书,避免CA中心称为瓶颈,PKI又引入了LDAP技术,通过LDAP方式对外提供证书查询或下载服务。
(2)、LDAP为轻量目录访问协议,是Light-weight Directory Access Protocol缩写;
6、CRL
(1)、当用户私钥泄露后,CA中心有责任将该用户的证书标记为失效,为方便用户获得证书状态,PKI引入了CRL和OCSP技术;
(2)、CRL为证书作废列表,是Certificate Remocation List的缩写,也称为证书黑名单,是一种特殊的文件格式,包含:所有失效证书清单、下次CRL生成时间和CA中心私钥的签名;
(3)、CA中心定期生成CRL,并将下次生成时间写入CRL中,方便用户按时定期下载CRL;
7、OCSP
(1)、为了解决CRL滞后的缺陷,避免给高实时性或高风险交易造成重大损失,PKI引入了OCSP,对用户提供实时的证书状态查询服务;
(2)、OCSP为在线证书状态协议,是Online Certificate Status Protocol的缩写;
(3)、当用户需要实时查询对方证书是否有效时,可通过OCSP协议实时访问CA中心获得对方证书的当前状态;
8、其他PKI标准
(1)、除与CA直接相关的上述标准外,PKI还包括其他很多标准,如密码相关标准、证书应用标准、证书存储标准、证书访问标准、CA运营标准等
i.密码相关标准包括:ASN.1、DER、HMAC、DES、AES、RSA、ECC等
ii.证书应用标准包括:SSL/TLS、SET、WAP、IPSec、TSP、PMI等
iii.证书存储标准包括:PKCS系列标准、ISO 7816系列标准等
iv.证书访问标准包括:PKCS 11、CryptoAPI、JCE、PC/SC等
v.CA运营标准包括:CP、CPS等
9、根据数字证书格式及密钥管理方式的不同,PKI也包括多种模式:
(1)、X.509模式:该模式的PKI也称作PKIX(称为数字证书格式的标准)
(2)、PGP模式:基于公钥算法的加密
(3)、IBE/CPK模式
(4)、EMV模式
10、KMC
(1)、为解决私钥的备份与恢复问题,PKI引入了KMC,用于对私钥的全生命周期进行管理。
(2)、KMC是Key Management Center的缩写
(3)、产生公私钥的两种方式:
i.用户的公私钥对可由KMC产生,提交CA签发数字证书后,将私钥和数字证书同时安全移交给用户,
而KMC将私钥留作备份,可按需要给用户恢复;
ii.用户的公私钥也可以由自己产生(使用软件或密码设备),在向CA中心申请数字证书时
,可将私钥安全提交KMC留作备份;
11、签名证书和加密证书
(1)、为防止用户身份被冒用,应保证用户私钥的唯一性,不允许备份恢复。为防止公钥加密后的数据无法解密,应提供用户私钥的备份恢复机制。为解决这两种矛盾的应用需求,PKI引入双证书机制:签名证书和加密证书;
(2)、签名证书及私钥只用于签名验签,不能用于加密解密,该公私钥对必须由用户自己产生,KMC不备份签名私钥;
(3)、加密证书及私钥只用于加密解密,不能用于签名验签,该公私钥对必须有KMC产生,且KMC对加密私钥进行备份;
12、CA证书
(1)、也叫做CA中心的数字证书
(2)、用户在验证数字证书是否被篡改时,必须首先获得CA中心的公钥。为方便用户识别CA中心的公钥,CA中心也为自己签发数字证书。该证书包含CA中心公钥、CA中心身份信息、CA中心私钥的签名
13、数字证书的分类
(1)、根据证书持有者分类:
i.根据证书持有者是否为CA,可将证书分为2类:CA证书和用户证书。
CA证书可以给用户或其他CA签发证书,用户证书不允许给其他用户或CA签发证书。
X.509格式中通过扩展项BasicConstraints来区分这2类证书。
当其中的cA项为TRUE时表示CA证书,为FALSE时表示用户证书。
ii.按照证书持有者类型进行分类:根据证书持有者类型,
通常将证书分为:个人证书、单位证书、系统证书。
(2)、根据密钥对分类:
i.根据密钥对产生方式进行分类:根据密钥对的产生方式,可将证书分为2类:签名证书和加密证书。
1.签名证书及密钥(密钥对)只用于签名验签,不能用于加密解密。为保证该密钥对的唯一性,
该密钥对必须由用户端密码模块产生和保存,在证书签发过程中CA中心并不知道其私钥,
只对其公钥进行操作。
2.加密证书及密钥(密钥对)只用于加密解密,不能用于签名验签。为实现密钥恢复或行业监管,
该密钥对必须由CA中心产生,并回送给用户端密码模块保存。
CA中心同时保存该密钥对,必要时可恢复该密钥对。
ii.根据证书用途进行分类:通常将证书分为SSL服务器证书、SSL客户端证书、代码签名证书……等