密码学是研究信息安全保护的科学,以实现信息的保密性、完整性、可用性及抗抵赖性,简单说就是全方位无死角保护所传送的信息!
密码学主要由密码编码和密码分析两个部分组成。密码编码学研究信息等变换处理以实现信息等安全保护,密码分析学研究通过密文获取对应的明文信息。简单来说就是密码编码研究加密技术,密码分析研究如何破解密码。
0x01 密码系统
密码系统(Cryptosystem)由以下五个部分组成
明文空间 M:需要采用密码技术进行保护的消息
密文空间 C:用密码技术处理过的明文的结果
密钥空间 K:K=< K e K_e Ke, K d K_d Kd>,每个K由加密密钥 K e K_e Ke和解密密钥 K d K_d Kd组成
加密算法 E:将明文变换成密文所使用的组操作运算规则
解密算法 D:将密文恢复成明文所使用的组操作运算规则
0x02 密码体制
显然,若 K d = K e K_d=K_e Kd=Ke,称为单密钥密码体制或者对称密码体制或者传统密码体制。否则为双密钥体制,进而,若 K d K_d Kd不能由 K e K_e Ke推出,就可将 K e K_e Ke公开且不会损害 K d K_d Kd的安全,这种密码体制称为公开密钥密码体制,简称公钥密码体制
0x02.1 对称密码体制
对称密码体制(私钥密码体制):对信息进行明/密文变换时,加解和解密使用相同密钥的密码体制
安全性依赖于:
1、加密算法的安全性
2、密钥的秘密性
优点:效率高,算法简单,加密速度快,适合大量数量的加密
缺点:
- 消息的发送者和接收者必须事先通过安全渠道交换密钥
- n个使用者,就需要 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2个密钥,密钥管理困难
- 无法认证消息源,无法进行数字签名
用途:信息量大的加密需求
代表算法:DES算法、3DES算法、IDEA算法、AES算法、SM4分组算法
0x02.2 非对称密码体制
非对称密码体制(公钥密码体制):对信息进行明/密文变换时,加密和解密密钥不相同的密码体制。
在非对称密码体制中,每个用户都具有一对密钥,一个用于加密,一个用于解密,其中加密密钥可以公开,称之为公钥,解密密钥属于秘密,称之为私钥,只有用户本人知道。
优点:
- 密钥分发方便
- 密钥保管量少
- 支持数字签名
缺点:实现速度慢,不适合信息量大的加密情况
用途:适用于加密关键性的、核心的机密数据
代表算法:RSA算法、ElGamal算法、椭圆曲线加密算法
问题:由于公钥对外公开,因此
1、如果某人用自己的公钥加密数据发送给我,我无法判断该数据是谁发送的
2、用户用私钥加密的数据,任何知道该用户公钥的人都能解密其数据。
代表算法:RSA算法
-
相关数学基础
-
欧拉函数:对于一个正整数n,小于n且与n互素的正整数的个数,记为φ(n)。
对于一个素数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互质
-
同余:
两个整数a,b,若它们除以整数m所得的余数相等,则称a与b对于模m同余,或a同余b模m,记作 a ≡ b ( m o d m ) a \equiv b(mod\;m) a≡b(modm)
-
-
RSA密码体制参数的定义
- 随机选择两个大素数p和q (保密)
- 计算n = p * q (n公开)
- 计算φ(n) = (p-1) * (q-1) (φ(n)保密)
- 随机选取一个正整数e,且满足1 < e < φ(n),并且gcd(e,φ(n)) = 1 (e公开)
- 根据 e ∗ d = 1 m o d φ ( n ) e*d=1\;mod\;φ(n) e∗d=1modφ(n),求出d (d保密)
- 加密运算 C = M e m o d n C=M^e\;mod\;n C=Memodn 解密运算 M = C d m o d n M=C^d\;mod\;n M=Cdmodn
RSA密码公开的加密钥 K e K_e Ke=<n,e>,保密的解密钥 K d K_d Kd=<p,q,d,φ(n)>
-
RSA密码的特点
- RSA算法具有加解密算法的可逆性,加密和解密运算可交换,可同时确保数据的秘密性和数据的真实性
- RSA密码的核心运算是模幂运算,实现效率高
-
RSA密码的安全性
- 保证选取的素数p和q足够大,使得给定n的情况下分解n在计算上不可行,应采用足够大的整数n,一般n至少取1024位,通常是2048位
0x02.3 混合加密体制
混合加密体制:同时使用对称密码和非对称密码的体制。
对称加密的一个很大问题就是通信双方如何将密钥传输给对方,安全起见一般采取带外传输,也就是说如果加密通信是在网络,那么密钥的传输需要通过其他途径,如短信,即使如此,也很难保证密钥传输的安全性。再就是为了安全密钥也应该定期更换,这更加重了密钥分发和管理的难度。
而非对称加密加解最大的优点是事先不需要传输密钥,但速度慢。
因此实际应用中,经常采取混合密码体制。
假设Harden与James要实现保密通信,工作过程如下:
1、消息发送者Harden用对称密钥把需要发送的消息加密
2、Harden用James的公钥将对称密钥加密,形成数字信封
3、Harden将加密消息和数字信封一起传送给James
4、James收到Harden的加密消息和数字信封后,先用自己的私钥将数字信封解开获取对称密钥
5、James使用对称密钥把加密消息解开
0x02.4 国产商业密码算法
0x03 散列函数与消息摘要
散列函数也称为Hash函数,它能够对不同长度的输入信息,产生固定长度的输出。
固定长度的输出称为原消息的散列或者消息摘要,消息摘要长度固定且比原始信息小得多,一般情况下,消息摘要是不可逆的,即从消息摘要无法还原原文。
令h表示Hash函数,h满足下列条件:
1、输入长度是任意的,输出是固定的
2、对每一个给定的h和M,计算h(M)是容易的
3、给定h,找到两个不同的M1、M2,使得h(M1)=h(M2)在计算上不可行
常见的散列算法:、MD5、SHA、SM3、SHA-1
算法名称 | 算法特征描述 |
---|---|
MD5算法 | 输入512位,产生128位消息摘要,常用于文件完整性检查 |
SHA算法 | 输入512位,产生160位消息摘要,比MD5更安全,已有版本SHA-2,SHA-3 |
SM3国产算法 | 输入512位,产生256位消息摘要 |
0x04 数字签名
数字签名是指发送方以电子形式签名一个消息或文件,签名后的消息或文件能在网络中传输,并表示签名人对该消息或文件的内容负有责任。
数字签名综合使用了消息摘要和非对称加密技术。
数字签名满足以下三个条件:
1、不可抵赖。签名者事后不能否认自己的签名
2、真实性。接收者能验证签名,其他任何人都不能伪造签名
3、可鉴别性。当双方关于签名真伪发生争执,第三方能解决双方的争执
假设Harden需要签名发送一份电子合同文件给James。
Harden数字签名的示意图:
1、Harden使用Hash函数将电子合同文件生成一个消息摘要
2、Harden使用自己的私钥,将消息摘要加密形成一个数字签名
3、Harden把电子合同文件和数字签名一同发送给James
James收到Harden发送的电子合同文件及数字签名后,验证数字签名过程如下:
1、James使用与Harden相同的Hash函数,计算收到的电子合同的消息摘要
2、James使用Harden的公钥,解密来自Harden的数字签名,恢复Harden的消息摘要
3、James比较自己计算得到的消息摘要和恢复Harden的消息摘要异同,若摘要相同,则说明电子合同文件来自Harden,否则表明电子合同文件已被篡改
0x05 数字证书
数字证书也称为公钥证书,是一种权威的电子文档,由权威公正的第三方认证机构(CA)签发,广泛用于涉及需要身份认证和数据安全的领域。
简单来说,数字证书可以类比为我们的身份证号,而第三方认证机构(CA)则等同于公an局。
我们都知道入住酒店的时候,必须要出示本人身份证给前台工作人员,而工作人员会将身份证与酒店系统内存储的公an局的身份证信息进行对比,一致即可入住。在网络中,数字证书的作用就等同于身份证。
数字证书的格式:
最简单的可以是:公钥、名称和证书授权中心的数字签名
目前 X.509 是一种通用的证书格式,它的第三个版本目前使用广泛,证书内容包括:版本、序列号、签名算法标识、签发者、有效期、主体、主体公开密钥、CA的数字签名、可选型等等
数字证书种类:
1、服务器证书:证明服务器的身份和进行通信加密,客户端可以与服务器端建立SSL连接,然后通信数据都会被加密。
2、电子邮件证书:证明电子邮件发件人的真实性,也可发送加密邮件,只有接收方才能打得开。
3、客户端证书:主要用于身份验证和数字签名,安全的客户端证书经常存储的专门的USBKey中,使用的时候需要输入保护密码,以防被导出和复制,如指纹识别、语音播报、带显示器的USBKey等等。