• 密码学技术总结


    前言 

    本文内容主要摘抄网络规划设计师的教材和腾讯-SUMMER课堂,主要对网络安全进行简单梳理和总结

    对称密码体制

    密码分为私钥和公钥密码两种,而介于私钥和公钥只见密码成为混合密码。

    私钥密码又称为对称密码,该体制的特点是加密和解密使用相同的密钥。消息的收发双方必须事先通过安全渠道交换密钥

    优点:加解密速度快,密文紧凑,使用长密钥时难破解。

    缺点:密钥分配问题,密钥管理问题,无法认证源。

     常见的对称密钥加密算法如下:DES,3DES,AES,RC4/5,IDEA

    DESData Encryption Standard,数据加密标准,分组加密算法
    采用移位+替换,速度快,密钥易产生。
    分组长度64位,密钥长度64位,有效密钥长度56位
    3DES三重DES(TDEA),使用DES对明文进行“加密-解密-加密”操作。
    • 加密:K1加密→K2解密→K3加密
    • 解密:K3解密→K2加密→K1解密
    一般K1和K3是相同的密钥。
    密钥长度112位
    IDEAInternational Data Encryption Algorithm,国际数据加密算法,
    分组加密算法。设计思想:混合使用来自不同代数群中的运算。
    明文和密文分组都是64位,密钥长度为128位,用于PGP
    AESAdvanced Encryption Standard,高级加密标准。
    可以通过硬件实现,速度快,像3DES一样安全。
    分组长度128位,支持128,192和256三种密钥长度
    RC4/5流加密算法,用于WIFI。加密速度快,可达到DES的10倍。分组和密钥长度都可变

    非对称密码体制

    公钥密码又称为非对称加密,对数据加密和解密的密钥是不同的。

    优点:密钥分发方便,密钥保管量少,支持数字签名。

    缺点:加密速度慢(计算量大,不适合加密大数据),数据膨胀率高

    常见的非对称加密算法如下:

    RSA:512位密钥,计算量极大,难破解。(基于大素数因子分解困难性)

    Elgamal,ECC(椭圆曲线算法),背包算法,Rabin,DH等。(基于离散对数问题困难性)

    注:数据膨胀率高代表加密完数据比原来数据量大很多,例如1T数据加密完变成3T数据量

    混合密码

    混合密码:发送方用对称密钥加密需要发送的消息,再用接受方的公钥加密对称密钥,然后一起发送给接收方,接收方先用自己的私钥解密得到对称密钥,然后用对称密钥解密得到明文。

    国密加密算法-SM系列

    《中华人民共和国密码法》密码分为核心密码、普通密码和商用密码,实行分类管理。
    • 核心密码、普通密码用于保护国家秘密信息,属于国家秘密,由密码管理部门依法实行严格统一管理。
    • 商用密码用于保护不属于国家秘密的信息,公民、法人可用。
    国产密码算法:是指由国家密码研究相关机构自主研发,具有相关知识产权的商用密码算法,目前已经公布的国产密码算法如下:

    算法名称算法特征描述
    SM1对称加密,分组长度和密钥长度都为128比特
    SM2

    非对称加密,用于公钥加密算法,密钥交换协议,数字签名算法

    (椭圆曲线问题)

    SM3杂凑算法(哈希),分组512位,输出杂凑值长度为256位
    SM4对称加密,分组长度和密钥长度都为128比特
    SM5标识密码算法,支持公钥加密,密钥交换,数字签名等安全功能

    哈希算法Hash

    HASH函数,又称为杂凑函数、散列函数,它能够将任意长度的信息转换成固定长度的哈希值(数字摘要),并且任意不同消息或文件所生成的哈希值是不一样的。
    h表示hash函数,则h满足下列条件:
    • (1)h的输入可以是任意长度的消息或文件M。
    • (2)h的输出的长度是固定的。
    • (3)给定h和M,计算h(M)是容易的。
    • (4)给定h的描述,找两个不同的消息M1和M2,使得h(M1)=h(M2)是计算上不可行的。
    哈希函数特性:不可逆性(单向)、无碰撞性 、雪崩效应 。

    常见的Hash算法有:
    • (1)MD5算法:以512位数据块为单位来处理输入,产生128位的信息摘要。常用于文件校验。
    • (2)SHA算法:以512位数据块为单位来处理输入,产生160位的哈希值,具有比MD5更强的安全性。
    • (3)SM3国产算法:消息分组长度为512比特,输出256位摘要。

    应用场景1-文件完整性校验:

     只要文件有缺失或者增加都会导致散列值不同,就能知道目标文件是否被篡改过。

    应用场景2-账号密码存储

    如数据库存储密码是存储hash值而非密码,通过hash值是不可逆的,所以无法从hash值反推原始密码,但是还是可以通过彩虹表攻击(彩虹是存储了常见的hash值对应密码的一个表),通过匹配来得到原始密码。所以才有了盐+哈希的方式,原理是通过原始密码+一个很小固定值得出hash值,相比于直接使用原始密码得出hash值来说,由于hash特性雪崩效应,一点微小值都会导致整个hash值变化,彩虹表查询方式就失效了。

    应用场景3-身份认证

    这个场景有点像第二场景中的盐+哈希,只不过场景2是在存储中,场景3是在通信过程中,不传递明文,而是传输hash值对身份进行认证。

     数字签名

    在计算机世界通过数字签名来实现同样的功能。签名方用自己的私钥进行签名,对方收到后,用签名方的公钥进行验证。数字签名是用于确认发送者身份和消息完整性的一个加密消息摘要,具有如下特点:

    1. 数字签名是可信的。
    2. 数字签名不可伪造。
    3. 数字签名不能重新使用。
    4. 签名文件是不能改变的。
    5. 数字签名不能抵赖。
    6. 接收者能够核实发送者身份。

    常用的签名算法是RSA,采用发送者私钥签名,接收方收到数据后,采用发送者的公钥进行验证。可以直接对明文进行签名,由于明文文件可能很大,这种签名方案效率低。所以也可以先由明文生成Hash(比如MD5生成128位),再对Hash值进行签名,效率更高。 

    数字证书

    数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。

    它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

    数字证书是一种权威性的电子文档,可以由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级CA系统进行签发。

    PKI体系

    1、用户/终端实体:指将要向认证中心申请数字证书的客户,可以是个人,也可以是集团或团体、某政府机构等。
    2、注册机构RA:负责受理用户申请证书,对申请人的合法性进行认证,并决定是批准或拒绝证书申请。注册机构并不给用户签发证书,而只是对用户进行资格审查。较小的机构,可以由CA兼任RA的工作。
    3、证书颁发机构CA:负责给用户颁发、管理和撤销证书。
    4、证书发布系统:负责证书发放,如可以通过用户自已或是通过目录服务。
    CRL库:证书吊销列表,存放过期或者无效证书。 

    数字证书应用

    例如这个场景,发送方的Alice想要和接收方Bob进行通信,因为Bob提供某种服务,所以不单单是Alice可能很多人都想和Bob通信,但是这个过程中这么多人包括Alice如果才能确信自己是和真正的Bob进行通信是个问题?

    所以数字证书作用就体现出来了,如果Bob有权威机构颁发的数字证书,那么Alice和其他人就会信任Bob的数字证书,然后拿取证书里面的Bob公钥进行加密,Bob收到信息后用自己私钥进行解密。

    上面所述的场景最经常用的是浏览器访问某个网站如下图,浏览器会内置很多CA证书,当浏览器访问服务器时候,服务器会返回相应证书,浏览器会验证证书的合法性(涉及到证书链,下文会提到),然后验证通过了就会利用证书里面公钥加密后续通信消息,服务器会利用私钥解密通信消息。

    实际上服务器和浏览器交互过程中,只在通信协商阶段会经历浏览器公钥加密,服务器私钥解密,通信协商阶段会商量对称密钥,便于后续数据通信,因为对称加密速度快,而如果数据通信用非对称加密就有前面说的加密速度慢,数据膨胀率高的问题。

    证书链

    准确来说,服务端所返回证书不是一个单一的证书,而是一组有序的证书,称为证书链。证书链由终端证书开始,然后是签署颁发该终端证书的中间CA证书,再然后是签署颁发前一个中间CA证书的另一个中间CA证书…中间CA证书的数量可以是0个到多个,一直链接下去,在证书链的末端,是根证书。当然这边根证书可以有也可以没有。

     浏览器就会一级一级的向上查找知道找到最终的根证书,匹配信任的根证书列表,如果匹配就信任该证书,匹配规则参考ThinkStu博客的图片:

     

    参考文献:

    网络规划设计师教材

    腾讯SUMMER课堂

    数字证书简介-CSDN博客

    证书链简介_Dancen的博客-CSDN博客 

  • 相关阅读:
    ajax笔记
    循迹模式-差速转弯
    微服务实战系列之Token
    leetcode - 2939. Maximum Xor Product
    android项目开发数据库类型选择指南
    基于多种群机制的PSO算法(优化与探索三 *混合种群思想优化多种群与广义PSO求解JSP)
    NLP教程(5) - 语言模型、RNN、GRU与LSTM
    [python] Python类型提示总结
    less方案实现主题切换 window.less.modifyVars
    file_get_contents 与curl 的对比
  • 原文地址:https://blog.csdn.net/u012895183/article/details/133821312