一、背景

在OS X上病毒和恶意软件很少见,给大家的感觉是OS X和iOS更加安全。到底是什么原因导致的OS X更加安全呢?

(1)OS X占有率较低,没有吸引足够的恶意软件开发者的注意(假设你是恶意软件开发者,正在图谋准备下一次非法勾当。你是愿意花精力真对全世界90%以上的电脑下手,还是剩下的5%的电脑呢?)。

(2)UN*X家族的OS总是坚持最小权限原则,这样可以避免用户默认以root权限访问系统。

(3)苹果应用程序的安全机制(签名机制和隔离机制)。



二、签名机制

在确认软件安全之前,首先须要对软件的来源进行真实性验证。如果一个应用程序是从网上随意下载的,那么这个应用程序是恶意软件的风险就特别大。所以,如果能验证应用程序的来源,那么这个风险就会大大降低,而且还可以验证这个应用程序的完整性(传输过程中有没有被篡改)。代码签名就是实现这个目的的机制,苹果鼓励开发者对自己开发的应用程序进行签名并通过这种方式(SSL验证,通过发布者的私钥对公钥进行签名)验证身份。由于苹果将其证书保存在OS X和iOS的钥匙链中了,使得苹果才是唯一具有root权限的实体。其中OS X中的代码签名是可选的,iOS是强制的。

在介绍签名机制之前,需要介绍下非对称加密算法和摘要算法:

1、非对称加密

简而言之,非对称加密就是指加密密钥和解密密钥是不同的,而且加密密钥和解密密钥是成对出现。非对称加密又叫公钥加密,也就是说成对的密钥,其中一个是对外公开的,所有人都可以获得,称为公钥,而与之相对应的称为私钥,只有这对密钥的生成者才能拥有。公私钥具有以下重要特性:

(1)对于一个私钥,有且只有一个与之对应的公钥。生成者负责生成私钥和公钥,并保存私钥,公开公钥;

(2)公钥是公开的,但不可能通过公钥反推出私钥,或者说极难反推,只能穷举,所以只要密钥足够长度,要通过穷举而得到私钥,几乎是不可能的;

(3)通过私钥加密的密文只能通过公钥解密,公钥加密的密文只有通过私钥解密;

著名的RSA算法就是非对称加密算法,RSA以三个发明人的首字母命名。

2、摘要算法

可以将任意长度的文本,通过一个算法(散列函数),得到一个固定长度的文本。这里文本不一定是文本,可以是字节数据。所以摘要算法试图将世间万物,变成一个固定长度的东西。摘要算法的特点:

(1)只要源文本不同,计算得到的结果,必然不同;

(2)无法从结果反推源(不可逆);

典型的摘要算法:MD5和SHA。摘要算法主要用于比对信息源是否一致,因为只要源发生变化,得到的摘要必然不同;而且通常结果要比源短很多,所以称为“摘要”。

3、数字签名

数字签名其实就是利用上述的两种算法非对称加密和摘要算法结合起来,它首先对数字内容使用摘要算法生成一段固定长度的文本,可以理解为原内容的摘要A,然后再利用私钥加密摘要,即可得到原内容的数字签名。接收方会同时收到原内容和对应的数字签名,首先对接收到的内容使用相同的摘要算法,生成摘要B,同时用公钥解密数字签名,得到摘要A,然后对比A和B,若相同,则原内容验证通过。画了流程图如下:

软件安全架构流程图 软件安全机制_签名机制

软件安全架构流程图 软件安全机制_keyChain_02

4、iOS开发中数字证书的申请与验证(如果时间不够可以不讲)

数字证书是苹果公司数字签名后的数字化证书,是ios系统校验App的核心。以下是数字证书的申请过程如下:

(1)捣弄过苹果keyChain的人应该知道,首先你需要在本地创建一个CSR文件(CertificationSigningRequest),这是一个证书申请文件

该文件包含开发者的信息、公钥、私钥以及公钥加密算法和摘要算法;

(2)开发者需要上传CSR文件给苹果的MC(MemberCenter)。苹果公司会根据这个文件的生成一个证书,包含两部分,证书的内容和一段苹果的数字签名(利用苹果自己的私钥加密内容摘要得到)。证书形成的过程中,由于iOS系统本身装有苹果的公钥以及摘要算法,所以经过本地的数字签名的验证之后,证书则为有效证书。与此同时,从MC也下载得到了描述文件(mobileprovisoon),描述文件包含了:

      1)AppId:每个App必须在MC中创建一个对应的AppId;

      2)所使用的证书:证书有多种,不同的证书代码了不同的发布方式或者途径;

      3)功能授权列表:有哪些服务可以使用,例如APNS等;

      4)可安装的设备列表;

      5)苹果的签名;

(3)Xcode在打包生成ipa文件的过程中,利用当前证书的私钥进行代码、资源文件的数字签名,并且将其存在在ipa的_CodeSignature文件夹下。同样的,当用户下载ipa并安装到iOS系统上时,系统会首先通过描述文件找到数字证书,通过证书里的苹果的数字签名,按照签名的步骤验证证书的有效性,如果通过,继续取出证书中的开发者公钥,解密App内容的数字签名,如果发现摘要一致,则验证通过。App则可以成功安装在手机上。

如果某个未经签名的应用程序通过某种神奇的方法进入iOS 的文件系统,那么任何尝试加载这个应用程序的行为都会导致整个应用程序的进程被内核杀掉。当然,代码签名程序也有可能是恶意的,然而任何违反了服务条款的应用程序的开发者都会被苹果列为不受欢迎之列(黑名单),由于注册苹果开发者时要求必须提供个人或者团体资料,所以恶意开发者可能会吃官司。

三、参考文献:

1.《Mac OS X and iOS Internals: To the Apple's Core》

2. http://www.blogjava.net/yxhxj2006/archive/2012/10/15/389547.html