所有Android应用程序都必须被开发者数字签名,即使用私有密钥数字签署一个给定的应用程序,以便识别代码的作者,检测应用程序是否发生了改变,并且在相同签名的应用程序之间建立信任,进而使具备互信关系的应用程序安全地共享资源。使用相同数字签名的不同应用程序可以相互授予权限来访问基于签名的API。如果应用程序共享UID,则可以运行在同一进程中,从而允许彼此访问对方的代码和数据。
应用程序签名就需要生成私有密钥与公共密钥对,使用私有密钥签署公共密钥证书。应用程序商店与应用程序安装包都不会安装没有数字证书的应用。但是,签名的数字证书不需要权威机构来认证,应用程序签名可由第三方完成,如OEM厂商,运营商及应用程序商店等,也可由开发者自己完成签名,即所谓自签名。自签名允许开发者不依赖于任何第三方自由发布应用程序。
在安装应用程序APK时,系统安装程序首先检查APK是否被签名,有签名才能够安装。当应用程序升级时,需要检查新版应用的数字签名与已安装的应用程序的签名是否相同,否则,会被当作一个全新的应用程序。通常,由同一个开发者设计的多个应用程序可采用同一私钥签名,在manifest文件中声明共享用户ID,允许它们运行在相同的进程中,这样一来,这些应用程序可以共享代码和数据资源。Android开发者们有可能把安装包命名为相同的名字,通过不同的签名可以把它们区分开,也保证了签名不同的包不被替换掉,同时有效地防止了恶意软件替换安装的应用。
Android提供了基于签名的权限检查,应用程序间具有相同的数字签名,它们之间可以以一种安全的方式共享代码和数据。
时间: 2024-10-12 15:32:07