iOS签名
对称密码
对称密码中,加密用的密钥和解密用的密钥是相同的
- DES 是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit
规格上来说,密钥长度是64bit,但每隔7bit回设置一个用于错误检查的bit,因此密钥长度实质上是56bit 由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行迭代(反复加密) 目前已经可以在短时间内破解,不建议使用 - 3DES 将 DES重复3次所得的一种密码算法,也叫3重DES(三个不同的密钥依次 加密 -> 解密 -> 加密) 处理速度不高
- AES
密钥配送问题
- 事先共享密钥
- 密钥分配中心
- Diffie-Hellman密钥交换
- 公钥密码
公钥密码(非对称密码)
公钥密码中,加密用的密钥和解密用的密钥是不同的
公钥密码中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥
加密密钥,一般是公开的,因此该密钥成为公钥(public key)
解密密钥,由消息接收这自己保管,不公开,因此也成为私钥(private key)
公钥和私钥是一一对应的,是不能单独生成的,一对公钥和私钥统称为密钥对(key pair)
由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
由私钥加密的密文,必须使用与该私钥对应的公钥才能解密
目前使用最发广泛的公钥密码算法是RSA
解决密钥配送的问题
- 由消息的接受者,生成一对公钥、私钥
- 将公钥发送给消息的发送者
- 消息的发送者使用公钥加密消息
混合密码系统
将对称加密和公钥密码的优势相结合的方法
解决了公钥密码速度慢的问题
通过公钥密码解决了对称密码的密钥配送问题
网络上的密码通信所使用的SSL/TLS都是运用了混合密码系统
混合密码-加密
会话密钥(session key)
- 本次通信随机生成的临时密钥
- 作为对称密码的密钥,用于加密消息,提高速度
加密步骤(发送消息)
- 首先,消息发送者要拥有消息接收者的公钥
- 生成会话密钥,作为对称密码的密钥,加密消息
- 用消息接收者的公钥,加密会话密钥
- 将2,3步生成的加密结果,一并发给消息接收者
发送出去的内容包括
- 用会话密钥加密的消息 (加密方法:对称密码)
- 用公钥加密的会话密钥 (加密方法:公钥密码)
混合密码-解密
- 接收者用私钥解密出会话密钥
- 用会话密钥解密出消息内容
单向散列函数(哈希函数,消息摘要函数)
单向散列哈函数,可以根据消息内容计算出散列值
散列值的长度和消息长度无关,单向散列函数都会计算出固定长度的散列值
计算速度快
消息不用,散列值不同
具备单向性
常见的几种单向散列函数
MD4、MD5
SHA-1
SHA-2
- SHA-256、SHA-384、SHA-512
单向散列函数的应用
防止数据被篡改
口令加密(密码加密)
数组签名 识别篡改、伪装、否认
生成签名
由消息的发送者完成,通过 “签名密钥” 生成
验证签名
由消息的接收者完成,通过 “验证密钥” 验证
保证这个签名是消息发送者自己签的?
用消息发送者的私钥进行签名
在数组签名中,任何人都可以使用公钥验证签名
数字签名,其实就是酱公钥密码反过来使用
私钥 | 公钥 | |
---|---|---|
公钥密码 | 接收者解密时使用 | 发送者加密时使用 |
数字签名 | 签名者生成签名时使用 | 验证这验证签名时候使用 |
谁持有密钥? | 个人持有 | 只要需要,任何人可以持有 |
数字签名的作用不是为了保密性,仅仅是为了能够识别内容有没有被篡改
确保数据完整性
识别消息是否被篡改
防止消息发送人否认
证书(Certificate) - 解决中间人攻击问题
公钥证书(Public-key Certificate, PKC)
里面有个人信息,以及此人的公钥
认证机构(Certificate Authority, CA)施加数字签名
iOS签名机制
- 对 APP 中的 代码,资源进行签名,Mac私钥签名
- 苹果私钥对Mac公钥签名(devices、app id、entitlements) 生成证书
- 苹果的私钥对证书进行签名 mobileprovision
.certSigningRequest文件 Mac 公钥
.cer文件 利用 Apple私钥(CA),对 Mac 公钥生成的数字签名
.mobileprovise 利用 Apple私钥(CA),对 [.cer证书 + devices + AppID + entitlements] 进行数字签名