iOS密码学及签名机制

前言

密码技术是网络安全的基础,也是核心。现在对隐私保护、敏感信息尤其重视,所以不论是系统开发还是App开发,只要有网络通信,很多信息都需要进行加密,以防止被截取篡改。

1、Eve窃听邮件

为了便于学习,设计4个虚拟人物。

  • Alice、Bob:互相通信
  • Eve:窃听者
  • Mallory:主动攻击者
图1:Eve窃听邮件.png

2、加密数据防止窃听

图2:加密数据防止窃听.png

一、加密解密

1、对称加密(DES、3DES、AES)

在对称密码中,加密、解密时使用的是同一个密钥。常见的对称密码算法有:DES、3DES、AES。

图3:对称加密.png
1)DES
  • DES是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit

  • 规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上是56bit

  • 由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行迭代(反复)

  • 目前已经可以在短时间内被破解,所以不建议使用

图4:DES加解密.png
2)3DES
  • 3DES,将DES重复3次所得到的一种密码算法,也叫做3重DES
  • 目前还被一些银行等机构使用,但处理速度不高,安全性逐渐暴露出问题
  • 3个密钥都是不同的,也称为DES-EDE3
图5:3DES加解密.png
3)AES
  • 取代DES成为新标准的一种对称密码算法
  • AES的密钥长度有128、192、256bit三种
  • 在2000年时选择Rijindael算法作为AES的实现
  • 目前AES,已经逐步取代DES、3DES,成为首选的对称密码算法
  • 一般来说,我们也不应该去使用任何自制的密码算法,而是应该使用AES,它经过了全世界密码学家所进行的高品质验证工作

2、非对称加密(RSA)

图6:非对称加密.png
1)密钥配送问题
  • 在使用对称密码时,一定会遇到密钥配送问题
  • 假设,Alice将使用对称密码加密过的消息发给了Bob
    • 只有将密钥发送给Bob,Bob才能完成解密
    • 在发送密钥过程中,可能会被Eve窃取密钥,最后Eve也能完成解密
2)公钥密码(Public-key Cryptography)
  • 公钥密码中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥

  • 公钥密码也被称为非对称密码(Asymmetric Cryptography)

  • 在公钥密码中

    • 加密密钥,一般是公开的,因此该密钥称为公钥(public key)
    • 解密密钥,由消息接收者自己保管的,不能公开,因此也称为私钥(private key)
    • 公钥和私钥是一 一对应的,是不能单独生成的,一对公钥和密钥统称为密钥对(key pair)
    • 由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
    • 由私钥加密的密文,必须使用与该私钥对应的公钥才能解密
3)解决密钥配送问题
  • 由消息的接收者,生成一对公钥、私钥
  • 将公钥发给消息的发送者
  • 消息的发送者使用公钥加密消息
图7:解决密钥配送问题.png
4)RSA
  • 目前使用最广泛的公钥密码算法是RSA
  • RSA的名字,由它的3位开发者,即Ron Rivest、Adi Shamir、Leonard Adleman的姓氏首字母组成

3、混合密码系统(Hybrid Cryptosystem)

1)密码系统的缺点
  • 对称密码的缺点:

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

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

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

2)混合密码-加密
  • 会话密钥(session key):

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

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

    • 用会话密钥加密的消息(加密方法:对称密码)
    • 用公钥加密的会话密钥(加密方法:公钥密码)
3)混合密码-解密
  • 解密步骤(收到消息):
    • 消息接收者用自己的私钥解密出会话密钥
    • 再用第1步解密出来的会话密钥,解密消息
图8:混合密码-加密解密流程.png
4)混合密码-加密解密流程

Alice >>>>> Bob

  • 发送过程,加密过程:

    • 1.Bob先生成一对公钥、私钥
    • 2.Bob把公钥共享给Alice
    • 3.Alice随机生成一个会话密钥(临时密钥)
    • 4.Alice用会话密钥加密需要发送的消息(使用的是对称密码加密)
    • 5.Alice用Bob的公钥加密会话密钥(使用的是公钥密码加密,也就是非对称密码加密)
    • 6.Alice把第4、5步的加密结果,一并发送给Bob
  • Bob 接收过程,解密过程:

    • 1.Bob利用自己的私钥解密会话密钥(使用的是公钥密码解密,也就是非对称密码解密)
    • 2.Bob利用会话密钥解密发送过来的消息(使用的是对称密码解密)

二、单项散列函数

1)单项散列函数简介

  • 单向散列函数(One-way hash function),可以根据根据消息内容计算出散列值

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

图9:单项散列函数简介.png

2)单向散列函数的特点

  • 根据任意长度的消息,计算出固定长度的散列值

  • 计算速度快,能快速计算出散列值

  • 消息不同,散列值也不同

  • 具备单向性

图10:单向散列函数的特点.png

3)单向散列函数的种类

  • 单向散列函数,又被称为消息摘要函数(message digest function),哈希函数
  • 输出的散列值,也被称为消息摘要(message digest)、指纹(fingerprint)
  • 常见的几种单向散列函数:
    • MD4、MD5
      • 产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
      • Mac终端上默认可以使用md5命令
    • SHA-1
      • 产生160bit的散列值,目前已经不安全
    • SHA-2
      • SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit
    • SHA-3
      • 全新标准

4)如何防止数据被篡改

图11:如何防止数据被篡改.png

5)单向散列函数的应用 – 防止数据被篡改

如软件下载网页:https://www.realvnc.com/en/connect/download/vnc/

图12:单向散列函数的应用.png

三、数字签名

1、想象以下场景

  • Alice发的内容有可能是被篡改的,或者有人伪装成Alice发消息,或者就是Alice发的,但她可以否认
  • 问题来了:Bob如何确定这段消息的真实性?如何识别篡改、伪装、否认?
  • 解决方案:数字签名

2、数字签名

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

    • 生成签名:由消息的发送者完成,通过“签名密钥”生成
    • 验证签名:由消息的接收者完成,通过“验证密钥”验证
  • 思考:如何能保证这个签名是消息发送者自己签的?

  • 答案:用消息发送者的私钥进行签名

图13:数字签名.png

3、数字签名和公钥密码

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

图14:数字签名和公钥密码.png

4、数字签名的过程– 改进

图15:数字签名的过程– 改进.png

5、数字签名 – 疑惑

  • 思考一下

    • 如果有人篡改了文件内容或者签名内容,会是什么结果?
    • 结果是:签名验证失败,证明内容会篡改
  • 数字签名不能保证机密性?

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

    • 确认消息的完整性
    • 识别消息是否被篡改
    • 防止消息发送人否认

四、证书

1、数字签名无法解决的问题

  • 要正确使用签名,前提是

    • 用于验证签名的公钥必须属于真正的发送者
  • 如果遭遇了中间人攻击,那么

    • 公钥将是伪造的
    • 数字签名将失效
  • 所以在验证签名之前,首先得先验证公钥的合法性

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

    • 证书
图16:中间人攻击.png

2、证书(Certificate)

  • 证书,联想的是驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的
  • 密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),跟驾驶证类似
    • 里面有姓名、邮箱等个人信息,以及此人的公钥
    • 并由认证机构(Certificate Authority,CA)施加数字签名
  • CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
    • 有国际性组织、政府设立的组织
    • 有通过提供认证服务来盈利的企业
    • 个人也可以成立认证机构

3、证书的注册和下载

图17:证书的注册和下载.png

五、iOS签名机制

1、iOS签名机制介绍

  • iOS签名机制的作用

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

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

  • 思考

    • 每一步的作用是什么?
    • .certSigningRequest.cer.mobileprovision文件究竟里面包含了什么?有何用处?

2、iOS签名机制 – 流程图

图18:iOS签名机制流程图.png

3、生成Mac设备的公私钥

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

图19:生成Mac设备的公私钥.png

4、获得证书

ios_development.cerios_distribution.cer文件,是利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件。

图20:证书的生成.png

5、生成mobileprovision

图21:生成mobileprovision.png

6、iOS签名机制 - AppStore

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

图22:验证AppStore的包.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 一、预备知识 1、常见英文encrypt:加密decrypt:解密plaintext:明文ciphertext:密...
    迷心迷阅读 2,414评论 2 4
  • 概述:加密解密单向散列函数数字签名iOS签名机制 和 证书重签名 一、加密解密 1.1、常见的英文单词encryp...
    IIronMan阅读 643评论 0 2
  • 学习路线 学前须知 如何防止被窃听? 如何加解密 密码的类型 根据秘钥的使用方法,可以将密码分为了两类 对称密码 ...
    Rathen阅读 1,386评论 1 4
  • 一 加密解密 二 单项散列函数 三 数字签名 四 证书 五 iOS签名机制 一 加密解密 加密是将明文信息改变为难...
    当前明月阅读 1,058评论 0 2
  • 说到签名机制,首先要了解一下加密解密,签名文件就是加密解密的过程。 加密解密 加密是将明文信息改变为难以读取的密文...
    iOS开发之家阅读 866评论 0 0