Android安全加密:数字签名和数字证书

Android本地存储安全 阅读详情

一、数字签名

1. 概述

数字签名是非对称加密与数字摘要的组合应用

2. 应用场景

  • 校验用户身份(使用私钥签名,公钥校验,只要用公钥能校验通过,则该信息一定是私钥持有者发布的)
  • 校验数据的完整性(用解密后的消息摘要跟原文的消息摘要进行对比)

3. 签名过程

“发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。

数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。不同的文件将得到不同的数字摘要。一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。”

这里写图片描述

4. 使用步骤

//获取signature 对象,初始化算法:MD2withRSA, MD5withRSA, or SHA1withRSA
Signature signature = Signature.getInstance("MD5withRSA");
//创建私钥(从磁盘上读取)
PrivateKey privateKey = (PrivateKey)SerializableUtil.readObject(
"heima.privateKey");
//使用私钥进行初始化
signature.initSign(privateKey);
//传入需要签名的数据
signature.update(content.getBytes());
//执行签名
byte[] sign = signature.sign();

//创建公钥(从磁盘上读取)
PublicKey publicKey = (PublicKey) SerializableUtil.readObject(
“heima.publicKey”);
//使用公钥进行初始化
signature.initVerify(publicKey);
//传入需要校验的数据(即上面的原文)
signature.update(content.getBytes());
//执行校验
boolean verify = signature.verify(sign);

5. 总结

数字签名一般不单独使用,基本都是用在数字证书里实现SSL 通信协议。下面将学习的数字证书就是基于数字签名技术实现的。

二、数字证书

1. 概述

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet 上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA 机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

2. 应用场景

  • 交易者身份的确定性、不可否认性、不可修改性
  • 对应用进行签名认证(例如Android 的apk)

3. 数字证书格式

这里写图片描述

数字证书的格式普遍采用的是X.509V3 国际标准,一个标准的X.509 数字证书包含以下一些内容:

  • 证书的版本信息
  • 证书的序列号,每个证书都有一个唯一的证书序列号
  • 证书所使用的签名算法
  • 证书的发行机构名称,命名规则一般采用X.500 格式
  • 证书的有效期,通用的证书一般采用UTC 时间格式,它的计时范围为1950-2049
  • 证书所有人的名称,命名规则一般采用X.500 格式
  • 证书所有人的公开密钥
  • 证书发行者对证书的签名

4. 数字证书原理

这里写图片描述

数字证书是安全领域里的终极武器,SSL 通信协议里最核心的东西就是数字证书。他涉及到前面提到的所有知识:对称加密、非对称加密、消息摘要、数字签名等。

数字证书可以通过java 自带的KeyTool 工具生成,生成后的数字证书一般保管在KeyStore 里。KeyStore可以叫做秘钥仓库。

秘钥仓库可以保管3 种类型的数据:KeyStore.PrivateKeyEntry(非对称机密里的私钥)、KeyStore.SecretKeyEntry (对称加密里的秘钥)、KeyStore.TrustedCertificateEntry(受信任的证书)

5. KeyTool工具

路径:jre\bin\keytool.exe

这里写图片描述

常用命令:
生成keypair

keytool -genkeypair
keytool -genkeypair -alias lisi(后面部分是为证书指定别名,否则采用默认的名称为mykey)

看看keystore 中有哪些项目:

keytool -list 或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer

生成可打印的证书:

keytool -exportcert -alias lisi -file lisi.cer –rfc

显示数字证书文件中的证书信息:

keytool -printcert -file lisi.cer

直接双击lisi.cer,用window 系统的内置程序打开lisi.cer

6. Android 的keystore 相关知识

debug 签名路径:user.android\debug.keystore


这里写图片描述

debug.keystore 的别名(alias)及密码:
别名:androiddebugkey,密码:android

签名命令(jdk1.6):

jarsigner -verbose -keystore debug.keystore -signedjar 1signed.apk 1.apk androiddebugkey

签名命令(jdk1.7):

jarsigner -verbose -keystore debug.keystore -signedjar 1signed.apk 1.apk androiddebugkey -digestalg
SHA1 -sigalg MD5withRSA

优化命令:

zipalign -v 4 1signed.apk 1signedaligned.apk

验证签名是否成功:

jarsigner -verify 1signed.apk

7. 补充

签名证书

由权威颁发机构颁发给服务器或者个人用于证明自己身份的东西,默认客户端都是信任的。主要目的是用来加密和保证数据的完整性和不可抵赖性
例如根证书机构Symantec 颁发给百度的就是签名证书,是受信任的。

这里写图片描述

自签名证书

由服务器自己颁发给自己,用于证明自己身份的东西,非权威颁发机构发布,默认客户端都是不信任的,主要目的是用来加密和保证数据的完整性和不可抵赖性,与签名证书相同.
例如中铁集团(SRCA)办法给12306 的证书就是自签名证书,自己给自己颁发的。

这里写图片描述

三、Android签名机制

1、什么是签名?

Android要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由开发者持有。Android使用数字证书作为标识应用程序开发者的一种方式,并在应用程序之间建立信任的关系,证书并不用来控制用户能否安装那个应用程序,证书不需要有证书认证中心签名,完全可以使用自签名证书(seft-signed certificates)

没有正确签名的应用,Android系统不会安装或运行,此规则适用于任何地方运行的Android系统,不管是在模拟器还是在真实设备上。因为这个原因,在真机或模拟器上运行或调试应用前,必须为其设置好签名。

2、为什么需要签名?

开发Android的人很多,完全可以把包名,类名起成同样的名字,这时候如何区分?签名可以区分开发商或者恶意的开发者可以通过相同的包名混淆替换已安装应用。签名可以保证相同包名但是签名不同的包不被替换。

应用如果使用一种key签名,另外一个key签名的文件将无法安装或覆盖老的版本。防止已安装的应用被恶意的第三方覆盖或替换。签名可以防止交易抵赖

3、Android签名机制

在Android 系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系。

Android 系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。

Android 将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。

这个数字证书并不需要权威的数字证书签名机构认证(CA),它只是用来让应用程序包自我认证的。

同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。

  • 有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android 系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android 系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。

  • 有利于程序的模块化设计和开发。Android 系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块

在签名时,需要考虑数字证书的有效期

  • 数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。

  • 如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。

  • Android Market 强制要求所有应用程序数字证书的有效期要持续到2033 年10 月22 日以后。

Android 数字证书包含以下几个要点

  • 所有的应用程序都必须有数字证书,Android 系统不会安装一个没有数字证书的应用程序

  • Android 程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

  • 如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt 插件或者ant 工具生成的调试证书来发布

  • 数字证书都是有有效期的,Android 只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能

4、Android签名过程

这里写图片描述
这里写图片描述
这里写图片描述

创建证书

这里写图片描述

5、Android APP 升级流程

这里写图片描述

签名冲突:

如果两个应用程序, 包名相同, 但是签名不同, 就无法覆盖安装

正式签名:

  • 有效期比较长,一般大于25年
  • 需要设置密码
  • 正式发布应用时,必须用正式签名来打包

测试签名(debug.keystore)

  • 有效期是1年,很短
  • 有默认的别名,密码,alias=android,密码是androiddebugkey
  • 在Android Studio中直接运行项目是,系统默认采用此签名文件

如果正式签名丢失了怎么办?

  • 修改包名,发布,会发现有两个手机卫士,用户会比较纠结
  • 请用户先删掉原来的版本,再进行安装,用户会流失
  • 作为一名有经验的开发人员,请不要犯这种低级错误
Android安全加密:对称加密 Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名和数字证书 Android安全加密:Https编程 以上学习所有内容,对称加密、非对称加密、消息摘要、数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识。数字证书是密码学里的终极武器,是人类几 阅读详情

相关推荐

Android安全加密:Https编程

概述SSL(Secure Sockets Layer 安全套接层),为网景公司(Netscape)所研发,用以保障在Internet 上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit 之安全标准,美国则已推出128 bit 之更高安全标准,但限制出境。只要3.0 版本以上之I.E.或Netscape 浏览器即可支

JackChan 6355

android 应用的证书签名跟系统签名

作为软件行业的从业者都知道,一款软件的开发过程中肯定会诞生两种版本,即debug版本和release版本,debug版本包含有调试信息,一般来说都要比release版本大,android应用当然也不例外 1.证书签名 并不是所有的apk文件都能成功安装到安卓设备上,android系统要求只有签名后的apk文件才可以安装,因此我们还要对生成的apk文件进行签名才行 在android studio中直接运行项目生成的都是测试版debug安装文...

她的吻让他 7632

MTK平台Android 安全中secure boot机制

一、相关名词解释 1.公钥:通俗来说,公钥就是公开的密钥,是私钥拥有者公开的,公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据. 2.私钥:私有的钥匙,不会公开,私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换. 3.数字签名:简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换.本文中就是将发送的数据采用hash函数得到hash值,再用私钥对hash值加密得到数字签名

qq_43805880的博客 1万+

物联网APP:使用android studio实现阿里云物联网平台数字签名(Signature)(附源代码)

摘要:本文讲解如何在安卓移动端实现阿里云物联网平台数字签名,使用的是android studio编写apk的方式进行,win7 x64系统下实现,文中提供了如何配置android studio的国内镜像,文末提供源代码链接。作为敲开云端控制大门的钥匙,本文非常重要,建议收藏。

ieeee.blog.youkuaiyun.com 7588

Android安全加密:消息摘要Message Digest

1. 常见算法MD5、SHA、CRC 等2. 使用场景 对用户密码进行md5 加密后保存到数据库里 软件下载站使用消息摘要计算文件指纹,防止被篡改 数字签名(后面知识点) 百度云,360网盘等云盘的妙传功能用的就是sha1值 Eclipse和Android Studio开发工具根据sha1值来判断v4,v7包是否冲突 据说银行的密码使用的就是MD5加密(因为MD5具有不可逆性) 例如软件下载站数据指

JackChan 6195

Ubuntu20.04 高效安装企业微信的完整指南

本文提供了在Ubuntu20.04系统上高效安装企业微信的完整指南,详细介绍了通过Deepin-wine环境运行Windows版企业微信的步骤和优化技巧。内容包括系统环境检查、依赖安装、企业微信包的获取与安装、首次运行配置及常见问题解决方案,帮助开发者在Ubuntu系统中流畅使用企业微信进行办公通讯。

weixin_42568801的博客 352

Android应用数字签名详解

目录目录 概述 数字签名证书生成方法 命令行工具keytooljarsinger Android Studio  小结 查看应用签名信息 查看自签名证书的信息 查看第三方应用或Android系统应用签名证书信息概述Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。Android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,

小一的专栏 2万+

基于UWB技术的自动跟随避障系统设计研究

基于UWB技术的自动跟随避障系统设计研究 摘要:目前我国针对自动跟随避障系统方面的研究较少,同时国内自动跟随避障系统仍然处在未成熟阶段,多数仍停留在应用蓝牙控制或摄像头捕捉这类跟随方式,但这类方式在实际应用过程中往往会出现易受干扰,精度差,易受环境干扰等问题,这不仅会降低自动跟随避障系统的性能,同时也会对用户造成诸多困扰。因此,就需要结合目前较为有效的UWB技术,对自动跟随避障系统进行设计。基于此,本文首先将会针对UWB技术展开概述,而后对基于UWB技术的自动跟随避障系统组成展开分析,进而对基于UWB技术的

qq_43543515的博客 7992

使用Android Keystore进行加解密

https://www.jianshu.com/p/06775ddf435f 国内使用Android Keystore加解密的应该很少吧,搜出来也基本都是Android打包时的Keystore,其实谷歌在很早之前就已经为Android提供了类似IOS的KeyChain功能,私钥存储在trustzone系统中,这个trustzone系统独立于Android系统,能做到私钥安全。 具体怎么安全,我们...

云守护的专栏 3263

Zynq7000双核裸机开发实战:如何安全实现共享内存与乒乓RAM设计

本文深入探讨了Zynq7000双核裸机开发中的共享内存与乒乓RAM设计,重点解析了核间通信的Cache一致性处理机制和硬件级实现方案。通过实战代码示例和性能优化技巧,帮助开发者解决双核运行中的访问冲突问题,提升嵌入式系统开发效率。

weixin_29191669的博客 375

Oracle DG库手动注册归档日志的两种方法

有的时候由于网络或各种原因,Oracle DG库服务器上可能缺少部分归档日志文件,导致DG库的MRP进程一直处于状态。此时我们可以手动从主库或其他DG拷贝归档日志到当前DG服务器,并对日志文件进行手动注册。

Sebastien23的博客 729

Android安全加密

转:        1) Android安全加密:数字签名和数字证书       2) Android安全加密:对称加密       3) Android安全加密:非对称加密 Android安全加密专题文章索引 Android安全加密:对称加密Android安全加密:非对称加密Android安全加密:消息摘要Message DigestAndroid安全加密:

wxx614817的专栏 1735

深入理解 DDR5 Bank Group 与并行调度机制

Bank Group架构和并行调度机制,是DDR5性能跃升的核心秘密!理解它们才能写出高效调度程序,设计出性能强劲又稳定的DDR5系统。🎯记住:Bank Group不是简单的分组,而是高速并行的“魔法钥匙”,巧用它,你的DDR5设计将爆发惊人性能!

weixin_43199439的博客 313

Android 数字证书、公钥私钥、摘要

一、签名证书 签名文件和证书是成对出现的,二者不可分离。 这两个文件名字是一样的,只是后缀名不一样。 1、数字签名 是对 非对称加密技术 和 数字摘要技术 的具体应用。 1)消息的发送者,先要【生成一对公私钥对,将公钥给消息的接收者】。 2)消息的发送者给消息接收者发消息,在发送的信息中, 除了要包含原始的消息外,还要加上另外一段消息。 这段消息通过如下两步生成: i.对要...

笨鸟的专栏 1901

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 348

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 931

android安全学习之1—什么是数字签名、数字证书

概对加解密机制进行了学习,以下是自己对一些概念的理解。 加密: 加密就是为了让别人看不懂,加密前的东东称为明文,加密后的为密文。例如我把写给susan的信进行了加密,明文是:12,经过加密后变成了:56,这就是加密。加密是结合加密算法和密钥完成的。 密钥: 就是密码嘛,微信密码啥的,一样的道理。 加密算法: 就是如何去加密,例如上面将12加密变成56,我的加密算

guilanl的专栏 1996

【数据同化第二期】数据同化中三大理论基础之一(最小方差估计)

【数据同化第二期】深入理解数据同化及经典案例(最小方差估计)

WW、forever的博客 1596

加密相关:对称、非对称、秘钥交换

对称加密 非对称加密 身份认证 SSL/TLS 中间人攻击(MITM)

王大炮是也 4879

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

邮件安全篇:邮件端到端加密S/MIME

本文主要介绍电子邮件端到端加密S/MIME的工作原理及客户端支持现状。

MailABC致力于科普电子邮件知识。如需交流,可以关注mailabc微信公众号或邮件feedback@mailabc.cn 4084

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

安卓加密/签名那些事情面试,一篇全部搞定

哈希算法:不可逆,上面的对称加密和非对称加密都有加密和解密是可逆,常见的加密算法MD5、SHA、SHA-1、SHA-256。常应用于信息摘要和数字签名等领域。对称加密:单钥密码体系,常见的加密算法DES、AES。非对称加密:公钥和私钥,常见的加密算法RSA、DSA。

qq_34178710的博客 856

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android--数字签名和数字证书

一、数字签名 1. 概述 数字签名是非对称加密与数字摘要的组合应用 2. 应用场景 校验用户身份(使用私钥签名,公钥校验,只要用公钥能校验通过,则该信息一定是私钥持有者发布的)校验数据的完整性(用解密后的消息摘要跟原文的消息摘要进行对比) 3. 签名过程 “发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密

超宇的博客 1781
上一篇: 手写路由框架,了解ARouter框架核心原理
下一篇: 浅谈android hook技术
Zephyr Cai
博客等级 码龄18年 39粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值