Android中的证书和签名

一、加密算法

对称加密:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES。

原理:加密和解密使用的是同一个密钥,加解密双方必须使用同一个密钥才能进行正常的沟通。

非对称加密:RSA、ECC(椭圆曲线加密算法)、Diffie-Hellman、El Gamal、DSA(数字签名用)

原理:需要两个密钥来进行加密和解密,公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥) ,公钥加密的信息只有私钥才能解开,私钥加密的信息只有公钥才能解开。

Hash 算法:MD2、MD4、MD5、HAVAL、SHA-1、SHA256、SHA512、RipeMD、WHIRLPOOL、SHA3、HMAC

消息摘要算法:将长度不固定的消息(Message)作为输入参数,运行特定的Hash函数,生成固定长度的输出,这个输出就是Hash,也称为这个消息的消息摘要(Message Digest)。

二、PKI

可以理解为第三方认证机构,负责的事:证明书、认证机关、证书库。

参考知乎对该机构的神解读

三、PKCS

PKCS(The Public-Key Cryptography Standards )是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。全称是公钥密码学标准,  目前共发布过 15 个标准,这些标准都是协议。总结一下 就是对加密算法,签名,证书协议的描述。RSA算法可以做加密、解密、签名、验证,还有RSA的密钥对存储。

四、真实场景

上面说的协议具体的实现就体现在OpenSSL, 以及JDK工具中的KeyTool JDK Java第三方库BouncyCastle等工具中。

OpenSSL:SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认。OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。

签名文件和证书文件是成对出现了,二者不可分离。

可靠通信前提:首先,要确定消息的来源身份正确;其次,要保证信息在传递的过程中不被第三方篡改,即使被篡改了,也可以发觉出来。

数字签名技术:

消息的发送者:生成一对公私钥对,将公钥给消息的接收者。

1)对要发送的原始消息提取消息摘要;

2)对提取的信息摘要用自己的私钥加密。

通过这两步得出的消息,就是所谓的原始信息的数字签名。

消息的接收者:收到两个部分,一是原始的消息内容,二是附加的那段数字签名

1)对原始消息部分提取消息摘要,注意这里使用的消息摘要算法要和发送方使用的一致;

2)对附加上的那段数字签名,使用预先得到的公钥解密;

3)比较前两步所得到的两段消息是否一致。

上面说的技术还有个问题,就是得安全正确的预先得到公钥。数字证书主要是用来解决公钥的安全发放问题。

内容:证书的发布机构、证书的有效期、消息发送方的公钥、证书所有者、数字签名所使用的算法、数字签名。

数字证书也用了数字签名技术。只不过要签名的内容是消息的发送者的公钥,以及一些其它信息,确保公钥安全送达。数字证书中签名者不是随随便便一个普通的机构,而是要有一定公信力的CA机构。这些有公信力机构的根证书已经在设备出厂前预先安装到了你的设备上了。

具体流程需要理解下面几个概念:

证书:顾名思义就是提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书, 就是可以认定是合法身份的。客户端不需要证书。 证书是用来验证服务端的。

签名:就用私钥对一段数据进行加密,得到的密文。这一段数据在证书的应用上就是对证书原文+原文Hash进行签名。谁签的名,就是用谁的私钥进行加密。就像身份证一样, 合法的身份证我们都依据是政府签的,才不是假证, 那就是浏览器会有政府的公钥,通过校验(解密)签名,如果能够解密,就可以确定这个就是政府的签名。就对了。

CA机构:权威证书颁发机构,浏览器存有CA的公钥,浏览器以此公钥来验证服务端证书的合法性。

证书的获取:生成证书申请文件.csr(涉及到PKCS#10定义的规范)后向CA机构申请。 或者自己直接通过生成私钥就可以一步到位生成自签名证书。 自签名证书就是用自己的私钥来签名证书。

那么SSL协议的具体过程就是:

1、客户端请求建立SSL连接,将协议版本,随机数,支持的一套加密规则,压缩方法发给服务器。

2、服务器收到客户端请求后,确定协议版本如果不一致则关闭通信。如果一致则生成随机数,确定的加密方法,返回证书给客户端。证书里面包含了网站地址,公钥,原文Hash签名以及证书的颁发机构等信息

3、获得网站证书之后浏览器先验证证书的合法性,再生成一个随机数,然后把对称密钥(三个随机数通过一个密钥导出器生成),编码改变通知,前面发送的所有内容的Hash值 。用服务器公钥加密以上内容,发送给服务器。那个Hash值是用来服务器校验这个阶段的数据完整性。

4、网站接收浏览器发来的数据之后 使用自己的私钥校验签名,并对原文进行Hash与解密出的Hash做比对检查完整性。然后发送编码改变通知,服务器握手结束通知(所有内容做Hash)。发送给客户端校验。

5、客户端校验,校验成功后,之后就用对称秘钥进行通信了。

总共的过程是C-S-C-S-C四次握手。

五、脱离权威机构CA的证书

CA起到一个权威中间人的角色,如果脱离了CA,那么证书还是证书,还能加密,保证数据完整性。但是无法应用在客户端去认定服务器身份合法。下面说一下脱离了权威机构的证书的应用:

自签名证书:

身份认证场景就变成,不再是某个官方权威说了算,而是假设第一次碰到这个证书,会认为,这个证书与之捆绑的实体之间是合法的并做记录。如果当这个实体下次捆绑了另一个证书,那么就是非法的。

Android中的如何对App进行身份认证和不被篡改:

Android系统在安装App时候会进行校验ApplicationId,ApplicationId不同会认定为不同应用。相同应用,第二次安装会校验证书是否和之前App的证书相同,如果相同则两个包很可能来自同一个身份。如果证书不同,也就是该包被另一个身份用自己的私钥重新签名过,就会拒绝安装。 然后通过公钥来解密签名,如果能解密,说明身份是OK的。否则拒绝安装。比对解密签名后的Hash与APK包内的cert.sf文件(该文件是APK内所有文件生成的Hash文件)是否一致,如果相同则认定为没有被篡改。

六、总结

1、在SSL协议下,这种场景是浏览器用于认定合法的服务器身份。在自签名证书下,需要用户选择是否信任该证书。

2、在Android App采用自签名证书的场景下,证书起到了假设第一次的证书合法,公钥合法,后续如果证书不一致或不能够完成签名校验,就是非法。

3、证书和非对称加密算法的关系:证书代表一个身份的主体,包含了非对称秘钥体系中的公钥,以及用私钥对证书签名。这种组织结构,把非对称加密算法从加密的功能,拓宽到了用于身份认证,信息完整性上。这体现在了证书的作用。本质还是利用了非对称加密算法的特性。

4、SSL协议和证书的关系:因为证书解决了客户端对服务器的身份认证(自签名证书除外),同时也解决了加密,和信息完整性,所以SSL协议基于证书来实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 前言 文中首先解释加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的...
    sunny冲哥阅读 2,984评论 0 2
  • 数字证书原理 - 无恙 - 博客园 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明...
    拉肚阅读 1,661评论 0 3
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    sunny冲哥阅读 1,376评论 0 3
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    已认证用户阅读 3,833评论 1 4
  • 原文地址:数字证书原理,公钥私钥加密原理 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例...
    淇滨杜隆坦阅读 4,157评论 4 46