iOS签名机制

139 阅读5分钟

如何防止窃听

举例:
Alice(发送者) ----发送明文----------> Bob(接受者) 这个过程中我们可能有第三个人进行Alice(窃听),为了防止窃听我们需要加密

密码的类型

对称密码

明文--(加密)--密文--(发送)--(解密)--明文

常见的对称密码有 DES、3DES、AES

DES: 是一种将64bit 明文加密成64bit 密文的对称加密算法,密钥长度56bit 规格上来说,密钥长度是64bit,但是每隔7bit会设置一个用于错误检查的bit,因此长度实质上是56bit

3DES: 将DES重复三次所得到的的一种密码算法,也叫做3重DES(三种密钥分别先加密,解密,加密)

AES: 选择Rijindael 算法作为AES的实现,目前AES,已经逐步 取代DES,3DES,称为对称加密算法

密钥配送问题
在使用对称密钥时,一定会遇到密钥配送问题,
假设,Alice 将使用对称密钥加密过的消息发送给了Bob
只有将密钥发送给Bob,Bob才能完成解密
在发送密钥过程中,可能被Eve窃取密钥,最终Eve也能完成解密
如何解决密钥配送问题
有以下几种解决密钥配送问题的方法
事先共享密钥
密钥分配中心
Diffie-hellman 密钥交换
公钥密码

公钥密码(非对称密码)

公钥密码中,密钥分为加密密钥,解密密钥,它们并不是同一个密钥
公钥密码也被称为非对称密码
在公钥密码种加密密钥,一般是公开的,因为改密钥称为公钥
解密密钥,有消息接受者自己保管的,不能公开的,因为被称为私钥
常见的公钥密码:RSA
解决密钥配送的问题
有消息的接受者,生成一对公钥,私钥
将公钥发送给消息的发送者,
消息的发送者使用公钥加密消息
(这个过程即便有人窃听了发送的消息,但是没有私钥也没法解密,解决了窃听,但是解决不了中间人攻击)

混合密码系统

对称密码的缺点
不能很好地解决密钥配送问题
 
 公钥密码的缺点
 加密解密速度比较慢
 
 混合密码系统,是将对称密码和公钥密码的优势结合的方法
 解决了公钥密码速度慢的问题
 并通过公钥密码解决了对称密码的密钥配送问题
 网络上的密码通信所用的SSL/TLS都运用了混合密码系统
 
加密
  1、首先,消息的发送者要拥有消息接收者的公钥
  2、消息发送者 生成会话密钥,作为对称密码的密钥,加密消息
  3、用消息接收者的公钥,加密会话密钥
  4、将生成的加密结果(会话密钥和消息)发送给消息的接受者

单向散列函数

单向散列函数,可以根据消息内容计算出散列值
特点:
 散列值的长度和消息的长度无关,无论消息是1bit,10M,100G单向散列函数会计算出固定长度的散列值
 消息不同,散列值不同
 具备单向性,拿到散列值不能推出来原来的值
 
单向散列函数,又被称为消息摘要函数,哈希函数

常见的单向散列函数:
MD4,MD5
  产生128bit的散列值,目前已经不安全
SHA-1
 产生160bit的散列值,不安全
SHA-2
 SHA-256,SHA-384,SHA-512 散列值长度分别为256bit,384bit,512bit
 SHA-2
 全新标准

数字签名

生成签名
   由消息的发送者生成签名
验证签名
    有消息的接受者完成
    
 如何能保证这个签名是消息发送者自己签的
   用消息发送者的私钥进行签名
   
   数字签名的过程
    1、消息的发送者通过,然后通过单向散列函数操作生成散列值,然后对散列值进行私钥加密签名
    2、消息的发送者通过消息接受者的公钥对消息进行加密
    3、消息的发送者发送消息还有签名,
    4、消息的接受者通过公钥对签名解密,通过私钥对消息进行解密
    5、通过单向散列函数对消息进行对比
     
  数字签名不能保证机密性?
   数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改
数字签名无法解决的问题
 用于验证签名的公钥必须属于真的发送者,
 如果遭遇到中间人攻击,那么
 公钥将是伪造的
 数字签名将无效
 验证签名之前,首先得验证公钥 的合法性
 证书是验证公钥合法性

证书

  防止中间人攻击
  
  流程
   1、消息的接受者通过认证机构来保存自己 的公钥
   2、认证机构通过 公钥 进行签名生成证书
   3、消息的发送者下载证书,并且下载认证机构的公钥进行验证证书
   4、现在的消息发送者已经拿到消息接受者的公钥防止了中间人攻击

iOS签名机制

 签名机制的作用:
   保证安装到用户手机上的APP都是经过Apple官方允许的
                                                           ipa
   Mac设备                       Xcode打包 + Mac私钥签名     App代码
  公钥   私钥                                                签名      验证代码
                                                           
                                                      mobileprovision             
   APPle后台                      证书                        证书 
   Apple私钥                      Mac公钥                     mac公钥    验证公钥
                      Apple私钥  公钥签名     Apple私钥        签名
                                  deviceId                   deviceId    
   iOS 设备                        AppId                      AppId
   Apple公钥                                                  签名    ios验证
   

CSR 文件: 为Mac 的公钥 cer 文件:证书文件(Mac公钥,以及通过Apple私钥对Mac公钥的签名) mobileprovision文件:证书+appId+deviceId 等