Android 六种核心安全机制 返回首页

发表于 2016-05-14

本文为极客学院 『x 跨国公』 讲师的教学视频观后总结,以便交流分享!

Android 安全概述

在典型场景中,安全主要用于解决 4 类需求:

这些需求都是很容易理解的。网络是公开的,现实生活中你可以约到荒山野岭来说出你的隐私的信息,但网络无法做到物理上的隔绝。Network is public!这就需要对你的信息进行加密了。

安全领域的潜规则:一个好的密码术是算法公开 (经历安全的检验,专家的论证,及黑客若干年的尝试仍未破解) 而密钥保密。

对称加密

首先来看看这些名词的定义

对称加密

置换加密、转置加密、乘积加密

1. 置换变换

顺序不改变,每一个字母 (字符/数据) 用其他字母 (字符/数据) 去替换:

置换变换

2. 转置变换

原始信息不变,顺序变换。类似于线性代数里矩阵的转置,将 m 行 n 列转换成 n 行 m 列,但行列顺序由 key 决定。

转置变换

3. 乘积变换

例如,将上面信息先进行置换变换再进行转置变换。

以下可以通俗的认为就是置换加密和转置加密迭代的一个应用。

3.1. DES (Data Encryption Standard:数据加密标准)

但这并不是一个一个字符的变换,而是一个一个块 (block),64bit (8 个byte) 为一个基本加密单元,即:块长度为 64 位,19 道加密工序。

它是一种对称密钥加密块密码算法,但 DES 现已经不是一种安全的加密方法,主要是因为它使用的 56 位密钥过短。1999 年 1 月,distributed.net 与电子前哨基金会合作,在 22 小时 15 分钟内即公开破解了一个 DES 密钥。在 2001 年,DES 作为一个标准已经被高级加密标准 (AES) 所替换。另外,DES 已经不再作为国家标准科技协会 (前国家标准局) 的一个标准。

这里密钥表面上是 64 位,然而只有其中的 56 位被实际用于算法,其余 8 位可以被用于奇偶校验,并在算法中被丢弃,因此,DES 的有效密钥长度为 56 位,通常称 DES 的密钥长度为 56 位。

关于 DES 更多详细信息,参见 Wiki 百科 - DES

3.2. AES (Advanced Encryption Standard:高级加密标准):

在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST) 于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。2006 年,高级加密标准已然成为对称密钥加密中最流行的算法之一并沿用至今。

严格地说,AES 和 Rijndael 加密法并不完全一样 (虽然在实际应用中两者可以互换),因为 Rijndael 加密法可以支持更大范围的区块和密钥长度:AES 的区块长度固定为 128 比特,密钥长度则可以是 128,192 或 256 比特;而 Rijndael 使用的密钥和区块长度可以是 32 位的整数倍,以 128 位为下限,256 比特为上限。加密过程中使用的密钥是由 Rijndael 密钥生成方案产生。

关于 AES 更多详细信息,参见 Wiki 百科 - AES

这里引出一个问题:对称加密的密钥用什么方式交换呢,明文?肯定是容易被截获的。再用对称加密?那加密密钥的密钥又用什么方式交换呢?这就陷入了死循环,别急,接下来我们就来说说非对称加密。

非对称加密

非对称加密

这里加密密钥为公钥 (public key),解密密钥为私钥 (private key)。这对密钥由同一个人产生。将公钥公开,私钥自己保管。

公钥算法的理论基石:(数学是科学之基) 建立在分解大数的困难度;建立在以大素数为模来计算离散对数的困难度。太过高深,这里不讨论,我也讨论不来。

RSA 加密算法 (一种非对称加密算法)

RSA 是 1977 年由罗纳德·李维斯特 (Ron Rivest)、阿迪·萨莫尔 (Adi Shamir) 和伦纳德·阿德曼 (Leonard Adleman) 一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式解破 (公钥/私钥长度至少 1024bit)。到 2016 年为止,世界上还没有任何可靠的攻击 RSA 算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能被解破的。

具体实现细节可参见 Wiki 百科:RSA 加密算法

密钥交换

对称加密优缺点:

:+1: 优点:高效;
:-1: 缺点:密钥交换问题,不如 RSA 的加密安全程度高,但当选择 256bit 的 AES,仍能胜任绝大多数的安全领域。

非对称加密优缺点:

:+1: 优点:安全性足够高,没有密钥交换问题;
:-1: 缺点:效率低,对于大数据加密很慢。

融合优缺点:

实际的保密会话应用场景:基于高效的对称加密算法对会话进行加密,会话密钥实时产生且周期性变化,基于其他足够安全的方式进行会话密钥的传输和交换。

即:会话用 AES 256bit 的 shared key 进行加密,会话密钥产生实时周期变化并由 RSA 非对称加密进行交换。

Diffie - Hellman 密钥交换协议

基于以大素数为模计算离散对数困难度,双方各自选定 key,然后以一定算法变换后传输给对方,双方利用对方交换来的数据和自己选定的 key 做变换,获得一个一致的结果,作为会话密钥。

Diffie - Hellman密钥交换协议

总结:基于对称加密的高效性,会话多用对称加密进行交换,但其 shared key 存在交换问题,此处用非对称加密或其他交换协议进行交换。

消息摘要

HASH与散列函数的定义与特点:

  1. HASH (散列) 函数 (算法) 的定义:变长的输入变换成定长的输出。
  2. 常见 HASH 算法:MD5 (128bit)、SHA1 (160bit)
  3. HASH 的特点:
    • 易变形:即便原始信息发生 1bit 的变化,HASH 的输出将会有不可预知的巨大变化。
    • 不可逆:通过 HASH 结果构造出满足的输入信息是不可能的或者极其困难。

消息摘要和数字指纹:

HASH 与指纹的特点类似,数字指纹由此而来。消息摘要的名字很多:HASH、哈希、散列、MD、消息摘要、数字指纹。

HASH的应用场景:

1.防篡改:基于易变形特性,以保证完整性。

eg:下载文件时的 MD5 值 (判断是否被篡改或缺失,像迅雷这些下载工具,在下载完成后都会自动的与提供的 MD5 值进行比对判断)、消息传送时尾部额外传 MD。

2.防损坏:与篡改的性质其实是一样的,但这里指非恶意的篡改,所以拿出来讨论。

eg:CRC (32位) 校验;MD 检验消息恶劣环境传输的完整性和未受损坏;应用程序中对于核心文件/数据库读写的鲁棒性保护,防止掉电和 Crash (比如加载到一半时突然掉电或 crash,这是文件是损坏不完整的,所以,每次加载完成后都会对 HASH 进行一次更新,以便进行比对,发现不完整就可进行初始化重新载入)。

3.认证:基于不可逆性,可以认证对端。

eg:HTTP 的 Digest 认证;ppp 的 CHAP 认证;手机登录密码和隐藏 MMI 的设计 (利用 HASH 避免密码认证过程中的明文传输)。

HASH 应用时遇到的问题:

  1. 在消息尾附带消息摘要 (可以篡改内容的同时篡改摘要)
  2. 密码的 HASH 认证,尽管猜不到你的密码,但可以截获你的 HASH,利用这个 HASH 不断的进行重放攻击。

由此引入了 HMAC:Hash - based Message Authentication Code (哈希运算消息认证码) HMAC 利用 key 对原始消息变换后再进行 HASH。关于 HMAC 算法,可参见:Wiki 百科 - HMAC ;重放攻击,可参见 百度百科 - 重放攻击

电子签名

解决的问题:签名的内容的完整性保护、签名人的不可否认性。

公钥密码术的两面性:

  1. 在非对称加密中我们知道了利用发布出去的公钥进行信息交流,用自己的私钥进行解密,这是公钥密码术的一面。典型的用于加密。

  2. 但是,将其倒置使用,用私钥进行加密 (签名人身份的唯一性),发布出去后用公钥进行解密,此典型的应用于电子签名场景,但并非所有公钥密码术都支持,RSA 支持。即:RSA 和公钥密码术成就了电子签名。

但是,你想象一下,如果你有几个 G 的小电影要发送给你的基友,你需要对这几个 G 的小电影进行签名,而 RSA 是十分的低效 (前面讲到过),所以导致不适合于直接对原始信息进行签名。一般的,会先利用 HASH 先完成消息摘要的完整性鉴别的作用,而后对消息摘要进行基于公钥密码术的签名,签名一般附着于原始消息尾部或头部一起发送。这里总结一下,你接收到消息后,用他的公钥对签名进行解密,如果发现解不开,说明不是你的基友发的,如果解开后,取出 MD5 值,用原始消息进行 HASH 与其 MD5 值进行比对,然后发现了不同,完蛋,被篡改了。这就 perfect 了吧!

证书与 PKI

1.证书的作用:(现代信任基石)

公钥的存储和交换:公钥作为一个字段存储于数字证书中,证书的交换和传输即可传输/交换公钥。

利用签名来保护数字证书本身。

证书

数字时代的信任关系:一个受信任者的证书列表。

信任列表

2.证书链和 PKI:

数字时代的信任链:证书链

证书链

未受信任的发布者由证书链回溯,逐级验证,找到在受信任列表的发布者,即可信任。

证书签名的不同点:根证书自签名,非根证书父签名。

证书的限制:约束、用途、有效期。

约束 用途 有效期

PKI 的概念:(Public Key Infrastructure:公钥基础设施) 定义为支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施。更多信息参见 百度百科 - PKI

3.基于证书的认证:

基于可信任证书的认证方式被广泛应用在现代安全领域,比如:WiFi、Https。在 Https 中,典型的 client 对 server 的认证和鉴别基于可信任列表。


如果你觉得本文对你有帮助,不妨请我喝瓶葡萄味芬达


显示评论