Android六种核心安全机制-加密、密钥、签名与证书

对于移动开发,程序猿很容易会忘记一些安全问题,如一个MD5的加密,大部分人都知道怎么去使用,但是其中的一些加密原理,加密方式却只有少部分会去了解,所以会忽略到很多问题(加密的选择,加密的效率),不同的环境对加密也要有不同的要求.最近看了极客学院的课程.课程内容大多是理论,但是讲得很全面,大致涉及以下方面的安全性.

软件权限,安装与卸载安全性,数据安全性,通讯安全性,接口安全性

安全机制之对称加密(高效不安全)

概念:

1.秘钥: 氛围加密秘钥和解密秘钥

2.明文: 没有加密的信息

3.密文: 加密了的信息

4.加密: 明文->密文 的过程

5.解密: 密文->明文 过程

对称加密概念:加密端和解密的使用的是同一个key(秘钥)

三种对称加密方式:

1. 置换加密:将要加密的内容,通过一段自定义的数据,进行对应的替换掉,如:abcdefg 对应的秘钥是 dsgejfog ;那么baba 加密后就是 sdsd

2. 转置加密:对原始信息的顺序进行一个打乱.

如:hel loa ndr oid 对应的秘钥是 4312 ;那么加密后就是

oid ndr hel loa

3. 乘积加密:把置换加密和转置加密混合在一起.

对称加密优缺点:

  • 优点:

    1.高效 相对于非对称加密来说,对称加密效率快.

  • 缺点:

    1.密钥交换的问题

    2.不如RSA的加密安全程度高(RSA至少1024bit),但是选择256bit的AES,仍然胜任绝大多数的安全领域.

对于对称加密可以产生下面问题:

  • 谁产生: A和B都可以产生秘钥.如果是A产生,那么要把秘钥给另一方B,怎么给呢,秘钥传输的过程中如何进行保密.
  • 谁保管: 无法做到保密保管.

DES与AES区别.

DES:一个64bit作为一个加密的单元,加密有19道工序(转置+置换)

AES:三重DES,加密很灵活(64,128,256bit可以根据不同的应用场景来选择)

应用场景:

1.公司发email,两个人协商好一个key,把要发送的内容通过des或者aes加密后发送.

2.电脑存储的数据,如一些加密软件.

注意: 如何保存这个share key,在交互的时候这个key如何进行交换.


安全机制之非对称加密(安全不高效)

q:已经有对称加密了,那么为什么还会有非对称加密呢?

a:对称加密众所周知,双方需要共同持有同一个key才可以对数据进行加密和解密.那么我们在对数据进行加密时,如果才能过安全的将这个key发送给对方呢?这个问题就引出了下面的非对称加密.

非对称加密模型

跟对称加密的区别就是,两个秘钥的不同,对称加密的两个秘钥是相同的.

公钥和私钥

概念:

1.公钥: 用于加密的秘钥

2.私钥: 用于解密的秘钥

非对称加密优缺点:

  • 优点:

    1.安全性很高

    2.没有密钥交换的问题

  • 缺点:

    1.效率低,对于大数据加密很慢(安全性太高,加密算法太复杂,所以导致效率低.对于目前的大数据时代,这样的效率是不能容忍的)

对于非对称加密可以产生下面问题:

  • 谁产生:公钥私钥,都是有数据源那方产生的.
  • 谁保管:其实没有保管的概念.因为加密的key是公钥属于公开的;而私钥是生产方私有的,也就是不公开的.
  • 公钥怎么公开?通过证书的方式.

RSA算法

RSA(几个人的名字简称)是一种很有名的非对称算法(公钥里面的),是建立在分解大数(如大质数)的困难度. 相对公钥/私钥的长度大小来看至少1024bit,而之前的对称加密AES 最大也只有256bit,所以RSA算法的长度大很多.


安全机制之密钥交换(==高效又安全做法==)

上面提到了对称加密与非对称加密的优缺点,但是对于目前大数据时代来说,对数据的安全性要求很高,而且效率也要有,那么如何结合两种加密的优缺点来进行加密会比较好呢?

案例1:

A 通过(AES,256Bit方式)传给 -> B

  • 问题:

    因为AES是属于对称加密,所以无论A或B创建的秘钥,都需要讲秘钥传递到对方,这样才可以让对方解密传递过来的数据,那么在A和B他们之间如何保证key的安全传递?

  • 解决方法:

    1.A使用AES产生秘钥.

    2.B使用RSA直接将公钥传给A.

    3.A就可以使用对方的公钥对秘钥加密,并传递加密后的秘钥给对方,这时对方使用私钥解密并获取到A的秘钥.

    4.最终双方就知道了这个AES的秘钥,那么就可以基于共享的会话秘钥进行对称加密的保密通信了.


安全机制之消息摘要

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

概念:

1.HASH翻译中文有两个意思,散列或者哈希(也有称MD(message digest),消息摘要,数字指纹).

2.HASH(散列)函数(算法)的定义是:变长的输入变换成定长的输出.

3.常见的HASH算法:MD5(定长是128bit),SHA1(定长是160bit)

4.HASH的特点:

4.1 易变性:即便原始信息发生1bit的变化,HASH的输出将会有不可预知的巨大变化(就算是微小的改动,也有很大的变化).

4.2 不可逆:通过HASH结果构造出满足的输入信息是不可能的或者十分困难的(只要输入是不一致的,那么他们的输出就即便是定长,输出的值,也肯定是不一样的).

消息摘要和数字指纹

举例:

人的指纹特点

1.就算是双胞胎,他们的指纹也是不同.(易变性)

2.通过指纹,让你猜出他是谁,是猜不出的.(不可逆)

总结.因为人的指纹特点跟HASH的特点很相似,所以我们也把HASH称为数字指纹.

HASH的应用场景: 防篡改

场景:人为的恶意篡改.

防篡改-> 根据特点:易变性(根据易变性 保证完整性)

案例1:

1.文件下载时会有个MD5值.

2.消息传送时尾部会额外传MD(hash值).

主要的作用:下载的文件可以根据这个MD值跟网上的对比下,如果值发生了改变,那么就说明文件被篡改了.这也是根据HASH的易变性特点来证明文件的完整性.

案例2:

迅雷在下载的时候会自动对文件进行校验,如果有病毒,会报警.

HASH的应用场景: 防损坏

场景:非人为的篡改,而是由于网络,由于环境的不稳定导致的损坏.

防损坏-> 根据特点:易变性(根据易变性 保证完整性)

案例:

1.CRC校验:通讯领域常用的数据校验方式.

作用: 如整个网络的不稳定,导致的传输过程中CRC的值一样,这样就可以算出数据可能会丢包或者损坏.

缺点: 局限于损坏bit比较小的数据,如果数据比较大,CRC的校验会不准确.

2.写代码时突然的断电,导致的文件Crash,在下次对核心文件/数据读写时,保证他的完整性.

HASH的应用场景:认证和鉴别

场景:对密码的 认证.

认证和鉴别-> 根据特点:不可逆性(根据不可逆性 保证认证对端)

案例:

1.HTTP的Basic和 Digest认证

2.PPP的PAP和CHAP认证

2.手机登录密码和隐藏MMI的设计

手机登了密码

有些不规范的做法会直接对一些隐藏的串,进行直接的检查,而这样会导致如果一些人用反编译的做法去获取里面的代码的话,是可以被查到的,因为这些串就是一些常量字符串.

所以标准做法应该是,app这边检查的话,应该是检查这些串的HASH值,而不是直接检查这些串.

HMAC

概念

(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

HASH可以防篡改,防损坏,认证和鉴别,在这些过程中,我们遇到了什么问题?

1.直接尾部附带消息摘要的问题(篡改内容的同时,篡改摘要)

2.截获HASH,直接对密码做HASH传输的认证问题(重放攻击)

如何使用HMAC来解决这些问题?

HMAC就是使用KEY对原始消息变换后,再进行HASH.

案例1:

在HAMC跟标准的HASH的区别:

1.标准的HASH直接对原始信息进行HASH变换.

2.HAMC的话不直接对原始信息进行变换,在HAMC里会有个KEY,拿到这个KEY对原始信息进行第一次变换,变换完后再使用MD5或者SHA1进行HASH.

这样做的好处是:

如果别人想篡改原始信息的话,他们可以篡改内容,但是后面那个基于HAMC的算出来的消息摘要,他们是不知道的,因为不知道那个KEY.

案例2:

比如密码是ABCD,service可以发一个随机码过来,client可以把随机码和ABCD密码进行拼接,并进行HASH后传给service.这时service肯定知道自己的随机码,也同样进行HASH.这样就可以解决防篡改问题.

为什么可以解决防篡改问题?

service传过来的随机码是有有效期的.

安全机制之电子签名

签名要解决什么问题

  • 签什么?

    签的内容的完整性保护

  • 谁在签?

    签名人的不可否认性(签完名后想要否认不是他签的,那是不可能的)

公钥密码术的两面性

  • 正常做法

    Dpr(Epu(P))=P

    • 应用于保密通信场景
  • 反过来

    Dpu(Epr(P))=P

    • 应用于电子签名场景
    • 并非所有公钥密码术都支持,RSA支持

总结:

用公钥加密的就是典型通信场景.

用私钥加密的就是典型的签名场景.

但是一般也没有人会通过私钥加密这样的签名方式,因为RSA的低效率特效,导致了即便签名也不适合直接对原始信息进行签名

HASH+公钥密码术:成就电子签名

  • 利用HASH先完成消息摘要和完整性鉴别的作用
  • 而后对简单的消息摘要进行基于公钥密码术的签名
  • 签名一般附这于原始消息尾部或者头部一起发送

安全机制之证书与PKI

  • 证书的作用:公钥的存储和交换

    • 公钥作为一个字段存储于数字证书
    • 证书的交换和传输即可传输/交换公钥(见IE浏览器->设置->证书->RSA)
  • 证书的总用:现代信任基石

    • 人的信任关系:人的信任列表(父母,亲人,朋友)
    • 数字时代的信任关系:一个受信任者的证书列表(demo)
  • 证书链和PKI

    • 人的信任链:孔子->孔子的徒弟->徒弟的徒弟
    • 数字时代的信任链:证书链(浏览器->证书路径)
    • 证书签名的不通电:根证书自签名,非根证书父签名
    • 证书的限制
      1. 约束
      2. 用途
      3. 有效期
    • PKI概念

      公钥基础体系
  • 基于证书的认证

    • 基于可信任证书的认证方式被广泛的应用在现代安全领域,比如WIFI,HTTPS.
    • 在HTTPS中,典型的Client对Server的认证和鉴别基于可信任列表.

Android核心安全机制(一)的更多相关文章

  1. Qt on Android 核心编程

    Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...

  2. Android多线程通信机制

    掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么. 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序 ...

  3. Android之IPC机制

    Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...

  4. Android Handler处理机制 ( 一 )(图+源码分析)——Handler,Message,Looper,MessageQueue

    android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习 google大牛们的设计思想. ...

  5. 转 Android的消息处理机制(图+源码分析)——Looper,Handler,Message

    作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设计思想.android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种 ...

  6. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message

    原文地址:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html#!comments 作为一个大三的预备程序员,我学习 ...

  7. [置顶] 深入理解android之IPC机制与Binder框架

    [android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...

  8. android的消息处理机制(图+源码分析)——Looper,Handler,Message

    android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种helper类,对于和我一样渴望水平得到进阶的人来说,都太值得一读了.这不,前几天为了了解android ...

  9. 《Android进阶》之第三篇 深入理解android的消息处理机制

    Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系 android的消息处理机制(图+源码分析)——Looper,Handler,Message an ...

随机推荐

  1. [HAOI2011]Problem c

    题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来 了以后尝试坐到ai,如果ai被占据了,就尝试ai+ ...

  2. 洛谷P1593 因子和

    题目描述 输入两个正整数a和b,求a^b的因子和.结果太大,只要输出它对9901的余数. 输入输出格式 输入格式: 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式: a^b的因 ...

  3. 洛谷P1856 [USACO5.5]矩形周长Picture

    题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...

  4. hdu5586 BestCoder Round #64 (div.2)

    问题描述 给n个数{A}_{1},{A}_{2}....{A}_{n}A​1​​,A​2​​....A​n​​,你可以选择一个区间(也可以不选),区间里每个数x变成f(x),其中f(x)=(1890x ...

  5. Linux 脚本为什么会有#!

    我们在Linux系统终端编辑脚本时第一行通常这么写: #!/usr/bin/env python3 为什么要写这一行,起什么作用? 我们先看看不写这一行会出现什么?那么就会报下面的错误. #!/usr ...

  6. Windows 下 Ionic 开发环境搭建

    Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...

  7. diango-团队介绍

    1.使用django-admin startproject show创建项目,并使用python manage.py startapp team_show创建应用 2.进行相关的配置 3.代码的实现

  8. Exchange Server 2010升级到Exchange Server 2016

    Hello各位小伙伴们,失踪人口回归啦~~~这次和大家分享Exchange Server 2010升级到Exchange Server 2016的方法.正式开始前先啰嗦几句,为什么我要写这篇文章呢?一 ...

  9. 批量录入快递地址-快宝地址服务(PHP代码示例)

    快递地址写错了怎么办?快递地址写的不详细怎么办?怎么皮批量录入收件人地址?微商怎么批量录入发件人地址?快宝地址清洗,有效的解决了寄送快递时,批量录入收件人信息.发件人信息时,纠正地址数据,不完整地址识 ...

  10. JSON 封装函数

    var eventUtil = { addHandler:function(element,type,handler) { //添加句柄 if(element.addEventListener) { ...