从2010年Android2.3开始,Android系统就不断地完善和稳定,曾经每年升级一次版本都需要花费很长的时间,且新版本都很不稳定,开发者难度很大;从Android4.4版本开始,一切都好转了;从5.0版本开始,Android的安全性也得到了明显提升,在kernel内核加入了Selinux,权限配置让App不能随意的使用系统的权限;在4.4版本中开始加入了Turstzone功能,刚开始只是在Android系统启动流程中使用,后来最广泛使用的还是得益于指纹解锁,当Android将指纹作为标准设备接口集成在版本发布后,指纹TA将指纹数据安全加密存储,不能上传用户指纹数据,并作为一个行业标准,用户才安心使用指纹。进几年大家用的最多的和最熟悉的功能:指纹支付;这一切都是建立在PKI安全体系的运用。同时Android借鉴PC的理论来处理碎片化问题,将核心内核系统隔离出来,尽最大不让修改;增加vendor,oem功能分区让厂商专注自身模块的功能,这样有益于双方的版本迭代开发。Android也将运用于PC的TPM可信计算理论带入,于是Android系统加入AVB(Android Verified Boot)验证功能,本章节就是基于此概念上的密码学运用。
本章主要涉及到的知识点有:
- 具体非对称算法,RSA和国密SM2
- Hash单向运算函数
- 签名验签流程
- 证书认证,信用链
- 安全芯片
- 带安全芯片的Android安全系统
本节介绍一个我们具体实践的案例,带安全芯片的Android安全系统。在整个案例中,主业务正是充分应用了密码学体系的机密性,不可否认性,密钥安全存储,在系统的最初下载,到运行阶段,都进行了充分的合法性完整性验证,保证了代码在整个运行过程中,能检测到外部的恶意攻击和篡。以下章节分别从设计原理和代码实践详述。
-
-
- 思维导图
-
思维导图和技术前提
在密码学的应用中,遵循密码学的核心理念
(1)加解密的算法不是关注焦点,因为他是开放的专业的数学问题
(2)需求和问题导向原则,所有技术都是由需求和问题引入
(3)抓住核心,密码学的机密性,完整性,不可否认性
(4)在以下内容中,您必须对Android编译,Makefile,Python,系统启动流程有所了解;并能熟练根据问题和架构,定位密码应用的代码能力。
在计算机世界如何证明一个人的身份不像现实世界,是比较困难的,但是原理却是相似的。比如如何证明你爸是你爸,更哲学的问题是,如何证明你是你自己。这一切在现实世界依赖于一张身份证,没有这个身份证,几乎办理不了任何业务。另外一个有趣的问题是,人们会通过熟人来介绍认识朋友,更容易相信朋友的朋友;这其中对应的思想便是信用链,所以在工作中大部分人会跟领导搞好关系,因为领导跟老板关系好,一旦有好事,老板自然会通过信用链传递到你。计算机系统里也采用这种方式
自定义Key verity_key ---这个Key是加载在内核中,验证system hash tree
out/host/linux-x86/bin/generate_verity_key -convert veritykey.x509.pem verity_key
adb security: 新Android版本,需要先adb disable-verity ,然后adb remount
disable-verity disable dm-verity checking on userdebug builds
enable-verity re-enable dm-verity checking on userdebug builds