首页 12-iOS签名机制
文章
取消

12-iOS签名机制

学习路线

1
2
3
加密解密 --> 单向散列函数 --> 数字签名 --> 证书 --> iOS签名机制
// 加密解密: 对称密码(DES、3DES、AES)、公钥密码(RSA)
// 单向散列函数: MD4、MD5、SHA-1、SHA-2、SHA-3

常见英文

  • encrypt: 加密
  • decrypt: 解密
  • plaintext: 明文
  • ciphertext: 密文

密码类型

  • 对称密码 Symmetric Cryptography

    • 对称密码中,加密用的密钥和解密用的密钥是相同的。
    • 常见的对称密码算法有
      • DES (Data Encryption Statdard)
        • DES是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit
        • 规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上市56bit
        • 由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行迭代。
        • 目前已经可以在短时间内被破解,所以不建议使用。
      • 3DES
        • 3DES,将DES重复3次所得到的的一种密码算法,也叫做3重DES
        • 目前还被一些银行等机构使用个,但处理速度不高,安全性逐渐暴露出问题。
      • AES (Advanced Encryption Standard)
        • 取代DES成为新标准的一种对称加密算法。
        • AES的密钥长度有128bit192bit256bit三种。
        • 在2000年是选择Rijindael算法作为AES的实现
        • 目前AES已经逐步取代DES3DES,成为首选的对称密码算法。
        • 一般来说,我们也不应该去使用任何自制的密码算法,而是应该使用AES
    • 密钥配送问题
      • 事先共享密钥
      • 密钥分配中心
      • Diffie-Hellman密码交换
      • 公钥密码
  • 公钥密码 (非对称密码)

    • 公钥密码中,加密用的密钥和解密用的密钥是不相同的。
    • 公钥密码中,密钥分为加密密钥、解密密钥,他们并不是同一个密钥。
    • 公钥密码也被称为非对称密码(Asymmetric Cryptography)
    • 在公钥密码中
      • 加密密钥,一般是公开的,因此该密钥称为公钥(public key)
      • 解密密钥,由消息接收者自己保管的,不能公开,因此也称为私钥(private key)
      • 公钥和私钥是一 一对应的,是不能单独生成的,一对公钥和密钥统称为密钥对(key pair)
      • 由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
      • 由私钥加密的密文,必须使用与该私钥对应的公钥才能解密

    crypto01

    • 解决密钥配送问题
      • 由消失的接收者生成一对公钥、私钥。
      • 将公钥发给消息的发送者。
      • 消息的发送者使用公钥加密消息。

    crypto02

  • RSA

    • 目前使用最广泛的公钥密码算法是RSA。
    • RSA的名字,有三位开发者,即Ron RivestAdi ShamirLeanard Adleman的姓氏首字母组成。
    • RSA解决配送问题,对称密码解决传送问题。

混合密码系统(Hybrid Cryptosystem)

  • 对称密码的缺点

    • 不能很好解决密钥配送问题。
  • 公钥密码的缺点

    • 加密解密速度比较慢
  • 混合密码系统,是将对称密码和公钥密码的有事相结合的方法

    • 解决了公钥密码速度慢的问题。
    • 并通过公钥密码解决了对称密码的密钥配送问题
  • 网络上的密码通信所有的SSL/TLS都运用了混合密码系统

  • 混合密码 – 加密

    • 会话密钥(session key)
      • 为本次通信随机生成的临时密钥
      • 作为对称密码的密钥,用于加密消息,提高速度
    • 加密步骤(发送消息)
      • 1.首先,消息发送者要拥有消息接收者的公钥
      • 2.生成会话密钥,作为对称密码的密钥,加密消息
      • 3.用消息接收者的公钥,加密会话密钥
      • 4.将前2步生成的加密结果,一并发给消息接收者
    • 发送出去的内容包括
      • 用会话密钥加密的消息(加密方法:对称密码)
      • 用公钥加密的会话密钥(加密方法:公钥密码)

    crypto03

  • 混合密码–解密

    • 解密步骤(收到消息)
      • 1.消息接收者用自己的私钥解密出会话密钥
      • 1.再用第1步解密出来的会话密钥,解密消息

    crypto04

  • 混合密码–加密解密流程

    • Alice – 发消息给 –> Bob

    • 发送过程,加密过程

      1.Bob先生成一对公钥、私钥

      2.Bob把公钥共享给Alice

      3.Alice随机生成一个会话密钥(临时密钥)

      4.Alice用会话密钥加密需要发送的消息(使用的是对称密码加密)

      5.Alice用Bob的公钥加密会话密钥(使用的是公钥密码加密,也就是非对称密码加密)

      6.Alice把第4、5步的加密结果,一并发送给Bob

    • 接收过程,解密过程

      1.Bob利用自己的私钥解密会话密钥(使用的是公钥密码解密,也就是非对称密码解密)

      2.Bob利用会话密钥解密发送过来的消息(使用的是对称密码解密)

单向散列函数(One-way hash function)

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

oneway01

  • 单向散列函数的特点

    • 根据任意长度的消息,计算出固定长度的散列值
    • 计算速度快,能快速计算出散列值
    • 消息不同,散列值也不同
    • 具备单向性

    oneway02

  • 单向散列函数

    • 单向散列函数,又被称为消息摘要函数(message digest function),哈希函数

    • 输出的散列值,也被称为消息摘要(message digest)、指纹(fingerprint)

    • 常见的几种单向散列函数

      • MD4MD5

      • 产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全

      • Mac终端上默认可以使用md5命令

        1
        2
        3
        
        $ md5 1.txt
        或者
        $ md5 -s "123"
        
      • SHA-1

        • 产生160bit的散列值,目前已经不安全
      • SHA-2

        • SHA-256SHA-384SHA-512,散列值长度分别是256bit384bit512bit
      • SHA-3

        • 全新标准
  • 如何防止数据被篡改

    oneway03

数字签名

  • 在数字签名技术中,有以下2种行为

    • 生成签名
      • 由消息的发送者完成,通过“签名密钥”生成
    • 验证签名
      • 由消息的接收者完成,通过“验证密钥”验证
  • 思考

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

    oneway04

  • 数字签名和公钥密码

    • 数字签名,其实就是将公钥密码反过来使用
     私钥公钥
    公钥密码接受者解密时使用发送者加密时使用
    数字签名签名者生成签名时使用验证者验证签名时使用
    谁持有密钥个人持有只要需要,任何人都可以持有
  • 数字签名的过程

    oneway05

  • 数字签名的过程 – 改进

    oneway06

    oneway07

  • 如果有人篡改了文件内容或者签名内容,会是什么结果?

    • 签名验证失败,证明内容会篡改
    • 数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改
  • 数字签名的作用

    • 确认消息的完整性
    • 识别消息是否被篡改
    • 防止消息发送人否认
  • 数字签名无法解决的问题

    • 用于验证签名的公钥必须属于真正的发送者
    • 如果遭遇了中间人攻击,那么公钥将是伪造的数字签名将失效
    • 所以在验证签名之前,首先得先验证公钥的合法性
    • 如何验证公钥的合法性?证书

    oneway08

证书(Certificate)

  • 证书,联想的是驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的

  • 密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC,跟驾驶证类似

    • 里面有姓名、邮箱等个人信息,以及此人的公钥
    • 并由认证机构(Certificate Authority,CA)施加数字签名
  • CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织

    • 有国际性组织、政府设立的组织
    • 有通过提供认证服务来盈利的企业
    • 个人也可以成立认证机构
  • 证书的利用

    oneway09

  • 证书的注册和下载

    oneway10

iOS签名机制

  • iOS签名机制的作用

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

    • 生成CertificateSigningRequest.certSigningRequest文件
    • 获得ios_development.cer \ ios_distribution.cer证书文件
    • 注册device、添加App ID
    • 获得*.mobileprovision文件
  • 对于真机调试,现在的Xcode已经自动帮开发者做了以上操作

  • iOS签名机制 – 流程图

    oneway11

  • iOS签名机制 – 生成Mac设备的公私钥

    • CertificateSigningRequest.certSigningRequest文件
    • 就是Mac设备的公钥

    oneway12

  • iOS签名机制 – 获得证书

    oneway13

  • iOS签名机制 – 获得证书

    • ios_development.cerios_distribution.cer文件
    • 利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件
  • iOS签名机制 – 生成mobileprovision

    oneway14

    oneway15

  • iOS签名机制 – 安全检测

    oneway16

  • iOS签名机制 - AppStore

    • 如果APP是从AppStore下载安装的,你会发现里面是没有mobileprovision文件的
    • 它的验证流程会简单很多,大概如下所示

    oneway17

本文由作者按照 CC BY 4.0 进行授权

11-ARM64汇编

13-LLVM