• SSL/TLS 与国密算法


    SSL/TLS是用于网络传输的加密协议,用于解决应用层传输安全问题。众所周知,HTTP是明文传输,加上SSL后变成HTTPS,它的发展经历经过了以下阶段:

    1. SSL1.0,已废除,不再使用。
    2. SSL2.0,RFC6176,已废除。
    3. SSL3.0,RFC6101,基本废除
    4. TLS1.0,RFC2246,少数在使用
    5. TLS1.1,RFC4346
    6. TLS1.2,RFC5246,目前广泛使用
    7. TLS1.3,正在规划。

    每种加密套件需要具备四项基础功能:

    • 身份认证
    • 密钥协商
    • 信息加密
    • 完整性校验

    在以上四项功能之上,实现加解密、签名和验签等功能。

    国密算法

    国密算法是国家密码局认定的国产密钥算法,主要有以下几种

    • SM1:对称加密,密钥、分组长度为128位,加密强度与AES相当,非公开,需要专用加密芯片配合。
    • SM2:基于ECC椭圆曲线的公钥密钥算法,包括
      • SM2-1数字签名算法
      • SM2-2密钥交换协议
      • SM2-3公钥加密算法
        256位的SM2密码强度优于2048位的RSA,运算速度比RSA快。
    • SM3:输出长度为256位,适用于数字签名和验证消息认证码。
    • SM4:对称加密,密钥长度与分组长度均为128位,用于无线局域网领域。
    • SM9:能够实现由用户指定公钥,例如使用身份证号码、邮箱地址等,通过密钥生成中心得到私钥。

    以下是SSL和国密算法的对比

    标准 身份认证 密钥协商 对称加密 完整性校验
    SSL/TLS 数字签名 RSA、ECDH、ECDSA RC4、AES、DES等 SHA1/SHA256
    国密算法 SM2-1 SM2 SM4 SM3

    国密算法应用

    • 国密证书:使用国密算法(SM2-SM3)的标准X509格式证书
    • 国密SSL:采用国密算法,符合国密标准的安全传输协议。

    新版Linux内核已经支持的SM3和SM4算法,SM2算法也于2020年10月26日纳入Linux内核

    国密规范规定发送证书时需要有签名证书和加密证书,详见双证书

    证书格式

    X.509是数字证书的格式标准,用于标示通讯各方身份信息的一系列数据,具体有多种编码形式,常用的有:

    • pem格式:将DER格式进行Base64编码。
    • der格式:DER格式,二进制格式保存。

    这两种格式可以互转。证书中含有申请者公钥、申请者的组织信息、个人信息、签发机构信息、证书有效时间和证书序列号等明文信息。

    TLS握手过程

    下图为TLS握手过程:

    基本流程如下:

    1. 客户端向服务器索要并验证公钥
    2. 双方协商生成"对话密钥"
    3. 双方采用"对话密钥"进行后续加密通讯

    具体流程在 SSL/TLS协议运行机制的概述,这篇文章中有很好的解释,此处不再赘述。

    在握手的最后阶段,通讯双方记录对方发送过来的所有内容,并计算内容hash值,交于对方进行校验。

    这里需要注意,协商生成"对话密钥"的过程,需要依赖三个随机数,其中有2个明文随机数,分别由客户端和服务端生成,1个密文随机数,由客户端生成,称为pre-master-key,并通过公钥加密后传给服务端,通讯双方同步这三个随机数后,采用事先商定的密钥生成方法,生成后续会话的对话密钥

    握手协商阶段

    • RSA密钥交换算法
      • 客户端生成一个随机数,当做后续对称加密密钥,使用服务端的公钥加密后回传给服务端,服务的使用私钥解密,双方同步对称密钥。
    • DHE密钥交换算法
      • 客户端生成一个随机值Xa,通过公式Pa=q^Xa mod p(p、q值固定)计算得到Pa,发送Pa到服务器。
      • 服务器生成一个随机值Xb,通过公式Pb=q^Xb mod p,计算得到Pb,Pb发送给客户端
      • 客户端收到Pb后计算Sa=Pb^Xa mod p,服务端收到Pa后计算Sb=Pa^Xb mod p。
      • DHE算法保证了 Sa = Sb = S,S为对称通讯密钥。
    • ECDHE密钥交换算法
      • 客户端生成一个随机值Ra,计算Pa(x,y) = Ra * Q(x,y),将Pa(x,y)发送至服务器
      • 服务端生成一个随机值Rb,计算Pb(x,y) = Rb * Q(x,y),将Pb(x,y)发送至服务器
      • 客户端计算Sa(x,y)=Ra *Pb(x,y),服务端计算Sb(x,y) = Rb * Pa(x,y)
      • 算法保证Sa=Sb=S,提取S的x向量作为对称通讯密钥

    总结

    本文简要介绍了SSL和国密算法的基本概念、加密通道的建立流程和握手协商密钥交换流程。

    参考资料:

    GMT 0024-2014 SSL VPN 技术规范
    浅谈国密算法
    各种安全证书间的关系及相关操作
    PKI - 三种密钥交换算法详解(RSA& DHE& ECDHE)及他们在SSL/TLS协议中的应用
    ECC椭圆曲线加密算法:ECDH 和 ECDSA

    作者:浩天之家
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    Top
    收藏
    关注
    评论
  • 相关阅读:
    ThinkPHP3.2 分组分模块
    PHP 视频
    微信分享SDK
    【mysql】一维数据TopN的趋势图
    【日期-时间】Java中Calendar的使用
    【java消息格式化】使用MessageFormat进行消息格式化
    【Java数据格式化】使用DecimalFormat 对Float和double进行格式化
    【xargs使用】查询包含某字符串的所有文件
    【SVN】自动备份SVN仓库
    【Oozie】安装配置Oozie
  • 原文地址:https://www.cnblogs.com/cherishui/p/14626196.html
Copyright © 2020-2023  润新知