非对称加密算法 RSA
介绍
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。
算法原理:
https://zh.wikipedia.org/wiki/RSA加密演算法
流程
-
消息发送方A在本地构建密钥对,公钥和私钥;
-
消息发送方A将产生的公钥发送给消息接收方B;
-
B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;
-
反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。
DH密钥交换算法
介绍
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。
DH算法是一种密钥协商算法,只用于密钥的分配,不用于消息的加解密。
它提供了一种安全的交换密钥的方式,通过交换的密钥进行数据的加解密。
通信流程
-
首先A、B双方,在通信前构建专属于自己的密钥对,假设分别是公钥A,私钥A,公钥B,私钥B;
-
A将自己的公钥A暴露给B,B通过私钥B和公钥A经过一定的运算产生出本地的密钥B;
-
同样,B将自己的公钥B暴露给A,A通过私钥A和公钥B经过一定的运算产生出本地的密钥A;
-
最后,这个算法有意思的一点就是,密钥A和密钥B是一致的,这样A、B双方就拥有了一个属于双方的“秘密”口令;
资料
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html
HTTPS
HTTP的风险
- 窃听风险:第三方可以获知通信内容。
- 冒充风险:第三方可以冒充他人身份参与通信。
- 篡改风险:第三方可以修改通信内容。
SSL/TLS
介绍
安全套接字(Secure Socket Layer,SSL)
安全传输层协议 (Transport Layer Security Protocol, TLS)
介于应用层和TCP层之间
特性
- 保密: 所有信息都是加密传播,第三方无法窃听
- 鉴别: 配备身份证书,防止身份被冒充。
- 完整性: 具有校验机制,一旦被篡改,通信双方会立刻发现。
密码套件格式: SSL_DHE_RSA_WITH_DES_CBC_SHA
工作原理
协议
- 握手协议(Handshake protocol)
- 记录协议(Record protocol)
- 警报协议(Alert protocol)
解决的问题
-
如何保证公钥不被篡改?
将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
-
公钥加密计算量太大,如何减少耗用的时间?
"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
对称和非对称加密的应用:Secure Shell (SSH 安全壳协议)
介绍
专为远程登录会话和其他网络服务提供安全性的协议
一般我们现在用的是OpenSSH框架
OSI的7层:
7 应用层 HTTP FTP
6 表示层
5 会话层 SSH
4 传输层 TCP UDP
3 网络层 IP
2 数据链路层
1 物理层
主要协议
- 传输层协议(The Transport Layer Protocol)
- 用户认证协议(The User Authentication Protocol)
- 连接协议(The Connection Protocol)
SSH提供两种认证方式:
password认证:
客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;
服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。
publickey 认证:
采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。
客户端发送包含用户名、公共密钥和公共密钥算法的 publickey 认证请求给服务器端。
服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息
通信流程
-
首先服务端会通过非对称加密,产生一个公钥和私钥;
-
在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥可以被任意暴露;
-
客户端在获取公钥后,会先产生一个由256位随机数字组成的会话密钥,这里称为口令;
-
客户端通过公钥将这个口令加密,发送给服务器端;
-
服务器端通过私钥进行解密,获取到通讯口令;
-
之后,客户端和服务端的信息传递,都通过这个口令进行对称的加密。 //对称加密
资料
http://www.cnblogs.com/zmlctt/p/3946860.html
证书 certificate
介绍
证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。
证书的内容包括:
- 电子签证机关的信息
- 公钥用户信息
- 公钥
- 权威机构的签字
- 有效期
- ...
证书中心 (certificate authority,简称CA)
受信任的根证书颁发机构, 如: 微软, Apple
证书中心用自己的私钥,对颁发的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)
证书链
Web 浏览器已预先配置了一组浏览器自动信任的根 CA 证书。
来自其他证书授权机构的所有证书都必须附带证书链,以检验这些证书的有效性。
证书链是由一系列 CA 证书发出的证书序列,最终以根 CA 证书结束。
根证书
CA用自己的私钥为公钥签名,用于验证自己的公钥
根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表明对该根证书以下所签发的证书都表示信任
证书请求过程
- 生成非对称加密的公钥和私钥
- 生成证书请求文件 (csr: CertificateSigningRequest),其中包含公钥和与用户信息
- 在 CA 网站上传CSR文件
- CA 使用其 private key 对 CSR 中的 public key 和身份信息进行加密签名生成数字证书(Digital Certificate)并保存
- 从 CA 网站下载证书并安装
数字签名
数位签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。
将数据按约定的HASH算法计算得到一个固定位数的摘要并用私钥加密
证书和签名的应用
证书在iOS开发中的应用
-
development
-
iOS App development
-
Apple Push Notification service SSL(Sandbox)
-
-
Production
-
App Store and Ad Hoc
-
Apple Push Notification service SSL(Sandbox & Production)
-
Pass Type ID Certificate
-
Provisioning Profiles
包含:
- APP ID
- 证书
- Device UUID