1、签名是什么
要知道签名是什么,先来看为什么需要签名 。大家都知道,在消息通信时,必须至少解决两个问题:一是确保消息来源的真实性,二是确保消息不会被第三方篡改。在安装Apk时,同样需要确保Apk来源的真实性,以及Apk没有被第三方篡改。如何解决这两个问题呢?方法就是开发者对Apk进行签名:在Apk中写入一个“指纹”。指纹写入以后,Apk中有任何修改,都会导致这个指纹无效,系统在安装Apk进行签名校验时就会不通过,从而保证了安全性。进行签名校验,校验通过后才能安装成功。那在这个过程中签名校验的机制是什么?具体校验的是什么内容?我们APP是如何进行签名管理、签名以及发布验证呢?本篇文章将从这几个方面进行介绍。
要了解如何实现签名,需要了解两个基本概念:数字摘要和数字证书。
1.1数字摘要
数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单向Hash函数将需要加密的明文“摘要”成一串固定长度的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。
1.2签名大概过程
前面已经说到,可以通过签名来确保数据来源的可靠性和数据的不可篡改性。签名就是在摘要的基础上再进行一次加密,对摘要加密后的数据就可以当作数字签名,在安装Apk需要对签名进行验证,验证通过才能继续安装。
1.3证书
接收方必须要知道发送方的公钥和所使用的算法。如果数字签名和公钥一起被篡改,接收方无法得知,还是会校验通过。如何保证公钥的可靠性呢?答案是数字证书,系统在安装Apk时并没有校验证书本身的合法性,只是从证书中提取公钥和加密算法,这也正是对第三方Apk重新签名后,还能够继续在没有安装这个Apk的系统中继续安装的原因。
2.签名校验
Android与iOS签名实现和校验方式有所不同,以下将分平台介绍两端各自签名校验过程。
2.1Android签名方式
Android 的签名方案,发展到现在,已经支持三种应用签名方案:
- v1 方案:基于 JAR 签名。
- v2 方案:APK 签名方案v2,在 Android