第三章 密码学基本理论
3.1 密码学基础
3.1.1 密码学概念与法律
密码学主要由密码编码和密码分析两个部分组成。
·密码编码学:研究信息的变换处理以实现信息的安全保护
·密码分析学:则研究通过密文获取对应的明文信息
《中华人民共和国密码法》于2020年1月1日起实施。2005年4月1日起国家施行《中华人民共和国电子签名法》。密码学相关概念:
明文:需要采用密码技术进行保护的消息。
密文:用密码技术处理过明文的结果,通常称为加密消息。
加密:将明文变换成密文的过程。
解密:由密文恢复出原明文的过程。
加密算法:加密过程所使用的一组操作运算规则
解密算法:解密过程所使用的一组操作运算规则
密钥:加密和解密算法的操作通常都是在密钥控制下进行的,分别称为加密密钥和解密密钥。
3.1.2 密码安全分析
(1)唯密文攻击:密码分析者只拥有一个或多个用同一个密钥加密的密文,没有其他可利用的信息。 只有密文,别的啥都不知道
(2)已知明文攻击:密码分析者根据已经知道的某些明文-密文对来破译密码。一个密码仅当它能经得起已知明文攻击时才是可取的。 已知某些明文对应的密文
(3)选择明文攻击:指密码分析者能够选择明文并获得相应的密文。 对密码分析者十分有利,适于攻击计算机文件系统和数据库系统
(4)密文验证攻击:密码分析者对于任何选定的密文,能够得到该密文“是否合法”的判断。
(5)选择密文攻击:指密码分析者能够选择密文并获得相应的明文。这也是对密码分析者十分有利的情况。 主要攻击公开密钥密码体制,特别是攻击数字签名
3.1.3 密码体制分类
密码体制分为私钥和公钥密码体制两种,而介于私钥和公钥之间的密码体制称为混合密码体制。
私钥密码体制又称对称密码体制,该体制的特点是加密和解密使用相同的密钥。消息的收发双方必须事先通过安全渠道交换密钥。
·优点:加解密速度快、密文紧凑、使用长密钥时的难破解。
·缺点:密钥分配问题、密钥管理问题、无法认证源。
常见的对称密钥加密算法如下:DES、3DES、AES、RC4/5、IDEA.
公钥密码体制又称为非对称加密体制,就是对数据加密和解密的密钥是不同的。
优点:密钥分发方便、密钥保管量少、支持数字签名。
缺点:加密速度慢(计算量大,不适合加密大数据)、数据膨胀率高。
每个实体有两个密钥:公钥公开,私钥自己保存。
公钥加密,私钥解密,可实现保密通信
私钥加密,公钥解密,可实现数字签名
常见的非对称加密算法如下:
RSA:512位(或1024位)密钥,计算量极大,难破解。
Elgamal、ECC(椭圆曲线算法)、背包算法、Rabin、DH等。
混合密码体制:发送方用对称密钥加密需要发送的消息,再用接收方的公钥加密对称密钥,然后一起发送给接收方;接收方先用自己的私钥解密得到对称密钥,然后用对称密钥解密得到明文。

3.2 非对称加密算法
3.2.1 非对称加密算法总结
3.2.2 国产加密算法
国产密码算法:是指由国家密码研究相关机构自主研发,具有相关知识产权的商用密码算法,目前已经公布的国产密码算法如下:
SM1:对称加密,分组长度和密钥长度都为128比特
SM2:非对称加密,用于公钥加密算法、密钥交换协议、数字签名算法(椭圆曲线问题)
SM3;杂凑算法,分组512位,输出杂凑值长度为256位
SM4:对称加密,分组长度和密钥长度都为128比特
SM9:标识密码算法,支持公钥加密、密钥交换、数字签名等安全功能
3.3 非对称加密算法RSA
3.3.1 公钥密码分类
目前公认的比较安全的公钥密码有两类:
基于大素数因子分解困难性:RSA
基于离散对数问题困难性:DH、Elgamal、ECC(椭圆曲线密码)
3.3.2 RSA算法概述
RSA算法是非对称算法,由 Ronald Rivest、Adi Shamir、Leonard Adleman三人发明。RSA算法中,公钥和私钥都可以用于加密消息,用于加密消息的密钥与用于解密消息的密钥相反。
RSA算法提供了一种保护网络通信和数据存储的机密性、完整性、真实性和不可否认性的方法。
SSH、OpenPGP、S/MIME和SSL/TLS都依赖于RSA进行加密和数字签名功能。
公钥密码思想是将传统密码的密钥K一分为二,分为加密钥Ke和解密钥Kd,用加密钥Ke控制加密,用解密钥Kd控制解密。
每个用户都将自己的姓名、地址和公开的加密钥等信息在KMC(密钥管理中心)登记,将公钥记入共享的公钥数据库PKDB(Public Key Database)。
3.3.3 RSA-三种模式-加密模式
加密模式(确保数据的秘密性)
发方:
·①A首先查PKDB, 查到B的公开的公钥KeB
·②A用KeB加密明文M得到密文(C:C=E(M,KeB)
·③A发密文C给B
收方:
·①B接受C
·②B用自己的私钥KdB解密C,得到明文M=D(C,KdB)
3.3.3 RSA-三种模式-认证模式
认证模式(确保数据的真实性)
发方:
·①A用自己的私钥KdA加密M,得到密文(C:C=E(M,KdA)
·②A发密文C给B
收方:
·①B接受C
·②B查PKDB, 查到A的公开的公钥KeA
·③用KeA解密C得到明文MI:M=D(C,KeA)
3.3.4 RSA-三种模式-混合模式
加密认证混合模式(同时确保数据的秘密性和真实性)
发方:
·①A用自己的私钥KdA加密M,得到中间密文S:S=E(M,KdA)
·②然后A查PKDB, 查到B的公开的公钥KeB
·③A用KeB加密S得到最终的密文(C:C=E(S,KeB)
·④A发密文C给B
收方:
·①B接受C
·②B用自己的私KdB解密C,得到中间密文S=D(C,KdB)
·③B查PKDB, 查到A的公开的公钥KeA。用KeA解密S得到明文M,M=D(S,KeA)
3.3.5 相关数学基础
3.4 Hash算法
3.4.1 哈希算法概念
哈希算法 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位摘要。
3.4.2 hash应用-文件完整性校验

3.4.3 hash应用-账号密码存储

3.4.4 hash应用-用户身份认证
增加一个随机数R做哈希 MAC=Hash(密码+R)
需要双方预先知道这个R
MAC:消除中间人攻击,源认证+完整性校验

3.4.5 MAC
MAC(Message Authentication Code, 消息认证码)
MAC消息认证码在加密的过程中有两种方法:
·①用单向散列函数的实现,MAC函数用单向hash函数加密时,MAC被称为HMAC(Hash Message Authentication Code), MAC=Hash (M+key)
·②通过分组密码的实现,比如基于AES的CBC-MAC,

3.4.6 HA5H、MAC和HMAC对比
Hash能验证数据完整性,无法进行用户身份认证,计算过程无密钥参与。
MAC能保证数据完整性,同时可以进行用户身份验证,有key参与。可以采用Hash或对称加密算法两种技术产生MAC值。
HMAC是MAC的一种,可以验证数据完整性,也可以验证数据是由原始发送方发出的,使用hash函数来构造,HMAC输出长度与Hash长度一样。
3.5 数字签名
· 数字签名:签名者使用私钥对待签名数据的哈希值做密码运算得到的结果,该结果只能用签名者的公钥进行验证。【私钥签名,公钥验证】
· 数字签名具有如下特点:
①非否认:签名者事后不能抵赖自己的签名。(不可否认性)
②真实性:接收者能验证签名,而任何其他人不能伪造签名。(解决冒充问题)
③可鉴别性:如果当事的双方关于签名的真伪发生争执,能够在公正的仲裁者面前通过验证签名来确认其真伪。
④不可篡改:私钥不公开,所以不能篡改签名。
· 数字签名,可以保证数据的完整性和不可否认性。
· 典型数字签名算法(公钥加密算法):RSA、Rabin、ELGamal签名体制和DSS标准。
