一、相关算法:
1、安全哈希算法(SHA1)、MD5算法
2、非对称公钥算法(RSA)
3、BASE64算法
二、基本概念
1)消息摘要(Message Digest)
简称摘要,也称数字指纹,指在消息数据上执行一个单向的Hash函数,生成一个固定的Hash值,是Android安装程序用来对APK完整性校验的基础,它有以下两个特点:
1、摘要无法推算出消息本身
2、消息不同,摘要自会不同
摘要生成算法主要有:MD5/SHA-0 SHA-1
2)数字签名(Signature)
数字签名就是信息的发送者用自己的私钥对消息摘要加密产生一个字符串,加密算法确保别人无法伪造生成这段字符串,这段数字串也是对信息的发送者发送信息真实性的一个有效证明。数字签名技术是非对称密钥加密技术(RSA)+数字摘要技术(SHA1等)的结合。
数字签名技术是将信息摘要用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的信息摘要,然后接收者用相同的Hash函数对收到的原文产生一个信息摘要,与解密的信息摘要做比对。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改;不同则说明信息被修改过,因此数字签名能保证信息的完整性。并且由于只有发送者才有加密摘要的私钥,所以我们可以确定信息一定是发送者发送的。————[百度百科]
3)数字证书(Certificate)
数字证书是一个经证书授权、中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。CERT.RSA包含了一个数字签名以及一个数字证书。
需要注意的是Android APK中的CERT.RSA证书是自签名的,并不需要这个证书是第三方权威机构发布或者认证的,用户可以在本地机器自行生成这个自签名证书。
三、Android签名的作用与意义
Android系统要求所有安装到系统的应用必须经过签名,它有以下几个特点:
- 所有的应用程序都必须有数字证书 ,Android系统不会安装一个没有数字证书的应用程序;
- Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证;
- 如果要正式发布一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名 ,而不能使用Debug证书来发布。
- 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
Android系统签名主要有ROM签名和应用程序APK签名两种形式。ROM签名是针对已经生成的Android系统ROM包进行签名。应用程序APK签名是针对开发者开发的应用程序安装包APK进行签名。前者是对整个Android系统包签名,后者只对Android系统中一个应用程序APK签名。
Android的应用程序APK签名主要有以下几点作用:
1. 标识应用程序的发布机构与作者
2. 校验APK数据包的完整性,但签名并不能保证数据包的完整性
3. 防止交易中的抵赖发生, Android市场对软件的要求
四、Android的签名机制
对比未签名的APK与签名的APK,会发现经过签名的应用中比未签名的应用多了一个叫META-INF的文件夹,没错,该文件夹就是签名后生成的文件夹,打开该文件可发现META-INF下有三个文件:MANIFEST.MF、CERT.SF、CERT.RSA。
signapk.jar是Android源码包中的一个签名工具。通过追踪signapk.jar的
源码,我们可以完整了解Android的签名过程,(signapk.jar的源码