密码学概况
密码学是一门研究信息安全保护的科学,以实现信息的保密性、完整性、可用性及抗抵赖性。密码学主要由密码编码和密码分析两个部分组成,其中,密码编码(加密)学研究信息的变换处理以实现信息的安全保护,而密码分析(解密)学则研究通过密文获取对应的明文信息。
密码学历史
目前,密码成为网络与信息安全的核心技术和基础支撑。 2005年4月1日起国家施行《中华人民共和国电子签名法》。 2006年我国政府公布了自己的商用密码算法,成为我国密码发展史上的一件大事。 2019年《中华人民共和国密码法》草案已经发布。
密码学相关概念
明文:需要采用密码技术进行保护的消息。 密文:是指用密码技术处理过明文的结果,通常称为加密消息。 加密:将明文变换成密文的过程。 解密:由密文恢复出原明文的过程。 加密算法:加密过程所使用的一组操作运算规则。 解密算法:解密过程所使用的一组操作运算规则。 加密和解密算法的操作通常都是在密钥控制下进行的,分别称为加密密钥和解密密钥。
攻击密码类型
根据密码分析者在破译时已具备的前提条件,可将攻击密码的类型分为以下五种:
(1)唯密文攻击。密码分析者只拥有一个或多个用同一个密钥加密的密文,没有其他可利用的信息。
(2)已知明文攻击。密码分析者根据已经知道的某些明文-密文对来破译密码。一个密码仅当它能经得起已知明文攻击时才是可取的。
(3)选择明文攻击。指密码分析者能够选择明文并获得相应的密文。这是对密码分析者十分有利的情况。
(4)密文验证攻击。密码分析者对于任何选定的密文,能够得到该密文“是否合法”的判断。
(5)选择密文攻击。指密码分析者能够选择密文并获得相应的明文。这也是对密码分析者十分有利的情况。这种攻击主要攻击公开密钥密码体制,特别是攻击其数字签名。
密码体制分类
私钥密码体制
私钥密码体制又称为对称密码体制,该体制的特点是加密和解密使用相同的密钥。当用户应用这种体制时,消息的收发双方必须事先通过安全渠道交换密钥。
三个缺点:密钥分配问题、密钥管理问题、无法认证源。
优点:加密速度快。
常见的对称密钥加密算法
DES:替换+移位、56位密钥、64位数据块、速度快,密钥易产生。 3DES:三重DES,两个56位密钥K1、K2。 AES:是美国联邦政府采用的一种区块加密标准,这个标准用来替代原先的DES。对其的要求是“至少像3DES一样安全”。 RC-5:RSA数据安全公司的很多产品都使用了RC-5。 IDEA:128位密钥,64位数据块,比DES的加密性好,对计算机功能要求相对低。
公钥密码体制
公钥密码体制又称为非对称加密体制,就是对数据的加密和解密的密钥是不同的。其缺点是加密速度慢(密钥有1024位,计算量大,不适合加密大数据)。
非对称技术的原理是:发送方甲方和接收方乙方都分别有各自的公钥和私钥,且甲方的公钥加密只能由甲方的私钥解密,乙方同。双方的公钥是可以共享的,但是私钥只能自己已保密,此时,甲方要传输数据给乙方,明显应该使用乙方的公钥来加密,这样,只有使用乙方的私钥才能解密,而乙方的私钥只有乙方才有,保证了数据的保密性,也不用分发解密的密钥。
优点:密钥分发方便、密钥保管量少、支持数字签名。
常见的非对称加密算法
RSA:512位(或1024位)密钥,计算机量极大,难破解。 EIgamal、ECC(椭圆曲线算法)、背包算法、Rabin、D-H等。
混合密码体制
发送方用对称密钥加密需要发送的消息,再用接收方的公钥加密对称密钥,然后一起发送给接收方;接收方先用自己的私钥解密得到对称密钥,然后用对称密钥解密得到明文。
常见密码算法
对称密钥加密算法
DES是数据加密标准的简称,是一个分组加密算法,能够支持64比特的明文块加密,其密钥长度为56比特。
三重DES(TDEA):工作机制是使用DES对明文进行“加密-解密-加密”操作,如下 加密:K1加密->K2解密->K3加密。 解密:K3解密->K2加密->K1解密 补充:一般情况下,K1和K3是相同的密钥,密钥长度就是 56 * 2 = 112比特。
IDEA是国际数据加密算法的简单记,是一个分组加密算法,其明文和密文分组都是64比特,密钥长度为128比特。该算法的设计思想是“混合使用来自不同代数群中的运算”。
AES算法满足的要求:算法是没有密级的;算法的全部描述必须公开披露;算法必须可以在世界范围内免费使用;密码系统支持至少128比特长的分组;密码支持的密钥长度至少为128/192和256比特。
非对称密钥加密算法
欧拉函数与欧几里得算法
欧拉函数:对于一个正整数n,小于n且与n互素(质)的正整数的个数,记为φ(n)。 PS: 质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数 对于一个素数n,可知φ(n)=n-1; 对于两个素数p和q,它们的乘积满足n=p*q,则可知φ(n)=(p-1) * (q-1)。
欧几里得算法: gcd(a,b)表示a和b的最大公因数,如 gcd(a,b) = 1,则表示a,b的最大公因数为1,说明 a和b互素。 gcd(a,b) => gcd(b,(a mod b)) 计算gcd(60, 21) 解析:
同余:两个整数a,b,若它们除以整数m所得的余数相等,则称a与b对于模m同余,或a同余于b模m,记作 a ≡ b (mod m),表示a与b 对模(除以) m 同余。例如:26 ≡ 2 (mod 12)。
乘法逆元求法
例1:5 * d ≡ 1 mod 64,求d
本质是 5 * d mod 64 = 1 mod 64,假设5*d除以64的商为x,就有5 * d = 64*x+ 1 mod 64,即
d=(64*x+1)/5,从 x=1 开始取值,发现x=1时,65/5=13可以整除,因此d=13
例2:5*d = 1 mod 72,求d
通用公式: d = (φ(n)* x + 1) / e ad=b mod m,一般已知a,b,m,求d,根据原始定义,本质上就是b mod m=ad mod m,
可以假设a * d除以m的商为x,其余数是b mod m,依据乘除法公式有:a*d=m * x + b mod m,因此:
d=(m * x + b mod m )/a,其中,只有x是未知数,可从1开始代入,直到右边能整除为止。
RSA算法结构
RSA算法结构
是一种基于大合数因子分解困难性的公开密钥密码,简称为RSA密码,既可以用于加密,又可以用于数字签名,是目前应用最广泛的公开密钥算法。 基本的RSA密码体制:参数、加密算法、解密算法。 1.参数定义和密钥生成 ①随机地选择两个大素数p和q,而且保密; ②计算n=pq,将n公开; ③计算φ(n)=(p-1)(q-1),对φ(n)保密; ④随机地选取一个正整数e,需要满足条件1<e<φ(n)且gcd(e, φ(n))=1,将e公开 ③根据 e * d ≡ 1 (mod φ(n)) 时,求出d,并对d保密; (解析: (e * d) 除以 φ(n) 的余数 和 1 除以 φ(n) 的余数是一样的)
2.加密:
3.解密:
RSA算法实例
选取p=47,q=71;p和q保密。 计算n= 47 * 71 = 3337;n公开。 计算φ(n)= 46 * 70 = 3220; φ(n)保密。 随机的选取e=79,满足1<79<3220,且 gcd(79,3220) = 1,e公开。 根据 79 * d ≡ 1 mod 3220,求出 d=1019,d保密。
设明文M=688 232 687 966 668 3,进行分组 M1=688,M2=232,M3=687,M4=966,M5=668,M6=003。 M1的密文C1=688^79 mod 3337=1570,继续进行类似计算,可得最终密文 C= 1570 2756 2091 2276 2423 158。
如若解密,计算M1=1570^1019 mod 3337 = 688,类似地可解密还原出其他明文。
RSA密码的安全性
因子分解攻击:小合数的因子分解是容易的,然而大合数的因子分解却是十分困难的。要应用RSA密码,应当采用足够大的整数n。只要合理地选择参数,正确地使用,RSA就是安全的。为了确保RSA密码的安全,必须认真选择RSA的密码参数,各个参数选择如下:
一般 加密密钥 和 认证密钥 选n为1024位,而平台根密钥和存储根密钥则选n为2048位。
p 和q 要足够大并且p和q 应为强素数。
为了使加密速度快,e的二进制表示中应当含有尽量少的1。
为了使解密速度快,希望选用小的d但是d太小也是不好的。当d小于n的1/4时,已有求出d的攻击方法。
不要许多用户共用一个模数n。
国产密码算法
国产密码算法:是指由国家密码研究相关机构自主研发,具有相关知识产权的商用密码算法,
目前公布的国产密码算法如下:
HASH函数
hash函数,又称为杂凑函数、散列函数,它能够将任意长度的信息转换成固定长度的哈希值(又称数字摘要或者信息摘要),并且任意不同消息或文件所生成的哈希值是不一样的。
令h表示hash函数,则h满足下列条件(特点): (1)h的输入(明文M)可以是任意长度的消息或文件; (2)h的输出(信息摘要 / 密文C)长度是固定的; (3)给定h和M,计算h(M)(信息摘要)是容易的; (4)给定h的描述,找两个不同的消息M1和M2,使得h(M1)= h(M2)是计算上不可行的。 PS:同一段明文对应的信息摘要具有唯一性。 补充: (5)通过信息摘要是不能还原为明文 => 黑客截获了 h函数和信息摘要,他也没办法得到 M
信息摘要作用是为了保证数据传输的 完整性
常见的Hash算法有: (1)MD5算法:以512位数据块为单位来处理输入,产生128位的信息摘要 (2)SHA算法:以512位数据块为单位来处理输入,产生160位的哈希值,具有比MD5更强的安全性。 (3)SM3国产算法:2010年公布,该算法消息分组长度为512比特,输出256比特信息摘要。采用了Merkle-Damgard(M-D结构)结构。
数字签名
数字签名是指签名者使用私钥对待签名数据的杂凑值做密码运算得到的结果。该结果只能用签名者的公钥进行验证,用于确认待签名数据的完整性、签名者身份的真实性和签名行为的抗抵赖性。
思考:数字签名技术使用的是私钥密码体制还是公钥密码体制
一种完善的签名应满足以下三个条件:
-
非否认:签名者事后不能抵赖自己的签名。
-
真实性:接收者能验证签名,而任何其他人不能伪造签名。
-
可鉴别性:如果当事的双方关于签名的真伪发生争执,能够在公正的仲裁者面前通过验证签名来确认其真伪。
一个数字签名方案一般由签名算法和验证算法组成。签名算法密钥是秘密的,只有签名的人掌握,而验证算法则是公开的,以便他人验证。典型的数字签名方案有RSA、Rabin、EIGamaI签名体制和DSS标准。
签名和加密很相似,一般是签名者利用私钥对需签名的数据进行加密,验证方利用签名者的公钥对签名数据做解密运算。签名与加密的不同之处在于目的的不同,签名是为了保证不可抵赖性和完整性,加密是为了保证机密性。
数字签名一般和信息摘要联合使用,签名和验证过程如下:
密钥管理
密码系统的安全性依赖于密码管理。密码管理主要可以分成三个方面内容:即密钥管理、密码管理政策、密码测评。
密钥管理:主要围绕密钥的生命周期进行,包括密钥生成、密钥存储、密钥分发、密钥使用、密钥更新、密钥撤销、密钥备份、密钥恢复、密钥销毁、密钥审计。
密钥管理政策: 《商用密码管理条例》:内容主要有商用密码的科研生产管理、销售管理、使用、安全保密管理。
《中华人民共和国密码法》:密码分为核心密码、普通密码和商用密码,实行分类管理。核心密码、普通密码用于保护国家秘密信息,属于国家秘密,由密码管理部门依法实行严格统一管理。商用密码用于保护不属于国家秘密的信息,公民、法人和其他组织均可依法适用商用密码保护网络与信息安全。
密码测评:是指对相关密码产品及系统进行安全性,合规性评估,以确保相关对象的密码安全有效,保障密码系统的安全运行。目前,国家设立了商用密码检测中心。
数字证书
数字证书:也称公钥证书,是由证书认证机构(CA)签名的包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及扩展信息的一种数据结构。
数字证书的基本信息域包括:版本号、序列号、签名算法、颁发者、有效日期、主体、主体公钥信息、颁发者唯一标识符、主体唯一标识符、扩展项。
数字证书按类别可分为个人证书、机构证书和设备证书,按用途可分为签名证书和加密证书。其中,签名证书是用于证明签名公钥的数字证书。加密证书是用于证明加密公钥的数字证书。
为更好的管理数字证书,一般是基于PKI技术(公钥基础设施)建立数字证书认证系统(简称CA),CA提供数字证书的申请、审核、签发、查询、发布以及证书吊销等全生命周期的管理服务。
数字证书认证系统的构成包括目录服务器、OCSP服务器、注册服务器、签发服务器等。
安全协议
Diffie-Hellman密钥交换协议
基于求解离散对数问题的困难性。
即对于下列等式:Cd = M mod P
在已知C和P的前提下, 由d 求 M很容易,只相当于进行一次指数运算。
而再由M反过来求d,则需要指数级次计算。
随着P取得足够大,就能实现足够的安全强度。
SSH协议
SSH是Secure Shell的缩写,即“安全外壳”,它是基于公钥的安全应用协议,由 SSH传输层协议、 SSH用户认证协议 SSH连接协议
三个子协议组成,各协议分工合作,实现加密、认证、完整性检查等多种安全服务。
SSH传输层协议: 提供算法协商和密钥交换,并实现服务器的认证,最终形成一个加密的安全连接,该安全连接提供完整性、保密性和压缩选项服务。
SSH用户认证协议则利用传输层的服务来建立连接,使用传统的口令认证、公钥认证、主机认证等多种机制认证用户。
SSH连接协议在前面两个协议的基础上,利用已建立的认证连接,并将其分解为多种不同的并发逻辑通道,支持注册会话隧道和TCP转发,而且能为这些通道提供流控服务以及通道参数协商机制。
SSH的工作机制共分7个步骤,如图所示:
目前,用户为了认证服务器的公钥真实性,有三种方法:
第一种,用户直接随身携带含有服务器公钥的拷贝,在进行密钥交换协议前,读入客户计算机。
-
第二种,从公开信道下载服务器的公钥和它对应的指纹后,先通过电话验证服务器的公钥指纹的真实性,然后用HASH软件生成服务器的公钥新指纹,比较下载的指纹和新生成的指纹,若相同,则公钥是真实的,否则为虚假。
-
第三种,通过PKI技术来验证服务器。CA
在实际的应用中,SSH在端口转发技术的基础上,能够支持远程登录、rsh、rlogin、文件传输等多种安全服务。Linux系统一般提供SSH服务,端口号一般为22。
虽然SSH是一个安全协议,但是也有可能受到中间人攻击和拒绝服务攻击。