公钥密码学
1 非对称加密
1.1 从对称到非对称
- 几千年来,几乎所有的密码体制都是基于替换和置换这些初等方法。
- 这些方法在 电子机械转轮机(恩尼格玛) 和电子计算机(DES) 中发展到了巅峰。
- 公钥(非对称)密码学的出现和发展是密码学史上最大(唯一)的一次革命。
- 公钥密码学的概念是为了解决传统密码中最困难的一个问题而提出的:密钥的安全分配问题
- 1976年Diffie和Hellman针对上面的问题提出了单向函数加密方法,这种方法和之前数千年来密码学中的所有方法有根本的区别,即公钥密码体制。
- 非对称加密算法使用完全不同但又是完全匹配的一对钥匙:公钥和私钥
- **公钥:**公开的,任何人都知道
- **私钥:**只有自己知道
- 算法:一对密钥中用公钥加密的结果可以用私钥解密,反过来用私钥加密的结果也可以用公钥解密。
1.2 公钥加密的使用方法
- Alice和Bob互发(公布)各自的公钥,私钥只有自己知道
- Alice用对称密钥加密信件,再用Bob的公钥加密对称密钥
- Bob用自己的私钥解密对称密钥,再用对称密钥解密信件
1.3 两种密码体制的比较
公钥密码学和以前的密码学完全不同:
- 对称密码学基于替换和置换(混淆和扩散),运算速度快
- 公钥密码学基于数学理论(单向函数),运算速度慢
- 对称密码学使用单密钥,需要额外秘密信道协商密钥
- 公钥密码学使用两个独立的密钥,不需要秘密信道协商密钥
1.4 单向函数
- 两个集合X、Y,F是两个集合之间的映射,有Y= F(X),则:
1)已知×求丫容易
2)已知Y反推×困难 - 例如: y =f(x)= a*
1)求常数a的x次方,简单来说做x次乘法即可得到y,如果采用二分法,计算的复杂度会更低。
2)反过来,如果已知y求x,难度要比做x次乘法大很多。 - 如果由x计算a用时1秒,那么从a反推x需要的时间约10"秒
1.5 RSA
- RSA算法1977年由MIT三位密码学家Rivest、Shamirh和Adleman发明,是迄今为止最为成熟完善的公钥密码体制。
- RSA算法能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
- RSA算法基于数论构造,具体难题是大素数乘积的因子分解。
- 将两个大素数相乘十分容易,但对其乘积进行因式分解却极其困难,因此可以将乘积作为加密密钥公开。
1、公钥和私钥的产生 - 任意选择两个大的质数(素数)p和q,p不等于q,计算N=pq
- 根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)
- 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
- 用以下这个公式计算d: d×e= 1(mod (p-1)(q-1))
- 将p和q销毁后,(N,e)是公钥,(N,d)是私钥
2、加密消息 - 假设Bob想给Alice送一个消息,他知道Alice产生的公钥N和e
- 将原始信息分为多段,每一段(假定为n)分别用以下公式计算出c:
ne = c (mod N)
将多个n计算出的多个c串在一起,就是密文,发送即可。
3、解秘消息 - Alice得到Bob的消息c后就可以利用她的密钥(N,d)来解码。她可以用以下这个公式来将c转换为n:
- 得到n后,她可以将原来的信息m重新复原。
4、RSA应用
加密少量数据: - 比起DES和其它对称算法来说,RSA的运算速度要慢得多。
- 实际使用时,RSA算法不用来加密消息,而是用来加密传输密钥,加密消息用对称算法,如DES。
实现数字签名: - 将RSA算法反向使用(私钥加密公钥解密),对消息摘要加密,可以实现数字签名的功能。
- 数字签名可以防止数据篡改、数据抵赖和数据伪造发生。
2 消息摘要与数字签名
2.1消息摘要
- 消息摘要算法是密码学算法中非常重要的一个分支,它用于生成数据的"指纹",具有不可逆性。消息摘要算法也被称为哈希(Hash)算法或散列算法。
- 消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密。著名的摘要算法有MD5算法和SHA-1算法及其大量的变体。
2.2 MD5算法
(1)MD5 = Message Digest Algorithm V5
- 中文名为:消息摘要算法第五版
- 由MD2、MD3、MD4发展而来
- 是最常用的一种散列函数,用以提供消息完整性保护
- 无法从结果还原出原始信息
(2)算法的输入输出 - 输入:任何长度的字节流
- 输出:128位二进制(常以32位十六进制字符显示)
(3)关键点: - 输入略微变化,输出即发生极大变化*(雪崩效应)*
(4)MD5算法 - 加密过程不需要密钥,加密后的数据无法被解密。
- 只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
- 算法以512位为一个分组来处理输入的信息,每一分组又被划分为16个32位子分组,经过了一系列复杂的数据填充、分组循环和换位拼接处理后,算法的输出四个32位分组,这四个32位分组级联后生成一个128位(16字节)的散列值。
2.3 消息摘要算法的应用
- 一致性检验
- 安全访问认证
2.4 数字签名
- 数字签名是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串类似于写在纸上的物理签名,用于鉴别数字信息的真伪,同时也是对信息的发送者身份真实性的一个有效证明。
- 数字签名是公钥加密技术与消息摘要技术的结合应用。
数字签名的过程 - Alice生成一对密钥并向Bob发送公钥
- Alice计算要发送信息的摘要
- Alice使用自己的私钥加密摘要
- Alice将使用私钥加密后的摘要附在消息后面发送给Bob
- Bob收到消息后首先计算消息的摘要
- 接着Bob对Alice发来的加密摘要解密
- 比对两个摘要是否相同
数字签名特点 - 签名是可信的
- 签名是不可伪造的
- 文件是不可变的
- 签名是不可抵赖的
3 公钥加密实练
3.1 加密工具使用
- 运行RSA-Tool,点击Start按钮,滑动鼠标生成一个随机数。点击Generate生成一对大质数p、q及N=p×q。
- 自己选定一个可用的整数e(可使用默认的10001,也可以使用其他的)。点击Calc.D生成d。
- 将公钥(N,e)发送给小伙伴,小伙伴利用该公钥进行消息加密并发回密文。利用私钥对小伙伴发来的密文进行解密。(可打开两个窗口进行操作,注意按钮不可点击时需要点generate或encript激活test和decript按钮)
3.2 RSA原理
- 调试运行RSA.cpp,选择两个不同的素数。
- 根据生成的d和e验证公式
d×e ≡ 1 (mod (p-1)(q-1))
- 验证密钥是否有效(加密解密的计算过程和结果是否正确)
3.3 安全密钥分配
-
小A同学准备一些文字,选择一个密钥利用DES-Tool对文字进行加密得到密文1。
-
小B同学运行RSA-Tool,生成公钥和私钥,将公钥发送给小A同学,私钥自己留存。
-
小A同学利用小B同学的公钥对加密信件时使用的对称密钥进行加密,得到密文2。将密文1和密文2一同发送给小B同学。
-
小B同学首先用自己的私钥解密密文2,接着利用解密密文2得到的对称密钥在DES-Tool中解密密文1,得到原始文字内容。
3.4 数字签名
- 小A同学运行Hash-Tool,生成某文件的MD5值。
- 小A同学利用RSA Tool对生成的MD5值进行私钥加密(反向使用RSA算法,Generate生成密钥后将D和E交换位置,再用test进行加密)。
- 小A同学将公钥、文件和加密后的MD5一起发送给小B同学,由小B同学验证数字签名的正确性(软件中先激活test按钮,再填写公钥进行解密)。