zoukankan      html  css  js  c++  java
  • [iOS笔记] 网络通信安全与证书

    非对称加密算法 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用自己的私钥为公钥签名,用于验证自己的公钥

    根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表明对该根证书以下所签发的证书都表示信任

    证书请求过程

    1. 生成非对称加密的公钥和私钥
    2. 生成证书请求文件 (csr: CertificateSigningRequest),其中包含公钥和与用户信息
    3. 在 CA 网站上传CSR文件
    4. CA 使用其 private key 对 CSR 中的 public key 和身份信息进行加密签名生成数字证书(Digital Certificate)并保存
    5. 从 CA 网站下载证书并安装

    数字签名

    数位签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。

    将数据按约定的HASH算法计算得到一个固定位数的摘要并用私钥加密

    image

    证书和签名的应用

    image

    证书在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

    作用

    资料

    https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html

    https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40012582-CH1-SW1

    http://blog.csdn.net/holydancer/article/details/9219333

    image

  • 相关阅读:
    02梦断代码阅读笔记之二
    每日日报
    每日日报
    每日日报
    每日日报
    02梦断代码阅读笔记之一
    每日日报
    SQL语句分为哪几种?
    数据库三范式是什么?
    什么是数据库事务?
  • 原文地址:https://www.cnblogs.com/afluy/p/5754526.html
Copyright © 2011-2022 走看看