Pro Android学习笔记(八三):了解Package(2):包签名过程

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/

在Windows等操作系统中安装应用并不需要授权,为何Android需要?在设备安装的包都有一个唯一的包名,如果你试图安装一个已有包名的应用,是不会允许的,除非将之前的包删除。为了允许包升级,你必须确保是相同应用发布者,这需要数字签名。

类比例子

葡萄酒收集家发现每一种葡萄酒都有独一无二的色泽,如果色泽相同,必定来自同一葡萄酒生产厂家,无法仿造。色泽可以作为葡萄酒厂家的标识。这个例子和应用签名的唯一差别在于,色泽可没写着厂家名和地址,没有透露葡萄酒厂家信息,而我们前面学习的签名过程中,也相关信息的输入。

我们出国打开收音机,听到不同歌手唱歌,我们知道他们每个不同,但不知道他们的名字,这是歌手通过声音的自我签名。如果一个朋友告诉你某个你听到声音的歌手情况,这就类似于第三方签名。歌手可以模拟其他人来混淆,但是数字签名由算法保证不会被冒用。

当我们谈及某人签了一个JAR文件,这属于self-signed JAR文件,这些JAR文件都有独特的“颜色”与其他的JAR文件区分,但没有没有多余源开发者或公司进行鉴权。在之前的学习的签名,就属于自我签名,自己写上名字和公司,如果乐意,可以写成CIA,是否正确没有得到权威机构所认可。如果由第三方权威机构给出“红颜色”来自公司A,当我们看到“红颜色”,就知道来源公司A,这就是第三方签发的JAR文件。

数字签名

数字签名采用公/私钥加密,这是非对称加密算法,通过私钥进行加密,只能通过公钥进行解密。尽管大家都知道公钥,但因为不知道私钥,无法伪造能通过公钥进行解密的数据。

签名也称为公钥基础建设(public key infrastructure,PKI)证书,使用KPI证书签发JAR,DLL或者应用。每一个包名只能有一个PKI证书,一个PKI证书可去签支持多个包。通过之前的学习keytool和jarsinger命令,通过密码(keypass)来保护私钥。我觉得这有有个漏洞,公私钥算法假定很安全,如果破解的保护私钥的密码,就可以拿这证书去进行签名。这变成如何保护这个密码的问题,无孔不入的NSA是否已经可以破译这个保护密码。

相关链接: 我的Android开发相关文章

你可能感兴趣的:(Pro Android学习笔记(八三):了解Package(2):包签名过程)