一、概述
发展历史
古典密码阶段:经典“凯撒密码“,基本手段是针对字符的替代和置换;基于电报和无线电安全需求出现转轮密码机;
近代密码阶段:香农信息论-《保密系统的通信理论》;
现代密码阶段:DH算法是一种密钥建立的算法,标志着密码学进入公钥密码学的时代;
基本保密通信模型
密码学包括密码编码学(方向:信息编码,构建安全密码算法和协议,用于加密、认证)和密码分析学(破译/伪造密码);
图1:基本保密通信模型图
密码系统安全性
影响因素:密码算法复杂度、密钥机密性和密钥长度;
密钥机密性:“科克霍夫原则”:系统的保密性依赖于密钥,不依赖于加密体制或算法保密。
密码算法分类
受限制的算法与基于密钥的算法:基于安全性依赖于算法或密钥区分;
对称密码与非对称密码:基于加密/解密密钥是否相同且是否可根据其一推断出其二区分;
分组密码与流(序列)密码:基于对称密码体制内针对明文的不同处理方式区分。
二、对称密码算法
典型的分组密钥算法: DES、 IDEA、 AES、 RC5、 Twofish、 CAST-256、 MARS等。
图2:对称密码原理
算法特点
优点:算法简单、加密效率高;适合加密大量数据;明文和密文长度相等;
缺点:(1)需通信双方在安全信道协商加密密钥,无法保证安全信道是安全的;
(2)用户数量和此类密钥成正比,密钥管理难度大;
(3)无法解决对消息的篡改、否认等问题。
分组密码设计的两个基本原则:混淆和扩散原则,目的是抗击敌手对密码系统的统计分析。
混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。
扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构;并且也使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防止对密钥进行逐段破译。
密钥算法要求
在选择密钥的时候,一般地有几方面考量:
算法必须提供高度的安全性
算法必须有详细的说明,并易于理解
算法的安全性取决于密钥,不依赖于算法
算法适用于所有用户
算法适用于不同应用场合
算法必须高效、经济
算法必须能被证实有效
DES和3DES
3.1 DES
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。
图3:DES算法过程
简而言之,就是两个8x8矩阵作用,64位密钥内有效密钥56位,校验位为8的倍数位。
3.2 3DES
由于2DES和4DES易受中间相遇攻击的威胁,实用中广泛采用三重DES方案,有四种使用模式,即:
DES-EEE3 模式。使用三个不同密钥(k1,k2,k3)(k1,k2,k3),采用三次加密算法。
DES-EDE3模式。使用三个不同密钥(k1,k2,k3)(k1,k2,k3),采用加密-解密-加密算法。
DES-EEE2模式。 使用两个不同密钥(k1=k3,k2)(k1=k3,k2),采用三次加密算法。
DES-EDE2模式。使用两个不同密钥(k1=k3,k2)(k1=k3,k2),采用加密-解密-加密算法。
AES
AES全称为Advanced Encryption Standard,即高级加密标准,密码学中又称为Rijndael加密法。(Rijndael分组和密钥大小都可以为128/192/256位,但AES只要求分组大小为128位,因此只有分组长度为128Bit的Rijndael才称为AES算法)
Https 就是使用 AES 来进行数据的加密的,因为 AES 是 TLS 和 SSL 标准的一部分。
AES中,128/192/256位密钥长度的处理方式类似,密钥长度每增加64位,循环次为10/12/14轮。最后一轮不使用列混合变换函数。
图4:AES算法过程
①字节替换函数:记为 SubBytes(State) ,对 State 的每个字节做非线性代换。
②行位移变换函数:记为 ShiftRows(State) ,对 State 的行做置换,实际上重排了元素
的位置而不改变元素本身。
③列混合变换函数:记为 MixColumns(State) ,对 State 的列做运算,用 State 字节列
的值进行数学域加和域乘的结果代替每个字节。
④轮密钥加函数:记为AddRoundKey(State,RoundKey),逐字节、逐比特地将RoundKey中的元素与State中的元素相加。
其他算法
RC算法:以字节流的方式依次加密明文的每个字节。算法密钥长度可变。
BlowFish算法:是一个64位分组及可变密钥长度的对称密钥分组算法, 非专利算法。
IDEA(Intemational Data Encryption AIgorithm国际数据加密算法)算法:使用128个密钥和8个循环,采用软件实现,和采用硬件实现一样快速。
三、非对称密码算法
又称公钥密码算法。解决传统对称密码体制诸如密钥分配、密钥管理和数字签名功能等局限性。
图5:公钥密码原理
算法特点
公钥密码体制建立在数学函数的基础上,不基于替代和置换操作;同时,非对称加密密钥和解密密钥不同,加密密钥和加密算法可公开,只有解密密钥保密;通信方只需保管好各自的私钥,简化了密码管理。缺点是计算复杂、耗用资源大,且会导致密文变长。
RSA算法
RSA的安全性基于整数因子分解的困难性,RSA算法是第一个可同时用于加密和数字签名的算法;
过程简述:https://blog.csdn.net/q2090988808/article/details/122141285
图6:ECC&RSA加密算法对比
SM2算法
3.1基础应用
SM2 是基于 ECC (椭圆曲线密码算法)的公钥密码算法。可以完成签名、密钥交换以及加密应用。目前在一些金融系统(如银行)得到广泛的应用。
由于 1024 位 RSA 算法面临严重的安全威胁及其他问题,我国密码管理部门决定采用SM2 椭圆曲线算法替换 RSA 算法。
图7:SM2算法和RSA算法比较
SM2 算法采用的椭圆曲线方程为 y2 =x3+ax+b。在 SM2 算法标准中,通过指定α、b 系数,确定了唯
一的标准曲线。同时,为了将曲线映射为加密算法, SM2 标准中还确定了其他参数,供算法程序使用。
图8:ECC数学原理
3.2其他国密算法
SM1: 是对称算法。分组长度和密钥长度都为 128 位比特。采用该算法已经研制了智能 IC 卡、智能密码钥匙、加密卡等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域。
SM3: 是哈希算法。功能与 MD5、SHA-1相同,产生 256 位的哈希值。该算法是不可逆的算法,适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成。
SM4: 是对称算法。分组长度和密钥长度都为 128 位比特,主要用于无线局域网产品。
SM7: 是对称算法。分组长度和密钥长度都为 128 位比特。该算法适用于身份识别类应用(如门禁卡、工作证、参赛证),票务类应用(如大型赛事门票、展会门票),支付一卡通类应用(如公交"一卡通" )等。
SM9: 是非对称算法。与 SM2 类似,实现数字签名、密钥交换协议以及密钥封装机制和公钥加解密。不同于传统意义上的 SM2 算法,可以实现基于身份的密码体制,也就是公钥与用户的身份信息即标识相关,省去了证书管理等。
ZUC算法:是一个面向字的流加密算法。它使用一个128位的初始密钥 key 和一个128位的初始向量 iv 来作为输入,可以输出若干个32位字的密钥流,也就就是说每32位字在这里称为一个密钥字。这样产生的密钥流可以用于加密和解密。
SSF33算法:和国密SM1、SM4算法类似,均为分组密码算法。这三种算法的密钥长度和分组长度均为128比特。密钥和分组长度都为16字节,该算法可被用于安全报文传送和MAC机制密文运算。目前SSF33、SM1分组密码标准的算法尚未公开,仅可以通过密码硬件(密码芯片或者硬件密码卡)的方式实现,在调用SSF33或SM1的功能时,需要接入相应密码卡等的硬件设备。
其他公钥算法
4.1EIGamal公钥密码算法
其安全性基于求解离散对数问题的困难性。
4.2ECC公钥密码算法
椭圆曲线密码算法,其安全性基于椭圆曲线点群上离散对数问题的难解性。 ECC 是 RSA
强有力的竞争者。与 RSA 相比,有安全性能更高、计算量小、处理速度快、存储空间占用
小和带宽要求低等优点。二者性能比较如下表所示。
图9:ECC 和 RSA 性能比较
4.3公钥密码体制扩展
基于背包问题的Merkle-Hellman背包公钥密码体制
基于整数因子分解问题的RSA和Rabin公钥密码体制
基于有限域中离散对数问题的EIGamal公钥密码体制
基于椭圆曲线上离散对数问题的椭圆曲线公钥密码体制
四、其他密码服务
对称和非对称算法主要针对消息机密性问题,针对消息完整性、真实性和不可否认性,避免消息被篡改、冒充和抵赖还有消息认证技术(哈希、消息认证码、数字签名)来应对。
哈希函数
哈希 (Hash) 函数也称单向散列函数,其主要用途是消息完整性检测和数字签名。哈希函数接受一个消息作为输入,产生一个称为哈希值的输出,也可称之为散列值、消息摘要( message digest) 。
图10:哈希示意图
目前,常用的哈希函数有 MD5和SHA-1
MD5 算法:消息摘要算法(RFC1321 ),由 Ron Rivest 提出。该算法以一个任意长的消息作为输入,输出 128 位的消息摘要。
SHA-1算法:安全 Hash 算法( Secure Hash Algorithm, SHA) ,由美国标准与技术研究所设计并于93 年作为联邦信息处理标准 (FIPS 180) 发布,修改版于 1995年发布 (FIPS 180-1) ,通常称之为 SHA-1。SHA-1 算法的输入是长度小于2的64次方任意消息 ,输出 160 位的散列值。
消息认证码
2.1基本原理
消息认证是证实一个收到的消息来自可信的源点,且未被篡改、重放或延迟等的过程(完整性、真实性);
消息认证码也称消息鉴别码( Message Authentication Code , MAC) ,它利用消息M和通信双方共享的密钥K,通过函数C来生成一个固定长度的短数据块,并将该数据块附加在消息M之后。
2.2基本用法
第一种:MAC由K生成,直接附加在消息之后,不提供对消息M的保密;如下图:
图11:实现消息的认证
第二种:MAC由K1及M生成,再通过K2对消息加密,MAC直接附加在消息之后,如下图:
图12:实现消息的认证及保密
第三种:先通过K2对消息M加密,将“加密后的消息“再与K1通过生成MAC附加在”加密后的消息“后,如下图:
图13:消息先保密后认证
数字签名
3.1概述
消息鉴别用来保护通信双方免受第三方的攻击,但通信双方可能存在欺骗和抵赖;
数字签名是指附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换能使数据单元的接收者确认数据单元来源和数据单元的完整性,并保护数据,防止被人伪造;
数字签名是非对称密钥加密技术与数字摘要技术的应用;
基本特性:不可伪造性、不可否认性、消息完整性。
图14:数字签名应用示例
3.2两种分类
按对消息的处理方式,数字签名可分为两类:
直接对消息签名:消息经过密码变换后被签名的消息整体;
对压缩消息签名:它是附加在被签名消息之后或某一特定位置上的一段签名信息。
按明文和密文的对应关系划分,以上每一种签名又可以分为两个子类:
确定性数字签名:明文与密文一一对应,对特定消息签名,签名保持不变,如 RSA Rabin 签名;
随机化或概率式数字签名:对同一消息的签名是随机变化的,取决于签名算法中随机参数的取值。一个明文可能有多个合法数字签名,如EIGamal 签名。