加密算法与SSL及创建私有CA
标签(空格分隔): Linux 运维 加密解密 算法
三个维度验证数据
- 机密性: 其安全依赖算法与密钥
- 完整性: 单向加密保证
- 身份验证: 也称来源合法性 私钥加密公钥解密保证
加密算法
对称加密: 加密与解密都通过同一种转换规则(即密钥).保证了数据的机密性
(DES 56位 3DES AES Blowfish)示例如下:
加密过程: plaintext --> 密钥 --> ciphertext
解密过程: ciphertext --> 密钥 --> plaintext
单向加密: 提取数据特征码(即16进制的指纹).保证了数据的完整性
(MD4 MD5 SHA1 SHA192 SHA256 SHA384 CRC-32)示例如下:
A: plaintext:footprint --> B
单向加密的几个特性:
- 输入一样,输出必然相同
- 雪崩效应,输入的微小改变,将会引起结果的巨大改变
- 定长输出,无论原始数据是多大,结果大小都是相同的
- 不可逆,无法根据特征码还原原来的数据
Diffie-Hellman协议 密钥交换(协商生成密码)(但无法解决身份验证)
A --> B
p,g (大素数,生成数)都是公开的
A:x (A私有)
B:y (B私有)
A: g^x%p --发送--> B
B: g^y%p --发送--> A
A得到 (g^y%p),然后计算: (g^y%p)^x = g^xy%p
B得到 (g^x%p),然后计算: (g^x%p)^y = g^xy%p(即密钥)
公钥加密(也称非对称加密算法)RSA DSA ELGamla
密钥对:公钥 私钥
密钥对:公钥(由私钥生成)/ 私钥(非常长)
- 发送方用自己的私钥加密数据,可以实现身份验证(即数据来源合法性)。
- 发送方用对方的公钥加密数据,可以实现数据的机密(安全)性。
公钥加密使用场景:因为公钥加密解密时速度太慢所以很少用来加密数据,主要只用其保证数据的机密性即身份验证。
如上图,数据的完整性与来源合法性都得到了保证,但不能保证文件的机密性.但此图的基础是bob需要得到Alice的公钥
,而Alice的公钥又需要通过网络传输给bob,如何解决这个鸡生蛋蛋生鸡的问题?这又引入了第三方机构(发证)来实现了.如现实生活中公安局给你发身份证,民证局给你发结婚/离婚证等一样.
最佳(安全)数据传输方式:
由于非对称加密(密钥对)只做身份验证,那数据的机密性如何解决呢?方式如下(假设A传数据data给B) :
1.A借助于第三方机构的公证(如现实中的公安局等具有公信力的机构)将自己的公钥发送给这个机构。这个发证机关也有自己的密钥对,会用其私钥对A的公钥做加密以生成一个完整证书。 然后A将“公证”过的公钥发送给B,B用公证机关的公钥解密即可确定A发送过来的公钥是否有问题。反之亦然,B也通过相同的方式拿到A的公钥。双方都拿到对方的公钥的同时通过ike协议生成对称密钥
(dcmy)
2.A用单向加密算法给其生成的数据data加密生成特征码(tzm)。数据完整性验证
3.A用自己的私钥给这特征码加密这段特征码(tzm)。 身份验证
4.A再用对称密钥
(dcmy)将data与tzm整体再加密。
4.A将数据data与加密过的特征码再传给B。
PKI: Public Key Infrastructure
CA: Certificate Authority
证书常见的格式: x509 pkcs12
x509:
公钥及其有效期限
证书的合法拥有者
证书该如何被使用
CA的信息
CA签名的校验码
SSL: Secure Socket Layer 是介于应用层与传输层的一层协议或库
iso制订的TLS(Transport Layer Security)功能与SSL类似.
OpenSSL(SSL的开源实现)
组成部分:
libcrypto: 加密库
libssl: TLS/SSL的实现,基于会话的实现了身份认证 数据机密性和会话完整性的TLS/SSL库
openssl命令: 多用途,可以实现私有证书颁发机构
未完待续
网友评论