Skip to main content
  1. IOS/

iOS签名机制

·1 分钟
iOS签名机制 加密 iOS

要了解iOS签名,首先得从加密入手,了解对称加密非对称加密公钥密码单向散列函数等名词,这些名词一抛出,可能你云里雾里了,但是不急,学习是需要过程的,下面对这些名词一一介绍。

在学之前我们先通过简单模型理解为什么要加密?A给B发送消息,那么如果有不法分子就想知道A发给B是什么内容,那么就会产生窃听

窃听

对称加密

加密和解密的密钥相同即为对称加密。它的特点是:加密解密快、传输不安全

对称加密

非对称加密(公钥加密) 加密和解密的密钥不同即为非对称加密。加密解密较慢,相比对称加密更安全

公钥密码 公钥密码中包含一对密码:加密密钥、解密密钥(公钥,私钥)。公钥是可公开的密钥。 公钥加密是为了解决密钥配送问题,通过简单模型理解:

解决密钥配送问题

B生成密钥对,并把公钥发送给A,A通过 B的公钥加密消息得到密文,然后发送给B ,B得到密文,通过自己的私钥解密密文就得到了消息。 整个过程没有私钥的泄漏,所以数据传输是安全的,但是想一下: B接收到的消息,真的就是A发送的吗?

混合密码系统(Hybrid Cryptosystem)>

混合密码系统(Hybrid Cryptosystem) #

同时结合对称加密的快的有点和非对称加密安全的优点的加密方式。 在混合密码系统中,会多出一个会话密钥(session key),它用于加密和解密消息(对称加密),结合上面的例子,B给的公钥,用来加密会话密钥A同时发送,会话密钥加密的消息和公钥加密的会话密钥给B,那么 B则通过私钥解密得到会话密钥,在用会话密钥解密密文得到消息。

单向散列函数>

单向散列函数 #

单向散列函数,可以根据根据消息内容计算出散列值,散列值的长度和消息的长度无关,无论消息是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值。

单向散列函数

特点

根据任意长度的消息,计算出固定长度的散列值 计算速度快,能快速计算出散列值 消息不同,散列值也不同(哪怕只有1bit的区别也会产生完全不同的散列值) 具备单向性(散列值无法还原为原始文件)

如何防止数据被篡改>

如何防止数据被篡改 #

本地模型

如何防止数据被篡改本地
网络模型 https://www.realvnc.com/en/connect/download/vnc/
如何防止数据被篡改网络

数字签名>

数字签名 #

了解了单向散列函数,就可以理解数字签名,就可以解答之前 ‘遗留的问题’ ‘B接收到的消息,真的就是A发送的吗?’。数字签名就是消息发送者(A)通过私钥加密消息的散列值的到的结果。接受者则(B)可以通过,A的公钥解密签名的到散列值,同时计算的到收到的消息的散列值,如果相等,则确认是(A)发送的消息。

数字签名

要注意的是,数字签名不能保证消息的机密性,它是一种验证手段,可能确保消息的来源和内容的真实性(验证散列值)。

对于主动攻击者,还存在下面的模型的问题:主动攻击者可能伪造公钥,让发送者误以为是接受者的公钥。

那如何验证公钥的合法性?

证书(Certificate)>

证书(Certificate) #

公钥证书(Public-key Certificate,PKC),认证机构(Certificate Authority,CA)施加数字签名。通过国际性组织、政府设立的组织、通过提供认证服务来盈利的企业或个人提供认证服务,也就是发送者,和接收者的第三方担保,它可以确保公钥的合法性。

iOS签名机制>

iOS签名机制 #

iOS的签名机制,可以保证安装到用户手机上的APP都是经过Apple官方允许的。 不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤

  1. 生成 CertificateSigningRequest.certSigningRequest 文件
  2. 获得 ios_development.cer\ios_distribution.cer 证书文件
  3. 注册device、添加App ID
  4. 获得*.mobileprovision文件 (描述文件)

通过原理来翻译,则是:

  1. 获得Mac电脑公钥
  2. 通过Mac公钥,向Apple申请加密,为公钥(证书)
  3. 添加设备,账号
  4. 向Apple申请将设备账号包装并生成新公钥(描述文件)

XCode自动签名已经完成了以上所有步骤。

.certSigningRequest、.cer、.mobileprovision文件究竟里面包含了什么?有何用处