Nokia 收购了 Sympian 的全部股份 ,我也终于第一次 用上了 S60 (N82拍照强机) ,过年前入手,到现在搞搞证书 ,装装软件, 研究了一下 单单安全设计方面 令我 惊叹不已 ,怪不得到现在 S60还没有病毒出现,想起了 曾经的一门课 : 密码学与网络安全 ,当时脑子都要绕晕了 ,S60 却是完美的实现了 RSA 的 安全体系 ,很好很好
转载一篇 , 缅怀一下 曾经的 网络安全学习 时期
Symbian智能手机系统中代码签名的原理浅析
2008-09-10 12:38
转自http://mi2006.5d6d.com/thread-1058-1-1.html
随着手机技术的发展,人们的生活越来越离不开手机。昨天只能用来打电话的手机,今天却像电脑一样占有不可取代的地位。以前需要随身携带笔记本才能做到的任务,现在只需要一部智能手机就可以做到了。然而随着手机重要性的增加,其安全性也越来越受到关注。我们都不希望手机像电脑一样首要病毒的侵害,所以在 symbian公司退出的最新版本s60第三版系统中引入了数字签名技术以保证系统不会受到病毒的攻击。对需要高权限的安装程序要受到审核并进行签名以验证其安全性和不被篡改。
现在数字签名就好像好像手写签名一样受到认可,其可靠性可以把病毒阻止的系统之外。其实现主要依靠于的非对称密钥加密和信息摘要技术。其主要技术概述如下:
1、非对称密钥加密:
非对称密钥加密也称公钥加密。它使用两个密钥构成一对,一个用于加密,一个用于解密,其他密钥都无法解密这个消息,包括用于加密的密钥。两个密钥中,一个是公钥,一个是私钥,私钥保密,公钥公开,用公钥加密的信息只有私钥才能解开。这样传递信息时无须传递私钥解决了对称密钥加密时密钥传递的问题。其缺点是加密/解密速度慢,产生密钥长于消息不利于传递。当前应用较多的是RSA算法,其算法基于大数的因数分解困难性。
2、消息摘要:
消息摘要又称散列(Hash),对一段信息产生唯一的一个数字标识,是消息的指印或汇总,就像人类的指纹一样起着识别的作用。它要求如下:1、给定一个消息,应很容易求出唯一消息摘要;2、给定消息摘要,应该很难求出原来的消息;3、给定两个消息,求出的消息摘要应该不同。常用算法有MD5和SHA-1。
数字签名基于这样一个事实,如果我们用自己的私钥加密消息,那么任何持有公钥的人都可解密消息,这样做虽然无法保证消息不被外泄,但是因为只有拥有私钥的人才可以加密消息,所以可以相信其消息确实来源于私钥持有人。
Symbian的代码签名流程如下:
1、 申请证书;
2、 发放证书;
3、 使用证书对程序签名;
4、 安装程序验证真实性。
1、 申请证书
首先我们要有私钥,私钥可能是我们自己生成的,也可能是symbian公司生成的。这里假设私钥为我们自己生成。Symbian的数字证书一般采用RSA 或DSA算法,这里以RSA算法为例。我们用自己的私钥产生公钥,用私钥加密开发者信息等申请资料的消息摘要(这里用SHA-1算法),将公钥和申请资料及消息摘要一并生成csr申请文件。
将csr文件上传到塞班的服务器上。由symbian公司进行验证。Symbian通过上传的公钥可以解开csr里面的信息,即消息摘要。通过SHA-1 算法计算申请资料的消息摘要进行核对,确定其来源真实性后,symbian用自己的RSA的私钥对上面的信息的信息摘要做数字签名。然后后再加上 verisign发给symbian的证书,这个证书的目的是证明上面信息是symbian发布的。然后就完了成整个证书。Verisign是权威的数字证书机构,有权向个人和组织签发数字证书。
2、 发放证书
证书制作好后,就可以发放给开发者使用。这个数字证书是一个cer后缀的计算机文件。其内容经过编码处理,可以在计算机上通过程序查看其主要信息。 Symbian发放的数字证书如前面所提实际上包含两个证书,一个为symbian发布的证书,一个是Verisign发布的证书。其结构在satyam 标准中定义,最新版本是X.509V3,symbian的证书采用的就是这个版本。
(1)、第一个证书里面是些基本的信息,有证书的有效期、发布证书的机构 symbian、授权给的公司和开发者持有私钥对应的公钥。文件末尾还包含一个数字签名。这里是symbian对上面信息的一个数字签名。所以要验证上面信息的正确性和完整性只要用SHA-1算法对上面的信息计算得出一段信息摘要。用symbian公司的RSA的公钥解开这个密文得到一段明文比较这段明文和信息摘要的一致性就能验证上面信息的是否是由symbain发出的。因为如果上面的信息被修改过用SHA-1产生的信息摘要和明文就不会一致。这样数字签名就失效了。而且能用symbian的RSA的公钥解开的密文必须要由symbian的RSA的私钥才能做出来而symbian的RSA的私钥只才 symbian的签证专用的服务器里才会有的。所以其他人是无法伪造这个数字签名的。如果签名正确就足以证明上面信息是symbian发布的。绝不是其他人发布的。而且上面的信息保持着完整性和正确性。
(2)、第二个证书里面同样包含一些基本的信息。里面有使用的算法,以及发布者的信息、授权者的信息、证书的有效期和symbian的RSA的公钥。最后开始的是Verisign公司对上面所有信息的数字签名。使用的算法是SHA-1 和RSA。这里有Verisign的对应的RSA公钥同样能验证这个数字签名的有效性。
3、 使用证书对程序签名
(1)、首先用对应的消息摘要算法(这里是SHA-1)对要签名的软件产生一段信息摘要。
(2)、用私钥文件对这个信息摘要进行加密。
(3)、把这个经过加密的信息摘要和数字证书里的两段内容一起附加到软件程序文件的头部。这样签名工作就已经做好了。
4、安装程序验证真实性
(1)、我们为什么会相信数字证书真实可信?答案在于根CA证书。根证书是权威证书机构为验证数字证书的有效性而发布的证书,包含该机构的公钥。在手机出厂前手机就已经安装了很多根证书。期中就包含Verisign公司的RSA算法的公钥。由这个公钥就可以验证数字证书里第二段内容的Verisign公司的数字签名。如果这个时候失败则手机显示“证书错误,请与应用程序供应商联系”,如果成功的话手机系统就会信任这个数字签名里包含的symbian的一个 RSA公钥。因为有且只有公钥才能验证私钥的签名。所以就可以判断这个信息的却为Verisign公司发布绝无伪造和篡改过。所以程序可以信任那个 symbian的一个RSA公钥。
(2)、有了一个可信任的symbian的一个RSA公钥。就可以验证开发证书里的第一段内容symbian的数字签名。如果失败还是显示“证书错误,请与应用程序供应商联系”,成功的话手机系统就可以信任里面开发者的公钥。还有这个签名中包含的有效期,申请的能力,开发者的资料。由于这些信息是用 symbian的RSA私钥签名的,有了可信任的symbian的一个RSA公钥,就可以完全说明这些信息是symbian发布和承认的。
(3)、有了上面可信任的资料,把已经用私钥加密过的消息摘要,用刚才信任的那个公钥解开得到软件的信息摘要。然后再次计算软件的信息摘要。比较这两个信息摘要是否完全相同。不同则显示软件已损坏,相同说明软件未被篡改过和保持着完整性。如果没有出错就开始软件的安装了。
经过如此严格的验证过程后,系统的安全就有了足够的保障。病毒的制作者无法通过symbian公司的检测无法得到数字证书,而那些获得数字证书的软件绝不会威胁到系统的安全。通过对其代码签名的分析,只要symbian和Verisign的私钥不被泄露或破解,任何第三方就无法制作可以获得手机信任的证书,但是要获得手机信任并非只有制作证书这一条路。我们知道在手机里验证证书有效性的是根证书,那么只要替换掉系统的根证书整个验证过程也就失效了。很不幸的就是现在已经有了可以做到替换掉系统根证书的方法,但是由于其复杂性还不可能被病毒利用,所以现在来看,symbian系统还是安全的。