你应该知道的Android署名知识

手机软件开发 2024-9-19 18:22:51 128 0 来自 中国
媒介

最近帮测试做了一点关于署名的需求,本日就和各位同砚简朴聊一聊关于署名的那些事儿。
假如问到 Android 为什么必要署名?各人都大概想到官网的表明:
Android 体系要叱责部 APK 必须先使用证书举行数字署名,然后才能安装到装备上举行更新。
这是一个比力含糊的表明,简朴来说,有了署名,就可以让 App 和开发者绑定。
毕竟,应用那么多,别的开发者也有大概盗用你的代码,这个时间,包名和你雷同,代码和你雷同,怎么区分你的 App 和这些人的 App 不是同一个呢?
这个时间数字署名就派上用场了。
一、署名根本

想要彻底相识署名知识,我们得相识以下知识:

  • 消息摘要
  • 数字署名
  • 加密
  • 数字证书
这一系列的知识各位大概在学习网络的时间或多或少的接触过。
我们简朴的学习一下这些知识:
1. 消息摘要

消息摘要经常被被称为数字摘要大概数字指纹,界说如下:
在原来的数据根本上,颠末一个单向的 Hash 盘算,得到一个固定的 Hash 值,这就是消息摘要。
常见的摘要算法都有 MD5、SHA-1 和 SHA-256,特点如下:

  • 长度固定,与内容长度无关:比如 MD5 是 128 位、SHA-1 是 160 位、SHA-256 是 256 位。
  • 看似随机,着实不随机:同内容两次摘要得出的结果划一
  • 单向:只能从原数据得出摘要,不能从消息摘要得出原来的数据
  • 良好的摘要算法很难 Hash 碰撞
基于此,消息摘要经常会被用来查抄内容的完备性。
比如我们下载出发点读书,消息摘要的用法如下:

  • 盘算摘要:App 会针对本身的文件信息盘算出一个数字摘要比如 123**...**123
  • 下载App
  • 验证摘要:对下载的 App 再次盘算摘要,比如得出的也是 123**...**123,和之前的数字摘要一对比,这就代表我从服务器下载的内容是完备的,可以正常使用
固然,上面值涉及了摘要部门,其他过程,我们背面分析。
2. 加密算法

什么是加密?
百科是这么表明的:
将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经过解密过程,才能将密文还原为正常可读的内容。
所以啊,加密方法得到的密文是可以变革为明文的,像信息摘要算法比如 MD5 得出来的结果是不可逆的,所以口试官问你们什么事加密算法的时间,你可不能把 MD5 说进去!
加密算法分为两大类,对称加密非对称加密
2.1 对称加密

对称加密在加密息争密的时间使用的同一把钥匙:
2.png 图片来自《一文彻底搞懂加密、数字署名和数字证书!》
2.2 非对称加密

非对称加密是使用公钥/私钥中的公钥来加密明文,然后使用对应的私钥来解密密文的过程:
3.png 图片来自《一文彻底搞懂加密、数字署名和数字证书!》
简朴对比一下对称加密和非对称秘密:
非对称加密对称加密速率慢快服从低高安全性高低常见算法RSA\DHAES\DES\IDEA2.3 使用场景

学过网络的同砚应该都相识,在 Https 的传输过程中,客户端和服务端使用非对称加密天生对称加密的密钥,然后用对称加密传输网络中的数据。
比如我上大学那会儿,每个月的月尾我和我妈的对话是如许的:
网络情况是开放的,万一这时,有一个黑客监听了我和我妈的对话,过程就酿成了如许:
5.png 在我发卡号的时间,黑客将我的卡号改成了它的卡号,于是我的米饭钱酿成了他的米饭钱。
为了制止这种情况,于是我和我妈约定好了,每次发送前,使用对称加密对消息举行加密,继承消息的时间使用密钥解密,过程就酿成了如许:
中心人再也不能获取到消息了,看似一点标题都没有,但是我和老妈之间怎样确定密钥呢?
密钥总要在互联网之间举行传输的,有传输就有被中心人截获的风险,一旦被截获,钱可就没了!
为相识决对称加密钥匙传输的标题,我和老妈用上了非对称加密,像如许:
纵然如许,照旧有标题存在:

  • 怎么才能确认我得到的公钥来自老妈?
  • 怎样确定消息确实来自老妈?
办理这两个标题也很简朴,一是数字署名,二就是数字证书。
3. 数字署名

数字署名的作用是为了消息的完备性。
在非对称加密的体系下,消息的发送过程是如许的,照旧上面的例子:
数字署名的过程是如许的:

  • 我发送消息前,使用 Hash 算法针对数据得出一个摘要
  • 我使用老妈的公钥对摘要内容举行加密,连同对称加密的数据一起发送已往
  • 老妈吸取到消息后,先使用对称密钥对内容解密,再举行 Hash 盘算得出摘要
  • 老妈使用私钥将摘要内容解密,和再次盘算得出的摘要尴尬刁难比,划一就代表消息无误
上面的这种场景着实有点不妥,数字署名一样平常用在证书上,协商好对称密钥以后一样平常不会举行消息完备性校验了,不外大伙只要相识数字署名要来校验消息完备性就好。
制止如今,尚有末了一个标题,我无法确认获取的公钥确实来自老妈。
3. 数字证书

证书的作用很简朴,证明公钥的身份。
就像在实际中,各人都是怎么证明本身的身份的?
没错,是身份证。你有没有发现,每张身份证,会有三种信息:

  • 自身的信息
  • 置办身份证的派出所
  • 有效期
对应的数字证书也有许多内容:

  • CA:证书的颁发机构
  • 证书的有效期
  • 公钥
  • 证书的授予对象
CA 将这些内容使用 CA 的私钥举行署名,用户使用 CA 的公钥验签,从而证明公钥的身份。
常见的证书分为两种:

  • 署名证书:由 CA 机构颁发,绝大部门网站都接纳的这种方式
  • 自署名证书:由服务器本身颁发给本身
重回之前的例子,老妈只必要将本身的署名证书发给我,我就可以获取她的公钥,之后就可以正常的通讯。
二、Android署名机制

在 Android 中,也必要使用数字证书做数字署名,数字证书中公钥对应的私钥由开发者持有。
关于私钥和证书的天生方式,可以查察:
《Android官方文档》
在 Android Studio 中,终极会天生一个 .jks 的文件,早期 Eclipse 是 .keystore,它们都是用作证书和私钥的二进制文件。
App 假如使用了一种私钥署名,别的一个私钥署名的文件将无法安装或覆盖老的版本,如许做是为了防止已经安装的 App 被恶意的第三方覆盖。
1. Android署名机制的异同点

Android 中数字署名的天生宁静常的数字署名并没有很大的区别。
但是举行数字署名的证书可以接纳自署名证书,即不必要权势巨子证书颁发机构(CA)来做背书,由于它的作用是用来标识应用步伐的开发者,下载的用户并不必要这个证书来下载该 App。
2. Debug和Relase的署名

当我们在IDE中运行或调试项目时,AS 会主动使用 Android SDK 工具天生的调试证书为我们的应用署名,路径为 $HOME/.android/debug.keystore,但是应用市肆可不继承使用调试证书发布的应用署名。
打包Release时,我们一样平常会在 app 模块中的 build.gradle 举行设置:
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-4-19 19:13, Processed in 0.139581 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表