理论基础
数字签名它是基于非对称密钥加密技术与数字摘要算法技术的应用,它是一个包含电子文件信息以及发送者身份,并能够鉴别发送者身份以及发送信息是否被篡改的一段数字串。
一段数字签名数字串,它包含电子文件经过Hash编码后产生的数字摘要,即一个Hash函数值以及发送者的公钥和私钥三部分内容。发送方通过私钥加密后发送给接收方,接收方使用公钥解密,通过对比解密后的Hash函数值确定数据电文是否被篡改。
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。
(图片来源网络)
数字签名方案是一种以电子形式存储消息签名的方法。一个完整的数字签名方案应该由两部分组成:签名算法和验证算法。
(图片来源于网络)
android数字签名
在android的APP应用程序安装过程中,系统首先会检验APP的签名信息,如果发现签名文件不存在或者校验签名失败,系统则会拒绝安装,所以APP应用程序在发布到市场之前一定要进行签名。
在OTA升级中也必须使用到数字签名进行校验,在应用版本迭代必须使用相同的证书签名,不然会生成一个新的应用,导致更新失败。在更新过程中使用相同的证书签名的应用可以共享代码和功能
App安装过程中签名检验的流程:
1、检查 APP中包含的所有文件,对应的摘要值与 MANIFEST.MF 文件中记录的值一致。
2、使用证书文件(RSA 文件)检验签名文件(SF文件)是否被修改过。
3、使用签名文件(SF 文件)检验 MF 文件没有被修改过。
(图片来源网络)
CERT.RSA包含数字签名以及开发者的数字证书。CERT.RSA里的数字签名是指对CERT.SF的摘要采用私钥加密后的数据;
MANIFEST.MF文件中是APP中每个文件名称和摘要SHA256;
CERT.SF则是对MANIFEST.MF的摘要。
android中的数字签名有2个主要作用:
1、能定位消息确实是由发送方签名并发出来的,其他假冒不了发送方的签名。
2、确定消息的完整性,签名它代表文件的特征,文件发生变化,数字签名的数值也会发送变化。
Anroid中的签名证书不需要权威机构认证