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)

  • 本次通信随机生成的临时密钥
  • 作为对称密码的密钥,用于加密消息,提高速度

加密步骤(发送消息)

  1. 首先,消息发送者要拥有消息接收者的公钥
  2. 生成会话密钥,作为对称密码的密钥,加密消息
  3. 用消息接收者的公钥,加密会话密钥
  4. 将2,3步生成的加密结果,一并发给消息接收者

发送出去的内容包括

  1. 用会话密钥加密的消息 (加密方法:对称密码)
  2. 用公钥加密的会话密钥 (加密方法:公钥密码)

混合密码-解密

  1. 接收者用私钥解密出会话密钥
  2. 用会话密钥解密出消息内容

单向散列函数(哈希函数,消息摘要函数)

单向散列哈函数,可以根据消息内容计算出散列值
散列值的长度和消息长度无关,单向散列函数都会计算出固定长度的散列值
计算速度快
消息不用,散列值不同
具备单向性
常见的几种单向散列函数
MD4、MD5
SHA-1
SHA-2

  • SHA-256、SHA-384、SHA-512

单向散列函数的应用

防止数据被篡改
口令加密(密码加密)

数组签名 识别篡改、伪装、否认

生成签名
由消息的发送者完成,通过 “签名密钥” 生成

验证签名
由消息的接收者完成,通过 “验证密钥” 验证

保证这个签名是消息发送者自己签的?
用消息发送者的私钥进行签名

在数组签名中,任何人都可以使用公钥验证签名

数字签名,其实就是酱公钥密码反过来使用

私钥 公钥
公钥密码 接收者解密时使用 发送者加密时使用
数字签名 签名者生成签名时使用 验证这验证签名时候使用
谁持有密钥? 个人持有 只要需要,任何人可以持有

数字签名的作用不是为了保密性,仅仅是为了能够识别内容有没有被篡改
确保数据完整性
识别消息是否被篡改
防止消息发送人否认

证书(Certificate) - 解决中间人攻击问题

公钥证书(Public-key Certificate, PKC)
里面有个人信息,以及此人的公钥
认证机构(Certificate Authority, CA)施加数字签名

iOS签名机制

  1. APP 中的 代码,资源进行签名,Mac私钥签名
  2. 苹果私钥对Mac公钥签名(devices、app id、entitlements) 生成证书
  3. 苹果的私钥对证书进行签名 mobileprovision

.certSigningRequest文件 Mac 公钥

.cer文件 利用 Apple私钥(CA),对 Mac 公钥生成的数字签名

.mobileprovise 利用 Apple私钥(CA),对 [.cer证书 + devices + AppID + entitlements] 进行数字签名