Android安全机制(三)

证书的颁发者和被颁发者都是自己,实际上是用证书里公钥字段的值对应的私钥来进行签名的,也就是将证书内容进行HASH后拿证书拥有者的私钥进行加密(签名的过程)。



对于系统而言,要鉴别是否可信任,首先需要有签名和证书。然后往上回溯,直到根证书,如果是在系统信任列表里的,那就是可信任的。


人为的把一些操作归类,当用户调使用的应用调用这些操作的API时,系统表现得不一样。比如不可信任的应用,当调用短信功能时,发短信之前系统会弹窗让用户确认是否确定要发送消息,用户体验会很差。






比如Android平台中,可以在AndroidManifest文件中对权限进行申请:

<uses-permission android:name="android.permission.INTERNET" />

是否被批准由平台决策来决定。例如以上的网络请求权限肯定会被批准,只要用户安装应用的时候接受了,应用就能正常访问网络。

但是例如Reset(重启手机)这种权限,平台不会批准,只会批给原生的一些应用。



应用在签名的时候是把AndroidManifest文件、src文件全部作为一个整体进行签名的,所以一旦签名后再去修改权限申请,和公钥解密后的内容是对不上的。


一些特权权限,必须要用系统的私钥去签名才能在安装的时候通过,所以只有系统内置的应用才能使用特权权限,而我们普通开发的应用因为没有系统的私钥,只有自己的私钥,当然也不能通过了。





Android是自签名的,也就是证书是自己颁发给自己的,并不是受信任CA颁发的,没有办法确定证书的可信任性。

主要是做完整性的鉴别,防止内容被篡改。

因为并没有可信任的模式,所以在安装和运行时无法对是否可信任做限制。

仅仅是在安装的时候对签名进行验证。运行时不会再验证签名!




同一个开发商开发的多个应用,为了方便相互数据访问,设置同一个sharedUserId。



升级应用,新的应用必须和老的应用id一样,也就是包名一样,同时证书也要一样。



apk文件实际上就是压缩包,用普通解压软件解压以后得到如下界面:


打开META-INF文件夹,里面有3个文件:




前面解压apk的时候有个res目录,这里把res目录下的所有资源文件都进行了SHA1的计算得到HASH值,即SHA1-Digest




第二行的SHA1-Digest-Manifest: i19xvR6tIRLRWIV4cZGWDvQvvNE=   ,其实是对MANIFEST的内容进行是SHA1计算所得到的HASH值。

下面是对MANIFEST中每一项,即Name:后面的内容+SHA1-Digest:后面的内容,整体进行SHA1计算又得到了很多个HASH值。



这里的内容既包括证书内容也包括签名。

首先对CERT.SF里的所有内容进行SHA1计算得到HASH值,再把这个HASH值用私钥进行RSA加密得到签名。




申请的权限一般与某个操作关联。

必须在Androidmanifest文件中申请权限。

用户可以在应用管理里查看应用所申请的权限,不可控是指用户在安装应用的时候要么全盘接受权限,只要有一个不接受就安装不了。

用系统的私钥来签名,从而对特权权限的单独控制。




android :protectionlevel=“ ”;

Normal是常规的,Dangerous是敏感的,在安装应用的时候会提示。

Signature:当应用是第三方应用时,必须要是应用开发者的私钥签名才能申请使用;当应用是系统内置应用时,必须是系统平台的私钥签名才能申请使用。

SignatureOrSystem:满足Signature或者系统级别的。 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值