常见的加密术语
1.encrypt 加密
2.decrypt 解密
3.plaintext 明文
4.ciphertext密文
单项散列函数 又称哈希函数 one way hash function
单向散列函数,又被称为消息摘要函数(message digest function),哈希函数
输出的散列值,也被称为消息摘要(message digest)、指纹(fingerprint)
单向散列函数,可以根据根据消息内容计算出散列值
散列值的长度和消息的长度无关,无论消息是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值
单向散列函数的特点:
1.根据任意长度的消息,计算出固定长度的散列值
2.计算速度快,能快速计算出散列值
3.消息不同,散列值也不同
4.具备单向性,根据散列值,无法计算出消息
应用场景:
1.防止数据被篡改,譬如对一个文件进行哈希计算,将哈希值保存到安全的地方,过段时间对文件再次进行哈希计算,如果两次的值一样,说明原文件没有改动。对软件镜像网站下载的软件和官网提供的哈希值对比,就能够知道软件是否被篡改过。
2.加密口令,像密码,加密后的哈希值不可以逆,防止明文密码。使用sha2以上的hash函数。
1)MD4
2)MD5
产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
Mac终端上默认可以使用md5命令
3)SHA-1
产生160bit的散列值,目前已经不安全
4)SHA-2
SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit
5)SHA-3
全新标准
对称加密
注(看到这个,我想到了雍正使用带锁的匣子上密折,一个锁,两把同样的钥匙,每个大臣的锁都不一样,只有皇帝和大臣(自己的锁)能打开锁。加密的途径)
1)DES
DES是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit
规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上是56bit
由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行迭代(反复)
目前已经可以在短时间内被破解,所以不建议使用
2)3DES 3次DES加密
加密流程
密钥1 加密 ->密钥2 解密 -> 密钥3 加密,
解密流程
密钥3 解密 -> 密钥2 加密 -> 密钥1 解密
DES 目前已被破解,基本废弃 被一些银行系统使用,处理效率不高,安全性逐渐暴漏
- AES 正在使用的加密技术,对称加密选择这个
取代DES成为新标准的一种对称密码算法
AES的密钥长度有128、192、256bit三种
在2000年时选择Rijindael算法作为AES的实现
目前AES,已经逐步取代DES、3DES,成为首选的对称密码算法
一般来说,我们也不应该去使用任何自制的密码算法,而是应该使用AES,它经过了全世界密码学家所进行的高品质验证工作
- 对称加密密钥配送
1)事先共享密钥
2)配送中心获取密钥
3)Diffi-Hellman 密钥交换
4)公钥密码
- 非对称加密 RSA 又称公钥密码
1)加密密钥称为公钥,供别人加密使用
2)解密密钥称为私钥,由消息接受者,自己保管,不能公开
3)公钥和私钥是同时生成,一一对应的
4)由公钥加密的密文,必须由同该公钥对应的私钥才能够解开。
- 优缺点
1)对称加密,不能很好的解决密钥配送的问题
2)非对称加密,加密解密相对时间较长。
混合加密技术 混合加密系统Hybrid cryptosystem
1)对称加密加密明文信息
2)公钥加密会话密钥(session key),通信随机生成的密钥
网络上密码通信使用的SSL/TLS 使用的就是混合加密技术。
3)会话密钥(session key)
为本次通信随机生成的临时密钥
作为对称密码的密钥,用于加密消息,提高速度
4)加密步骤(发送消息)
- 首先,消息发送者要拥有消息接收者的公钥
- 生成会话密钥,作为对称密码的密钥,加密消息
- 用消息接收者的公钥,加密会话密钥
- 将前2步生成的加密结果,一并发给消息接收者
发送出去的内容包括
用会话密钥加密的消息(加密方法:对称密码)
用公钥加密的会话密钥(加密方法:公钥密码)
流程图
发送流程
Alice >>>>> Bob
发送过程,加密过程
1.Bob先生成一对公钥、私钥
2.Bob把公钥共享给Alice
3.Alice随机生成一个会话密钥(临时密钥)
4.Alice用会话密钥加密需要发送的消息(使用的是对称密码加密)
5.Alice用Bob的公钥加密会话密钥(使用的是公钥密码加密,也就是非对称密码加密)
6.Alice把第4、5步的加密结果,一并发送给Bob
接收过程,解密过程
1.Bob利用自己的私钥解密会话密钥(使用的是公钥密码解密,也就是非对称密码解密)
2.Bob利用会话密钥解密发送过来的消息(使用的是对称密码解密)
数字签名
数字签名:
思考,如何保证数字签名是消息发送着自己签的?
消息发送着使用私钥进行签名。私钥只有消息发送着自己拥有
步骤:
1.生成签名
使用发送者的私钥进行签名
2.验证签名
使用发送者的公钥进行验证
数字签名流程
数字签名流程图
最后解密后的散列值和计算消息的散列值相同,则表示数字签名有效,是消息发送着本人发送,消息没有被篡改。
数字签名的作用:
1.确认消息的完整性
2.识别消息是否被篡改
3.防止消息发送者否认
- 痛点:
1)要正确使用数字签名的前提要:
保证用于验证的公钥属于真正的发送者。
2)如果遭受了中间人攻击:
1>公钥将是伪造的
2>数字签名将失效
3)如何保证公钥的合法性
证书
证书
密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),跟驾驶证类似
证书的作用:保证公钥的合法性。证明一个人的公钥确实属于此人。
方法是有权威机构对该人的公钥进行数字签名。
证书内容
1.姓名,邮箱,此人公钥
2.并由认证机构(Certificate Authority,CA)施加数字签名
CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
有国际性组织、政府设立的组织
有通过提供认证服务来盈利的企业
个人也可以成立认证机构
证书的使用流程图
iOS签名机制
iOS签名机制的作用
保证安装到用户手机上的app,都是经过apple官方允许的不管真机调试,还是发布到appstore都需要经历的步骤
1.certifacateSigningRequest.certSigningRequest 文件
2.获得iOS_development.cer,iOS_distribution.cer文件 证书文件
3.注册device ID,app ID
4.获得*.mobileprovision
每一步的作用
1.相当于mac 公钥
2.apple 私钥对mac公钥,邮箱,用户名等信息的哈希值数字签名,还生成一个签名文件, 生成的证书,
3.设备唯一编码,app 唯一编码
4.描述文件,中包含 证书,app id ,device id ,然后apple 通过私钥对这些数据的哈希值进行一个数字签名,生成一个签名文件,
iOS 签名机制
apple store下载的ipa中,是没有mobileprovision文件的。