加密算法在 iOS 上的应用

常用加密算法

对称加密算法:AES、DES

加密和解密使用同一密钥

  • 加密速度快
  • 密钥管理困难,任意泄密

非对称加密算法:RSA、DSA、ECC

加密和解密使用不同密钥,分为私钥和公钥,私钥加密的数据只有公钥可以解密,反之亦然。私钥一般保存在本地,公钥用于共享。

  • 加密速度毕竟慢,适用于数据量小、安全需求高的数据加密
  • 不容易泄密

散列算法:MD5、SHA1

又称哈希算法、摘要算法,是将任意长度的数据映射到有限固定长度的域上,是一种单向不可逆算法。

  • 签名认证
  • 数据的完整性验证
  • 不可还原的数据存储,例如密码

信息摘要

将任意长度的数据通过哈希算法得到固定长度的数据,得到的数据就称为原数据的摘要。摘要主要的作用是保证信息完整性。

  • 无论数据多长,计算出的摘要长度是固定的
  • 摘要看起来是 “随机的”,保证无法逆向,无法从摘要中找到任何与原内容有关系
  • 相同内容的摘要是相同的,不同内容的摘要是不同的,极端情况下,不同内容的摘要有可能相同,需要做碰撞处理,越好的算法碰撞的概率越低
摘要

数字签名

以前日常生活中,人们通常是用签名、印章之类来证明信息的可靠。随着互联网的普及,越来越多的信息被数据化,那么怎么在网络上确认一份信息的可靠性呢?

加密是个不错的选择,发送者对信息进行加密,接收者对信息进行解密。如果采用对称加密,就会面临密钥管理困难的风险,所以非对称加密是一个不错的选择。

发送者生成一对密钥,私钥自己保存,公钥公开出去。每次发送信息前,用私钥对信息进行加密,接收者用对应公钥进行解密,这样似乎能保证接到信息是可靠的。但是当信息量很大的时候,非对称加密会很慢,而且我们只是想证明信息的来源是可靠的,不一定要去加密整个内容。

这个时候信息摘要显得特别有用,我们只需要计算出原信息的摘要,用私钥对摘要进行加密,这个时候得到的就是数字签名,然后我们把原信息和数字签名一同打包发送出去,接收者收到信息之前,先用公钥解密数字签名,得到摘要,最后用同样的哈希算法计算信息的摘要,对比之前解密出的摘要,就可以得出接收到的信息是否可靠和完整了。

数字签名

App 签名

为什么需要 App 签名

iOS 出来之前,各种操作系统安装软件是不需要经过任何认证的,所以软件从哪儿下载都可以安装运行,导致平台对第三方软件难以控制,盗版猖狂,而且会有安全问题。Apple 为了杜绝这种现象,所以采用了 App 签名验证的方式,来保证每个 App 安装到 iOS 上都是经过允许的。

App 签名原理

简单来说,就是在 App 打包的时候加入签名,然后在用户下载启动时校对签名,成功就正常运行,失败则闪退。

一般这种验证都会采用非对称加密算法,Apple 也不例外,Apple 会生成一对密钥:私钥保存在服务器,公钥下发到 iOS 设备。这样开发者将开发好的 App 上传到 Apple 服务器的时候,Apple 服务器会用私钥加密该 App 的摘要从而生成数字签名,用户从 App Store 下载 App 的时候,就会用本地的公钥来校验。

简单流程如下:


app_sign

这样看起很简单的样子,但是这并不能满足所有的场景,试想一下,我们会在哪些场景下有安装 App 的需求?

  • 开发 App 时,通过 Xcode 安装到 iPhone
  • 发布 App 时,通过上传到 App Store,用户下载安装
  • 通过 ad-hoc 的形式分发 App,有数量限制,一般用于平常测试
  • 通过 in-house 的形式分发 App,无数量限制,一般用于企业内部大范围测试

除了通过 Apple Store 之外,对于其他几种来说,App 的发布安装是可能不经过 Apple 服务器的,不能都先去 Apple 认证一下吧。既然我们知道校验的方式通常是通过一对密钥来验证的,那我们是否可以在本地生成一对密钥,然后重复上面的步骤呢?这样就可以不用把 App 上传到 Apple 服务器了,但是有两个问题:

  • 用户如何拿到我们本地生成的公钥?
  • 苹果失去了安装认可的权利?

为了避免上述两个问题,Apple 采用了双重签名的机制。

简单来说:就是由 Apple 生成的一对密钥来验证 App,转变为 Apple 的一对密钥来验证我们本地生成的一对密钥,然后拿我们生成的一对密钥来验证 App

流程上来说,我们会先把本地生成的 公钥 L 上传到 Apple 服务器,Apple 服务器会使用自己的 私钥 A公钥 L 进行加密签名生成证书提供给我们下载,然后我们用本地的 私钥 L 对 App 进行签名连同下载的证书一起打包成 ipa 文件,提供给用户下载。用户下载的时候,会先用内置的 Apple 公钥 A 去对 ipa 文件里面的证书进行校验,校验成功之后,取出证书里面的 公钥 L ,然后用 公钥 L 去校验 app 的签名,通过后即可安装运行。

我们可以清楚地看出:私钥保存本地用于签名,公钥分发出去用于校验

上面我们简单描述了双重签名的机制,虽然已经有点复杂了,但是 Apple 对于 App 的权限控制不限于此,Apple 还希望控制:

  • 设备列表(允许安装的设备)

  • App ID(App 唯一标识)

  • App 的各种权限(推送、iCloud、后台运行等权限)

这些信息都会同上面我们下载的证书一起打包成 Provisioning Profile,所以流程上就显得更加复杂, 具体流程如下:

app_sign_check

Https

Https 就是在 http 的基础上添加了一层 SSL / TLS 协议,来保证数据传输的安全性。 而传输的安全性体现在下面几个方面:

  • 身份认证
  • 内容加密
  • 数据完整

这些安全的保证本质上也是通过加密算法来实现的,核心来讲:

通过非对称加密来共享对称加密的密钥,然后通过对称加密来进行通信

整体流程:

https_flow

有关证书 & 密钥流程:


https_cer

参考

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

推荐阅读更多精彩内容