zoukankan      html  css  js  c++  java
  • 常见互联网安全协议ssh,ssl

    ------部分内容系引用

    1.介绍

      SSH:SecurityShell 缩写,在互联网层次中与http,ftp类似,属于应用层协议。目的是为shell提供安全的传输和使用环境。具体来说,通过它可以安全的远程执行另一台unix系统之上的机器的命令,在没有ssh之前通常使用telnet来实现相同目的,没有保障。

      SSL安全套接层Secure Sockets LayerSSL),一种安全协议,是网景公司(Netscape)在推出Web浏览器首版的同时提出的,目的是为网络通信提供安全及数据完整性。SSL在传输层对网络连接进行加密。此协议和其继任者是TLS

      这两者的目的类似,都是安全的在网络环境中交换数据,实现技术也类似。但由于他们在协议栈中的地位不同,所以不能混为一谈。常见的https就是典型的假设在ssl协议基础之上

    2.背景知识

      加密技术:了解他们的原理需要一点点加密的概念,这里把需要的概念做一下简单阐述:
    加密一般分为三类,对称加密,非对称加密及单向散列函数。

      对称加密使用统一的秘钥将原文计算得到密文,可以通过该秘钥解密得到原文。最原始的密码学诞生于对称加密,如凯撒加密(Caesar cipher) 。密码学发展至今,为了提高破解难度,数学家发明了许多更牛逼的算法:当前主流的对称加密算法包括DES、AES。(来自wiki)为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。

      非对称加密(又叫公钥密码学)1976年狄菲(Whitfield Diffie)与赫尔曼(Martin Hellman)两位学者以单向函数单向暗门函数为基础创建。该算法使用一对秘钥:公钥和私钥,以公钥加密原文得到密文可以由私钥解密;反之亦可以通过公钥来解密。该技术是构成网络加密的重点。常见的非对称加密有Diffie-Hellman、RSA、椭圆曲线加密算法

      加密过程如下:

      A发给B:以B的公钥加密后发给B,B以己方私钥解开的到原文。

      B发给A:以A的公钥加密后发给A,A以己方私钥解开的到原文。

      该过程避免了对称加密的绕不过去的问题:如何将秘钥安全的交给对方

      单向散列函数与前两者略有不同,首先是单向的,密文无法被解密为原文。同时,密文也具有“长度很小”的特点,因此也被称为签名、数字签名。它的作用于不是用于得到原文,而是为了验证原文的准确性和完整性。安全领域中经典的数字签名技术主要就是应用了单向散列函数。常见的单向散列函数包括MD5(MD5由MD4MD3MD2改进而来,一度被广泛应用于计算机安全领域。但由于近年来MD5的弱点不断被发现,以及当今计算机运算能力的不断提升,现在已经可能人为构造出两个具有相同MD5校验值的信息,使本算法不再适合现今的安全领域。目前,MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通数据的错误检查领域。例如在一些BitTorrent下载中,软件将通过计算MD5检验下载到的文件片段的完整性。)、SHA(Secure Hash Algorithm)。目前对SHA的破解也属于数学界的新课题,我国科学家王小云等发表能在263个计算复杂度内找到碰撞的攻击法,对该课题的研究处于世界前列。

      中间人问题是安全领域中的经典问题,也是我们探讨的加密技术要解决的主要问题。所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。这时,一个良好的加密算法+加密机制能发挥很大的作用。

    3.正题

    3.1 SSH

      SSH协议工作在TCP协议之上。意味着是一个长连接,并且每个传输请求都以TCP连接的形式来建立、发送和关闭。

      SSH协议框架中最主要的部分是三个协议:

       * 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;

      * 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;

      * 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

      与此相对应的,SSH协议的工作过程也分为连接、用户认证和传输三个阶段,或是更细分的五个阶段:

    • 版本号协商阶段
    • 密钥和算法协商阶段
    • 认证阶段,SSH客户端向服务器端发起认证请求, 服务器端对客户端进行认证
    • 会话请求阶段, 认证通过后,客户端向服务器端发送会话请求
    • 交互会话阶段 ,会话请求通过后,服务器端和客户端进行信息的交互

      第一阶段 版本号协商。SSH目前包括 SSH1和SSH2两个版本, 双方通过版本协商确定使用的版本。

      第二阶段 密钥和算法协商。SSH支持多种加密算法, 双方根据本端和对端支持的算法,协商出最终使用的算法。

    然后开始协商密钥,该密钥就是之后大家共同使用的“会话密钥”。这意味着从第三步开始,数据是不会被中间人窃听和篡改的。以Diffie Hellman为例,简单说明密钥生成过程:

      

      Alice和Bob是要建立ssh连接的两台机器,甭管哪个是client。

      首先双方都知道对方的公钥,此处的m和x。Alice随机数i作为种子,得到f(x,m,i)记为p;同理Bob得到f(x,m,j)记为q

      然后双方将得到的半个“密码”很放心的交给对方,双方都计算得到k(p,q)。

      第三阶段 认证阶段。跟地下党人接头一样,上一部作用是先找个没人的地方,确保安全,接下来该验证对方的身份了。否则把情报给了国民党那就得不偿失了。最简单的方式就是报上名来,并且证明你是这个人--张三,我看看我的通讯录里记录的张三是不是同志,一看是的,可以交情报了。这就是提供用户名和密码。还有一种认证方式,出示可靠的凭证,即令牌。武侠小说中拿出一个牌子,你就可以进去了,说明是同伙,不是同伙就不会有令牌,这是一个基本的认定。

      第四阶段 会话请求阶段。服务器处理客户端的请求。请求被成功处理后, 服务器会向客户端回应 SSH_SMSG_SUCCESS包,SSH进入交互会话阶段;否则回应 SSH_SMSG_FAILURE包,表示服务器处理请求失败或者不能识别请求。

      第五阶段 交互会话阶段。服务器接收到报文,解密后执行该命令,将执行的结果加密发还给客户端;

      总结:SSH设计之初是为了替代telnet执行远程机器的指令并返回结果,现在在可视界面上也可以通过ssh来保证安全,还有rsync+ssh可以实现文件安全上传,cvs+ssh可以实现代码安全同步,使用令牌式认证可以实现安全的定时任务。使用ssh加密的代理服务器可以实现FQ,,我猜测也是因为加密后难以被墙吧。

    3.2 SSL\TLS

      如前文所说,SSL是传输层的协议。单独讨论SSL略显抽象,我们看看应用最广泛的HTTPS,管中窥豹。HTTPS 即http协议加上ssl的产物,http协议是明文传输,而https能够实现对请求的网站身份验证以及传输信息的加密,它是如何实现的呢?

      证书是由认证机构(CA)颁发给web网站的一个许可,而根证书则是用户信任认证机构的基础。根证书有两种:官方根证书以及自签发根证书,如下图(来自互联网)所示,官方根证书是由认证机构和浏览器制作者进行协商,直接内置在浏览器之中的。从用户选择了某款浏览器开始,用户就信任了官方根证书对应的认证机构。而自签发根证书用于一些局域网,手工安装自己相信的机构颁发的根证书,从而使用该机构认证的服务网站。自签发认证机构产生主要因为得到官方认证机构的认可需要money。

      

      上图同时描述了一次https建立连接的过程,即安全校验方面的,主要有两个目的:

    1. 验证所访问网站的合法性,杜绝钓鱼网站、黑网站
    2. 加密自己和该网站的传输数据,以防泄密、篡改、中间人问题

      该过程具体描述如下:

      1.浏览器将自己支持的一套加密规则发送给网站。 
      2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构,以客户端公钥C_PuKey加密后通知到浏览器;
      3.客户端通过私钥C_PrKey解密后,获得网站证书要做以下工作: 
         验证证书的合法性(证书本身是否伪造?颁发证书的机构是否合法?证书中包含的网站地址是否与正在访问的地址一致?)证书受信任,或者是用户接受了不受信的证书。否则拒绝访问,如果是,    

      4.从刚才回传的信息中获得服务器选择的加密方案,并随机选择一个通话密钥key,接着用服务器公钥S_PuKey加密后发送给服务器;

      5.服务器接收到的浏览器传送到消息,用私钥S_PrKey解密,获得通话密钥key, 接下来的数据传输都使用该对称密钥key进行加密。 

     

  • 相关阅读:
    .NET备份博客园随笔分类文章
    部署到IIS报错:HTTP错误500.19,错误代码0x80070021
    部署到IIS报错:HTTP错误500.19,错误代码0x800700d
    css布局
    将Windows系统编译的.NET Core程序发布到Ubuntu系统
    在Ubuntu搭建.NET Core环境
    在Windows系统搭建.NET Core环境并创建运行ASP.NET网站
    2017-2018-2 1723《程序设计与数据结构》助教总结
    2017-2018-2 1723《程序设计与数据结构》实验四 & 实验五 & 课程总结 总结
    2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结
  • 原文地址:https://www.cnblogs.com/violinn/p/3132626.html
Copyright © 2011-2022 走看看