一、签名证书
签名文件和证书是成对出现的,二者不可分离。
这两个文件名字是一样的,只是后缀名不一样。
1、数字签名
是对 非对称加密技术 和 数字摘要技术 的具体应用。
1)消息的发送者,先要【生成一对公私钥对,将公钥给消息的接收者】。
2)消息的发送者给消息接收者发消息,在发送的信息中,
除了要包含原始的消息外,还要加上另外一段消息。
这段消息通过如下两步生成:
i.对要发送的原始消息【提取消息摘要】
ii.对提取的信息摘要【用自己的私钥加密】
(通过这两步得出的消息,就是所谓的原始信息的数字签名。)
3)信息的接收者来,所收到的信息,将包含两个部分,
一是原始的消息内容,二是附加的那段数字签名。
他将通过以下三步来验证消息的真伪:
i.对原始消息部分【提取消息摘要】,注意这里使用的消息摘要算法要和发送方使用的一致
ii.对附加上的那段数字签名,【使用预先得到的公钥解密】
iii.【比较前两步所得到的两段消息】是否一致。
一致,则表明消息确实是期望的发送者发的,且内容没有被篡改过;
不一致,则表明传送的过程中一定出了问题,消息不可信。
2、数字证书
由CA颁发给网站的身份证书。
数字证书一般包含以下一些内容:
证书的发布机构(Issuer)
证书的有效期(Validity)
消息发送方的公钥
证书所有者(Subject)
数字签名所使用的算法
数字签名
数字证书其实也用到了数字签名技术,签名的内容是消息发送方的公钥,以及一些其它信息。
数字证书中签名者是要有一定公信力的机构。
一般来说,这些有公信力机构的根证书,已经在设备出厂前预先安装到了设备上了。
所以,数字证书 可以保证 数字证书里的公钥 确实是这个证书的所有者的。
数字证书主要是用来解决公钥的安全发放问题。
二、公钥私钥
HTTPS,采用非对称加密。非对称加密会生成一对公钥和私钥。
私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
公钥和私钥是成对出现的,它们可以互相解密。
公钥加密的内容,只有私钥可以解密。
私钥加密的内容,只有公钥可以解密。
(公钥加密私钥解,私钥签名公钥验证。)
三、数字摘要的理解
对一个数据源进行一个算法之后得到一个摘要,也叫作数据指纹,不同的数据源,数据指纹肯定不一样。
消息摘要算法(Message Digest Algorithm)是一种能产生特殊输出格式的算法,
原理:是根据一定的运算规则对原始数据进行某种形式的信息提取,
被提取出的信息就被称作原始数据的消息摘要。
著名的摘要算法:MD5算法、SHA-1 算法、及其大量的变体。
消息摘要的主要特点有:
1)无论输入的消息有多长,计算出来的【消息摘要的长度总是固定的】
用 MD5算法 摘要的消息有128个比特位。
用 SHA-1 算法摘要的消息最终有160比特位的输出。
2)一般来说(不考虑碰撞的情况下),只要输入的原始数据不同,
对其进行摘要以后产生的消息摘要也必不相同,即使原始数据稍有改变,
输出的消息摘要便完全不同。但是,相同的输入必会产生相同的输出。
3)具有不可逆性,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的原始消息。
四、加密和编码相关
1、 Base64
Base64也不是加密解密算法,只能算是一个编码算法。
通常用于 把二进制数据编码为可写的字符形式的数据,
对数据内容进行编码来适合传输 (可以对img图像编码用于传输)
是一种 可逆的编码方式
这64个字符为:
a-z(26个)、A-Z(26个)、0-9(10个)、+ 和 / (2个),共64个
2、散列
常见的散列算法有:MD5、SHA-1 、HMAC。散列算法不是加密算法。
1)MD5(Message-Digest Algorithm 5)
密码通常用md5算法加密。
虽然不能通过逆向的方式恢复成明文,却可以通过碰撞的方式得到原密码或者替代密码。
md5加盐
盐,是一串比较复杂的字符串。加盐目的是加强加密的复杂度。
加盐并不表示安全,“盐”可能被泄露出去。
加盐也可以加动态的盐。
2)SHA1(Secure Hash Algorithm)
3)HMAC(Hash Message Authentication Code)
3、对称加密
对称加密就是通信双方使用相同的秘钥加密解密。
对称加密算法有DES、3DES(TripleDES),DESede、AES、Blowfish,以及RC2和RC4算法,
还有其他第三方提供的软件包提供的Bouncy Castle 提供的IDEA算法。
1)AES(Advanced Encryption Standard)
AES翻译过来是高级加密标准,它是用来替代之前的DES加密算法的。
因为AES加密算法的安全性要高于 DES和3DES,所以AES已经成为了主要的对称加密算法。
2)注意点
服务端、客户端必须使用一样的密钥和初始向量IV。
服务端、客户端必须使用一样的加密模式。
服务端、客户端必须使用一样的Padding模式。
以上三条有一个不满足,双方就无法完成互相加解密。
针对对称加密密钥传输问题这个不足:我们一般采用RSA+AES加密相结合的方式,
用AES加密数据,而用RSA加密AES的密钥。
同时密钥和IV可以随机生成,只要是128位16个字节就行,但是必须由服务端来生成。
因为如果由我们客户端生成的话,就好比我们客户端存放了非对称加密的私钥一样
,这样容易被反编译,不安全,一定要从服务端请求密钥和初始向量IV。
4、非对称加密
非对称加密使用一对密钥:公钥(public key)和私钥(private key)。
私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
公钥和私钥是成对出现的,它们可以互相解密。
公钥加密的内容,只有私钥可以解密。
私钥加密的内容,只有公钥可以解密。
(公钥加密私钥解,私钥签名公钥验证。)
主要的非对称加密算法有 RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
使用最广泛的是 RSA算法,Elgamal是另一种常用的非对称加密算法