iOS代码签名机制分析(1)基础

基础知识介绍会结合OpenSSL命令行工具实践,iMac环境可以使用brew或其它方式安装OpenSSL工具。

一,整个互联网世界的安全基石。

整个互联网的安全基石目前来说,个人认为是“非对称加密算法”+“信息摘要算法”+“数字证书机制”,对于开发并运行在iOS系统上的App程序来说,苹果公司也是采取以上方式来保证iOS系统上运行的App的合法性。因此,第一章节会介绍以上三种技术。

1,非对称加密算法。

一般传统的加密方式,通信的双发均需要知晓加密的方法和密钥,在相同规则下,对明文进行加解密。典型案例就是常见的谍战片里面,使用圣经的单词序加解密、数学运算规则加解密等。这样的方式常见的问题就是通信双方都必须掌握到密钥,有可能存在密钥在交换途中被截获,或者被有明文和密文的破解。
因为数论理论而发明的非对称加密算法很好的解决了对称加密算法的问题。非对称加密的密钥有两个,一个私钥,一个公钥。私钥仅能发信者自己持有,公钥可以四处传播,任何想和你加密通信的人,都可以使用公钥加密,将密文传递给你,你可以通过私钥来解密读取密文。
通过公钥,是无法计算出私钥的(或者说现有计算能力需要很长时间才能破解,配合一定的安全策略,如定期更换密钥就可以规避)。RSA加密算法是目前广泛使用的非对称加密算法,一般RSA算法私钥的二进制位数超过1024位,现有计算能力的计算机需要超过几十年才能通过公钥来找到私钥。
openssl工具能够帮助我们生成RSA的公钥和私钥,我们通过一个实验来看看如何使用公钥和私钥加解密明文。在安装了openssl命令行工具的shell下面,执行下面的操作,对sign.txt文本明文进行加解密操作:
(1)首先,使用openssl生成RSA的1024位二进制私钥apri.key

#openssl genrsa -out apri.key 1024

(2)然后,openssl使用私有代码生成对应的共钥apub.key

#openssl rsa -in apri.key -pubout -out apub.key

(3)公钥一般发送给别人,让别人使用公钥加密,这里使用公钥加密sign.txt,密文sign.en。

#openssl rsautl -encrypt -in sign.txt -inkey apub.key -pubin -out sign.en

(4)密文sign.en可以通过私钥解密,得到明文sign.de。

#openssl rsautl -decrypt-in sign.en -inkey apri.key -out sign.de

2,信息摘要算法。

根据百度百科的说明

“摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。”

你只用了解两点
(1)输入源的长短可以不同,输出摘要信息长度相同。
(2)不同输入源对应不同的摘要信息。

因此,对于明文,摘要信息可以做为传输后的校验使用。我们利用openssl工具,同样来看看信息摘要算法:

//实际使用的sha1算法,从任何长度的文笔中,取得唯一的定长摘要信息sign.sha:
#openssl dgst -sha1 -out sign.sha sign.txt

如果我们修改了sign.txt的内容,重复执行以上命令,那么将得到不同的sign.sha。

3,数字证书。

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。
简单来说,证书就是证明非对称算法里的公钥的合法性,这一合法性,由发证机构来保证(技术保证和管理保证)。我们只要使用合法数字证书上的公钥,和证书里公钥拥有者进行通信的话,就保证了这一通信通路的安全和可靠。关于数字证书的详细技术细节这里不多做介绍,读者可以根据非对称加密,信息摘要算法的知识去学习了解证书的合法性技术保证过程。苹果系统通过keychain应用来管理数字证书。

二,iOS APP的代码签名机制。

这一章首先会介绍一下数字签名机制,然后会介绍下iOS里面的代码签名机制。这里面会使用到第一章里面的知识和概念,请读者先保证第一章熟练掌握的情况下,再进入这一章节的实践和学习。

1,数字签名机制。

数字签名实际上由两个过程组成,发送方签名过程和接收方验签过程。这两个过程使用了上面介绍的非对称加密算法和信息摘要算法来实现。目的,就是保证发送方信息的完整性和真实性(没有被中间者攻击所伪造)。通过下图数字签名过程图解,我们可以看看详细的过程:

数字签名的过程

(1)发送方对于发送的信息进行签名的过程。图中蓝色框里的发送信息,我们首先做信息摘要算法,计算出一个固定长度的摘要信息,然后使用非对称加密算法的持有的私钥进行加密(注意,这里是私钥加密,与信息传递过程私钥解密是不一样的),得到加密后的数字签名信息。

(2)该数字签名信息和发送信息一起发送给接收方进行数字验证签名过程。接收方使用非对称加密的公钥对数字签名信息进行解密,得到D‘,然后对发送过来的信息进行信息摘要,得到D。比对D和D‘,如果一致,就证明签名通过。

以上过程,保证了发送的信息在传播过程中,没有发生变化或者被替换。我们同样可以使用openssl工具来模拟这一过程,我们继续使用第一章介绍的RSA加密得到的公钥和私钥进行试验:

// 1 首先,使用私钥apri.key对信息摘要sign.sha进行签名加密得到signature.bin。
#openssl rsautl -sign -inkey apri.key -in sign.sha -out signature.bin

// 2 然后,使用公钥apub.key对加密后的密文进行验签,会解密出摘要sign2.sha。
#openssl rsautl -verify -pubin -inkey apub.key -in signature.bin -out sign2.sha

// 3 最后,使用diff工具,比对一下前后两个摘要是否一致。
#diff sign.sha sign2.sha 

2,iOS的代码签名机制。

iOS系统使用数字签名机制保证了运行在iOS系统中代码的合法性和完整性。当使用XCode开发环境,编写好APP后。所有的代码或者图片素材就是我们需要签名的信息源,我们使用摘要算法对这些信息源进行摘要,然后使用私钥对这些签名进行签名。这些程序和素材资源经过签名后会和公钥一起打包成ipa包,在iOS系统载入运行的时候,使用公钥对程序和素材验签,保证程序和信息的合法和完整,通过之后就能够在iOS上运行了。这就是iOS的代码签名机制。
读完以上的话,请稍微冷静的思考一下,上面描述的这段过程所存在的问题。
(1)RSA的公钥和私钥从何而来?
(2)iOS设备如何保证该公钥和私钥有权限对代码进行签名和验签操作?

请结合苹果的开发者证书获取过程,来思考下iOS代码签名的过程,及以上两个问题的答案,在本系列的第二篇文章会给出详细解答和描述,这里考察下读者的自学和专研能力。

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

推荐阅读更多精彩内容