发展史
古典密码学(1949年之前)
特点:数据的安全基于算法的保密。
方法:代换、置换(凯撒密码)
标志产物:enigma 密码机
最早的密码技术:斯巴达棒
里程碑:转子密码机
近代密码学(1949~1975)
特点:数据的安全基于密匙而不是算法的保密。
1949香农编写了《保密系统的通信理论》奠定了近代密码学的基础。
现代密码学(1976年以后)
特点:解决了密匙分发和管理的问题,密码学真正在商业中广泛应用。
1976年,罗纳尔多、阿迪、里昂纳多,在麻省理工推动了公钥加密技术的革新发展。
典型应用.
信息安全要素 | 特征 | 相应技术 |
---|---|---|
机密性 | 窃听、非法窃取信息、敏感资料泄露 | 对称加密、非对称加密、混合加密、数字信封 |
完整性 | 篡改、重放攻击、破坏 | 消息认证码、哈希函数、数字签名、数据加密 |
可鉴别性 | 冒名 | 口令、共享秘密、数字签名、数字证书 |
不可否认性 | 事后否认自己行为 | 数字签名、证据储存 |
授权与访问控制 | 非法存取资料、越权访问 | 属性证书、访问控制 |
流密码特性
加密速度快
密匙和明文一样长
序列密码易被篡改
明文与密匙按位进行异或
数字证书组成
PKI:公钥基础设施
CA:核心负责签发证书、更新证书、管理证书机构、黑名单认证、在线认证。
RA:受理证书的申请工作,提供证书生命周期维护工作。
证书库:证书的存放,储存。
加解密的并行运算
在加密时支持并行运算的有:ECB、CTR
在解密时支持并行运算的有:ECB、CBC、CFB、CTR。
分组加密
就是支持对称加密的有
DES、AES、SM4、Blowfish、SM1、SM7、ZUC(祖冲之)
非对称加密:
RSA、SM2、SM9
摘要算法;
MD5、SM3、hash算法、SHA
HTTPS流程
1.浏览器发送ClientHello
其中包含了浏览器支持的TSL协议的版本,支持的加密算法,压缩算法等。同时浏览器端生成一个随机数,一起发送给服务器。
2.服务器返回ServerHello
(1)确认TSL协议版本,确定一个双方都支持的加密算法
(2)发送服务器的证书,发送一个服务器端生成的随机数。(如果访问的网站出于安全性的考虑,要求访问者也提供证书的话会在这一步发出请求。)
3.浏览器拿到证书后验证该证书是否是可信任的,如果证书可信任,那么其中的公钥也是可信的。
(1)浏览器生成第三个随机数 pre key,将pre key使用服务器的公钥加密,发送回服务器
(2)编码改变通知,告知服务器接下来将使用选择的加密算法进行加密通信
(3)将此前发送过的所有信息的摘要加密后发送给服务器,供服务器进行加密通道验证。最后发出客户端握手阶段结束信号。
4.服务器接收到对方发来的pre key后,此时通信双方都拥有了三个随机数(前两个是明文发送的,第三个pre key 是非对称加密发送的),由这三个随机数双方可以计算得到两个相同的对称密钥,服务器使用这一密钥验证加密通道后,向客户端发送服务器发出:
(1)编码改变通知:告知接下来的通信将使用加密通信
(2)服务器握手阶段结束信号。
至此握手阶段结束,双方接下来使用普通的http协议进行通信,由三个随机数生成的对称密钥加密内容。
1.整个过程中靠证书体系为通信双方提供身份信任。
2.通信双方共生成了三个随机数能最大限度地避免伪随机,保证了生成的对称密钥难以被暴力破解。
3.第三个随机数的传输使用非对称加密,保证了双方对称密钥的私密性。
4.整个通信中,只有pre key的发送使用了非对称加密,之后的加密通信都采用对称加密,最大限度地保证了通信效率。
https是采用对称加密和非对称加密相结合的方式来进行安全认证的。对称加密用来加密所要发送的信息,非对称加密用来传输对称加密的秘钥算法等信息
数字证书
首先,服务器把他的公钥和个人信息用Hash算法生成一个消息摘要,这个Hash算法有个好的特点就是只要输入的数据有一点点变化,那么生成的消息摘要就会发生巨变。 这样就可以防止别人修改原始的内容。然后再将这个消息摘要通过认证中心(CA)的私钥进行加密,形成数字签名。
接着再把数字签名和原始信息(主机B得公钥和信息)合并 ,形成一个新的东西,叫做数字证书。
当服务器把这个数字证书发给客户端时,客户端用相同的Hash算法对原始信息生成消息摘要,再用CA的公钥对数字签名进行解密,得到CA创建消息摘要,然后进行对比,看有没有改变。如果一样,说明公钥没人改,也就是说此时的公钥就是服务器的公钥
不过这样做的前提是得信任CA,这些CA本身也有证书来证明自己的身份,并且CA的信用是像树一样分级的,高层的CA给底层的CA做信用背书,而操作系统/浏览器中会内置一些顶层的CA的证书,相当于你自动信任了他们。 这些顶层的CA证书一定得安全地放入操作系统/浏览器当中,否则世界大乱。你可以打开浏览器, 从设置中可以找到“受信任的根证书”
如上图所示
(1)第 ③ 步时,客户端说:(咱们后续回话采用对称加密吧,这是对称加密的算法和对称密钥)这段话用公钥进行加密,然后传给服务器
(2)服务器收到信息后,用私钥解密,提取出对称加密算法和对称密钥后,服务器说:(好的)对称密钥加密
(3)后续两者之间信息的传输就可以使用对称加密的方式了
遇到的问题:
(1)客户端如何获得公钥
(2)如何确认服务器是真实的而不是黑客
第四步:获取公钥与确认服务器身份
1、获取公钥
(1)提供一个下载公钥的地址,回话前让客户端去下载。(缺点:下载地址有可能是假的;客户端每次在回话前都先去下载公钥也很麻烦)
(2)回话开始时,服务器把公钥发给客户端(缺点:黑客冒充服务器,发送给客户端假的公钥)
2、那有没有一种方式既可以安全的获取公钥,又能防止黑客冒充呢? 那就需要用到终极武器了:SSL 证书
如上图所示,在第 ② 步时服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:
(1)证书的发布机构CA
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名
3、客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了。