快速了解iOS签名机制

本文假定你已经熟练掌握了iOS建立证书,发布app以及真机调试微信

信息传输如何防止被窃听?

加密

怎么加密?

  • 对称加密 加解密同一密钥,速度快,但没法解决密钥共享问题app

  • 非对称加密 用于加密的密钥(公钥)能够公开解决了密钥共享问题,加密速度慢。函数

因此使用混合密码

混合密码系统

混合密码的问题

接收者的公钥是公开的,任何人均可以向接受者发消息,会衍生如下问题优化

  • 消息被篡改
  • 假装发送者
  • 发送者否定发送消息

如何解决?数字签名

注意:公钥和私钥是成对的,它们互相解密,加解密能够反过来;能够被公开的那个叫 公钥加密

数字签名过程
数字签名是验证消息的合法性和肯定发送人(一个私钥对应一个发送者,拿该发送者的公钥来验证便可)。

以上有个缺点就是若是明文消息很大,那么对于签名的加解密过程以及最终的比对都是灾难性的资源消耗。设计

如何解决数字签名的明文消息过大问题? 单向散列函数

  • 根据任意长度的消息,计算出固定长度的散列值
  • 计算速度快,能快速计算出散列值
  • 消息不一样,散列值也不一样
  • 具有单向性,不会逆向出明文 基于以上特色,改进一下:

优化后的签名过程

单向散列函数包含:MD4,MD5,SHA1等,有关散列函数更多内容请查看 哈希函数调试

使用 混合密码 加密明文,结合数字签名之后的流程以下 code

混合密码结合数字签名

这样看起来是否是比较完美了,事实上还存在 公钥 (签名用)被伪造的风险。伪造者本身生成 密钥对 再拿到接受者的 公钥 就能够给接收者发假消息了。cdn

PS:咱们回头看一下签名的加密设计方式、私钥加密,公钥解密。若是跟普通的加密用法同样:私钥解密、公钥假面,行不行?答案是否认的,由于谁都能拿到公钥,用公钥加密就没法确认发送者的身份了。blog

如何防止数字证书的公钥被伪造?证书

  • 什么是证书? 权威机构 经过对证书申请者提交认证的公钥施加数字签名并加上申请者的一些我的信息如邮箱,而生成证书。CA就是这样的一个权威机构,也存在一些提供认证服务盈利的企业。

为了方便比对咱们在混合密码结合数字证书的流程图中只加上 混合密码公钥的证书认证,以下图

证书认证

那么iOS的签名机制是这样的么?

不是的,只是用到的原理相似,iOS签名机制没这么复杂,由于只是签名没有加密。 仍是来直接看图吧:

证书签名

事实上,在签名当中还须要带有 一些额外的信息,好比:

  • 肯定惟一app的信息(appi)
  • 该app权限相关信息,如keychain可访问组信息
  • 非发布环境的 限制的可安装设备列表信息

至于为何须要这些信息,这里不作过多解释,建立过证书的同窗应该很熟悉。这些信息都放在了mobileprovision文件当中了。 那么为什么不直接放到证书当中去呢?毕竟多一个文件须要再次签名。 咱们知道,一个证书是能够供同一开发者多个app使用的,若是把app相关的信息直接放到证书里面,对于多个app 就须要 建立多个证书,达不到证书公用的目的。 最终完整的签名流程以下

iOS签名流程


笔者和朋友作了一个小副业,微信公众号,替你省钱,分享还能赚点小钱; 帮忙关注,支持一下,权当请我喝咖啡,谢谢。 若是很差用,能够取消。

微信公众号
相关文章
相关标签/搜索