1、对称加密和非对称加密入门算法
1. 如何不被窃听 —— 加密安全
这种加密方案在密码学里称为对称密码,加密方和解密方使用的是相同的密钥。性能
知名的密码算法有 AES(2001)、Blowfish(1993)、DES(1977),再远一点,有二战时期的恩尼格码(转轮机原理,德国)、紫色密码(转轮机原理,日本),以及著名的凯撒密码(没错就是地中海北岸那个凯撒)、栅栏密码等。阿里云
2. 如何交换密钥 —— 非对称加密加密
解决信道安全问题blog
Bob 事先生成一对公钥和私钥,私钥 pri 由本身保管,把公钥 pub 发给 Alice。md5
Alice 使用 pub 对消息内容进行加密,Bob 用 pri 进行解密。it
须要注意的是, 只有私钥才能够解密,因此即便 Eve 窃取到了 pub(只有 pub 被传输而容易被窃取),她也没法解密。io
这种加密方式在密码学里称为非对称密码,所谓“非对称”指的是加密方和解密方用的密钥不同。入门
知名的非对称算法有:DSA(数字签名算法,只能用于签名,1991)、ECC(椭圆曲线加密,1985)、RSA(公钥加密算法,1977)等。
这些算法除了用于加密外,还能够用于 数字签名。非对称算法有个致命弱点: 性能很低。实际应用中通常采用混合加密体制、哈希签名体制。
3. 如何防止数据篡改 —— MAC
图中的 MAC 指的是 消息认证码(Message Authentication Code),你如今不需知道它的原理,只要记住 :(1)传入两个参数 message 和 key,进行一系列计算后获得一个值叫 MAC。(2)只有 message 和 key 相同的状况下,才能获得相同的 MAC。
消息认证码有多种实现方式,其中最多见的是 HMAC(Hash MAC),即便用哈希算法来实现 MAC,还有一种是基于分组密码算法的 MAC,不常见。
聪明如你,确定会想到若是 key 被窃取该怎么办?这就涉及到 数字签名了,后文会讲到。
4. 如何校验身份 —— MAC
MAC包含几种实现方式:基于 HASH 的 MAC 称为 HMAC,应用比较普遍。
有些同窗应该接触过阿里云的 Access Key,其实就是 HMAC 的原理。
有些同窗在两个系统之间API调用时,会使用同一个 key 作 md5 计算来实现 API 鉴权,这称为“加盐HASH”,能够简单理解为 HMAC 的简化版。
一样的,若是 key 被窃取该怎么办?这能够用 数字签名来解决。
5.更进一步 —— 数字签名
发送方是用 私钥进行签名,而接收方用 公钥 进行验签,这跟加密状况正好相反。
6. 公钥的身份证 —— 数字证书
伪造公钥,Bob 须要事先生成公钥 pub 和私钥 pri ,而后把 pub 分发给 Alice。那么攻击过程就从这入手,Eve 生成本身的一对公钥 pub' 和 私钥 pri',截获 Bob 的 pub,并用本身的 pub' 冒充 Bob 的公钥发给 Alice。
这是个“偷天换日”的过程,Eve 经过伪造公钥(中间人攻击),不光窃听到 Alice 的消息,还能保证整个过程当中 Alice 和 Bob 都没有察觉!
Eve 不是喜欢伪造公钥吗,Bob 此次就要请 Trent 为本身的公钥注册一张 “身份证” —— 数字证书。见证如见人,哦不对,见证如见公钥!如下是注册数字证书的过程:
Bob 请求 Trent 为本身的公钥 pub 注册一个证书。
Trent 收到请求后,用本身的私钥 pri ' 对 pub(以及身份信息) 进行签名,获得一个 sign。
Trent 把证书 certificate = pub + sign 颁发给 Bob。
Bob 把本身的证书 pub + sign 发给 Alice。
Alice 使用 Trent 的公钥 pub ' 对 sign 进行验签,若是校验成功则说明 pub 的确是 Bob 的公钥,由于她相信 Trent 的权威性。
Eve 不可能找 Trent 为她办一个 Bob 的数字证书,由于 Trent 不会赞成的,就像警察蜀黍不会给我办一张别人的身份证同样。因此,Eve 没法伪造 Bob 的公钥。
考虑到非对称算法的效率问题,实际应用中通常是先对数据进行哈希,而后才用私钥对哈希值(摘要)进行签名。
Trent 在密码技术领域中通常称为 认证机构(Certification Authority,即 CA)。
以数字证书为基础,业界制定了一系列的规范和规格,好比由谁颁发证书、如何进行颁发、如何做废证书等,称为 公钥基础设施(Public-Key Infrastructure,即 PKI)。
2、对称加密常见密码学
AES,DES,3DES,TDEA,Blowfish,RC5,IDEA
3、非对称加密经典算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)