- 密码学教程
- 密码学 - 首页
- 密码学 - 起源
- 密码学 - 历史
- 密码学 - 原理
- 密码学 - 应用
- 密码学 - 优点与缺点
- 密码学 - 现代
- 密码学 - 传统密码
- 密码学 - 加密的需求
- 密码学 - 双重强度加密
- 密码系统
- 密码系统
- 密码系统 - 组件
- 密码系统的攻击
- 密码系统 - 彩虹表攻击
- 密码系统 - 字典攻击
- 密码系统 - 暴力攻击
- 密码系统 - 密码分析技术
- 密码学的类型
- 密码系统 - 类型
- 公钥加密
- 现代对称密钥加密
- 密码学哈希函数
- 密钥管理
- 密码系统 - 密钥生成
- 密码系统 - 密钥存储
- 密码系统 - 密钥分发
- 密码系统 - 密钥吊销
- 分组密码
- 密码系统 - 流密码
- 密码学 - 分组密码
- 密码学 - Feistel 分组密码
- 分组密码的操作模式
- 分组密码的操作模式
- 电子密码本 (ECB) 模式
- 密码分组链接 (CBC) 模式
- 密码反馈 (CFB) 模式
- 输出反馈 (OFB) 模式
- 计数器 (CTR) 模式
- 经典密码
- 密码学 - 反向密码
- 密码学 - 凯撒密码
- 密码学 - ROT13 算法
- 密码学 - 换位密码
- 密码学 - 加密换位密码
- 密码学 - 解密换位密码
- 密码学 - 乘法密码
- 密码学 - 仿射密码
- 密码学 - 简单替换密码
- 密码学 - 简单替换密码的加密
- 密码学 - 简单替换密码的解密
- 密码学 - 维吉尼亚密码
- 密码学 - 维吉尼亚密码的实现
- 现代密码
- Base64 编码与解码
- 密码学 - XOR 加密
- 替换技术
- 密码学 - 单表代换密码
- 密码学 - 单表代换密码的破解
- 密码学 - 多表代换密码
- 密码学 - Playfair 密码
- 密码学 - 希尔密码
- 多表代换密码
- 密码学 - 一次性密码本密码
- 一次性密码本密码的实现
- 密码学 - 换位技术
- 密码学 - 栅栏密码
- 密码学 - 列置换
- 密码学 - 隐写术
- 对称算法
- 密码学 - 数据加密
- 密码学 - 加密算法
- 密码学 - 数据加密标准
- 密码学 - 三重 DES
- 密码学 - 双重 DES
- 高级加密标准
- 密码学 - AES 结构
- 密码学 - AES 变换函数
- 密码学 - 字节替换变换
- 密码学 - 行移位变换
- 密码学 - 列混淆变换
- 密码学 - 轮密钥加变换
- 密码学 - AES 密钥扩展算法
- 密码学 - Blowfish 算法
- 密码学 - SHA 算法
- 密码学 - RC4 算法
- 密码学 - Camellia 加密算法
- 密码学 - ChaCha20 加密算法
- 密码学 - CAST5 加密算法
- 密码学 - SEED 加密算法
- 密码学 - SM4 加密算法
- IDEA - 国际数据加密算法
- 公钥(非对称)密码学算法
- 密码学 - RSA 算法
- 密码学 - RSA 加密
- 密码学 - RSA 解密
- 密码学 - 创建 RSA 密钥
- 密码学 - 破解 RSA 密码
- 密码学 - ECDSA 算法
- 密码学 - DSA 算法
- 密码学 - Diffie-Hellman 算法
- 密码学中的数据完整性
- 密码学中的数据完整性
- 消息认证
- 密码学数字签名
- 公钥基础设施
- 散列
- MD5(消息摘要算法 5)
- SHA-1(安全散列算法 1)
- SHA-256(安全散列算法 256 位)
- SHA-512(安全散列算法 512 位)
- SHA-3(安全散列算法 3)
- 散列密码
- Bcrypt 散列模块
- 现代密码学
- 量子密码学
- 后量子密码学
- 密码学协议
- 密码学 - SSL/TLS 协议
- 密码学 - SSH 协议
- 密码学 - IPsec 协议
- 密码学 - PGP 协议
- 图像与文件加密
- 密码学 - 图像
- 密码学 - 文件
- 隐写术 - 图像
- 文件加密和解密
- 密码学 - 文件的加密
- 密码学 - 文件的解密
- 物联网中的密码学
- 物联网安全挑战、威胁和攻击
- 物联网安全的加密技术
- 物联网设备的通信协议
- 常用加密技术
- 自定义构建加密算法(混合加密)
- 云加密
- 量子密码学
- 密码学中的图像隐写术
- DNA 密码学
- 密码学中的一次性密码 (OTP) 算法
- 区别
- 密码学 - MD5 与 SHA1
- 密码学 - RSA 与 DSA
- 密码学 - RSA 与 Diffie-Hellman
- 密码学与密码学
- 密码学 - 密码学与密码分析
- 密码学 - 经典与量子
- 密码学与隐写术
- 密码学与加密
- 密码学与网络安全
- 密码学 - 流密码与分组密码
- 密码学 - AES 与 DES 密码
- 密码学 - 对称与非对称
- 密码学有用资源
- 密码学 - 快速指南
- 密码学 - 讨论
公钥加密
公钥加密
与对称密钥加密不同,我们没有发现公钥加密的历史应用。这是一个相对较新的概念。
对称加密非常适合政府、军事和大型金融公司等组织,这些组织参与了机密通信。
在过去几十年中,随着越来越多的不安全的计算机网络的普及,人们真正感受到了大规模使用加密的需求。由于对称密钥在密钥管理方面面临的挑战,发现它不切实际。这催生了公钥密码系统。
加密和解密的过程在下面的插图中描述:
公钥加密方案最重要的属性是:
加密和解密使用不同的密钥。这是使该方案与对称加密方案不同的属性。
每个接收者都拥有一个唯一的解密密钥,通常称为其私钥。
接收者需要发布一个加密密钥,称为其公钥。
此方案需要确保公钥的真实性,以避免对手冒充接收者。通常,这种类型的密码系统涉及可信的第三方,该第三方证明特定的公钥仅属于特定的人或实体。
加密算法足够复杂,可以禁止攻击者根据密文和加密(公钥)推断明文。
尽管私钥和公钥在数学上相关,但从公钥计算私钥是不可行的。事实上,任何公钥密码系统中的智能部分都在于设计两个密钥之间的关系。
公钥加密方案有三种类型。我们在以下部分讨论它们:
RSA 密码系统
该密码系统是最初的系统之一。即使在今天,它仍然是最常用的密码系统。该系统由三位学者罗恩·莱维斯特、阿迪·萨莫尔和伦纳德·阿德曼发明,因此被称为 RSA 密码系统。
我们将看到 RSA 密码系统的两个方面,首先是密钥对的生成,其次是加密解密算法。
RSA 密钥对的生成
每个希望使用加密参与通信的人或一方都需要生成一对密钥,即公钥和私钥。密钥生成过程中遵循的过程如下所述:
生成 RSA 模数 (n)
选择两个大素数 p 和 q。
计算 n=p*q。对于强大的不可破解加密,让 n 为一个大数,通常至少为 512 位。
查找导出数字 (e)
数字e必须大于 1 且小于 (p − 1)(q − 1)。
e 和 (p − 1)(q − 1) 之间除了 1 之外没有公因子。换句话说,两个数字 e 和 (p – 1)(q – 1) 是互质的。
形成公钥
数字对 (n, e) 形成 RSA 公钥,并公开。
有趣的是,虽然 n 是公钥的一部分,但难以对大素数进行因式分解确保攻击者无法在有限时间内找到用于获得 n 的两个素数 (p & q)。这是 RSA 的优势。
生成私钥
私钥 d 由 p、q 和 e 计算得出。对于给定的 n 和 e,存在唯一的数字 d。
数字 d 是 e 模 (p - 1)(q – 1) 的逆。这意味着 d 是小于 (p - 1)(q - 1) 的数字,当乘以 e 时,它等于 1 模 (p - 1)(q - 1)。
这种关系用数学表示如下:
ed = 1 mod (p − 1)(q − 1)
扩展欧几里得算法以 p、q 和 e 作为输入,并以 d 作为输出。
示例
下面给出了生成 RSA 密钥对的示例。(为了便于理解,这里取的素数 p & q 是小值。实际上,这些值非常高)。
令两个素数为 p = 7 和 q = 13。因此,模数 n = pq = 7 x 13 = 91。
选择 e = 5,这是一个有效的选择,因为除了 1 之外,5 和 (p − 1)(q − 1) = 6 × 12 = 72 没有公因子。
数字对 (n, e) = (91, 5) 形成公钥,可以提供给任何我们希望能够向我们发送加密消息的人。
将 p = 7、q = 13 和 e = 5 输入扩展欧几里得算法。输出将为 d = 29。
通过计算检查计算出的 d 是否正确:
de = 29 × 5 = 145 = 1 mod 72
因此,公钥为 (91, 5),私钥为 (91, 29)。
加密和解密
密钥对生成后,加密和解密过程相对简单且计算量少。
有趣的是,RSA 不像对称密钥加密那样直接对位串进行操作。它对模 n 的数字进行操作。因此,有必要将明文表示为一系列小于 n 的数字。
RSA 加密
假设发送方希望向某个人的公钥为 (n, e) 的人发送一些文本消息。
然后,发送方将明文表示为一系列小于 n 的数字。
要加密第一个明文 P,它是模 n 的一个数字。加密过程是一个简单的数学步骤,如下所示:
C = Pe mod n
换句话说,密文 C 等于明文 P 自乘 e 次,然后模 n。这意味着 C 也是小于 n 的数字。
回到我们的密钥生成示例,明文 P = 10,我们得到密文 C:
C = 105 mod 91
RSA 解密
RSA 的解密过程也非常简单。假设公钥对 (n, e) 的接收者已收到密文 C。
接收者将 C 提升到其私钥 d 的幂。模 n 的结果将是明文 P。
Plaintext = Cd mod n
再次回到我们的数值示例,密文 C = 82 将使用私钥 29 解密为数字 10:
Plaintext = 8229 mod 91 = 10
RSA 分析
RSA 的安全性取决于两个独立函数的强度。RSA 密码系统是最流行的公钥密码系统,其强度基于对非常大的数字进行因式分解的实际困难。
加密函数 - 它被认为是一个将明文转换为密文的单向函数,只有知道私钥d才能将其逆转。
密钥生成 - 从RSA公钥确定私钥的难度等同于对模数n进行因式分解。因此,攻击者无法利用RSA公钥的知识来确定RSA私钥,除非他能对n进行因式分解。它也是一个单向函数,从p和q值到模数n很容易,但反过来就不可能了。
如果这两个函数中的任何一个被证明不是单向的,那么RSA就会被破解。事实上,如果开发出一种有效的因式分解技术,那么RSA将不再安全。
如果数字p和q不是大素数,和/或选择的公钥e是一个小数字,那么RSA加密的强度会大幅下降,容易受到攻击。
ElGamal密码系统
除了RSA之外,还有其他提出的公钥密码系统。它们中的许多都基于离散对数问题的不同版本。
ElGamal密码系统,称为椭圆曲线变体,基于离散对数问题。它的强度源于这样一个假设,即对于给定的数字,在实际时间范围内无法找到离散对数,而幂运算的反运算可以有效地计算。
让我们来看一下ElGamal的一个简单版本,它使用模p的数字。在椭圆曲线变体的情况下,它是基于完全不同的数字系统。
ElGamal密钥对生成
ElGamal密码系统的每个用户都通过以下方式生成密钥对:
选择一个大素数p。通常选择一个长度为1024到2048位的素数。
选择一个生成元g。
这个数字必须在1和p-1之间,但不能是任意数字。
它是模p整数乘法群的生成元。这意味着对于每个与p互质的整数m,都存在一个整数k,使得gk=a mod n。
例如,3是群5(Z5 = {1, 2, 3, 4})的生成元。
N | 3n | 3n mod 5 |
---|---|---|
1 | 3 | 3 |
2 | 9 | 4 |
3 | 27 | 2 |
4 | 81 | 1 |
选择私钥。私钥x是任何大于1且小于p-1的数字。
计算公钥的一部分。值y根据参数p、g和私钥x计算如下:
y = gx mod p
获取公钥。ElGamal公钥由三个参数(p、g、y)组成。
例如,假设p = 17且g = 6(可以确认6是群Z17的生成元)。私钥x可以是大于1且小于71的任何数字,因此我们选择x = 5。然后计算值y如下:
y = 65 mod 17 = 7
因此私钥是62,公钥是(17,6,7)。
加密和解密
与RSA等效的过程相比,ElGamal密钥对的生成相对简单。但加密和解密比RSA稍微复杂一些。
ElGamal加密
假设发送方希望将明文发送给某人,其ElGamal公钥为(p、g、y),则:
发送方将明文表示为一系列模p的数字。
要加密表示为模p数字的第一个明文P。获取密文C的加密过程如下:
- 随机生成一个数字k;
- 计算两个值C1和C2,其中:
C1 = gk mod p C2 = (P*yk) mod p
将密文C发送,密文C由两个单独的值(C1,C2)组成,一起发送。
参考上面给出的ElGamal密钥生成示例,明文P = 13加密如下:
- 随机生成一个数字,比如k = 10
- 计算两个值C1和C2,其中:
C1 = 610 mod 17 C2 = (13*710) mod 17 = 9
发送密文C = (C1,C2) = (15,9)。
ElGamal解密
要使用私钥x解密密文(C1,C2),需要执行以下两个步骤:
计算(C1)x模p的模逆,即(C1)-x,通常称为解密因子。
使用以下公式获取明文:
C2 × (C1)-x mod p = Plaintext
在我们的示例中,要使用私钥x = 5解密密文C = (C1,C2) = (15,9),解密因子为
15-5 mod 17 = 9
提取明文P = (9 × 9) mod 17 = 13。
ElGamal分析
在ElGamal系统中,每个用户都有一个私钥x,并且有三个组成部分的公钥:素模p、生成元g和公钥Y = gx mod p。ElGamal的强度基于离散对数问题的难度。
安全密钥大小通常> 1024位。如今甚至使用2048位长的密钥。在处理速度方面,Elgamal相当慢,它主要用于密钥认证协议。由于更高的处理效率,ElGamal的椭圆曲线变体正变得越来越受欢迎。
椭圆曲线密码学(ECC)
椭圆曲线密码学(ECC)是一个术语,用于描述一套密码工具和协议,其安全性基于离散对数问题的特殊版本。它不使用模p的数字。
ECC基于与称为椭圆曲线的数学对象相关联的一组数字。这些数字有加法和计算倍数的规则,就像模p的数字一样。
ECC包含许多最初为模数设计的密码方案的变体,例如ElGamal加密和数字签名算法。
人们认为,当应用于椭圆曲线上的点时,离散对数问题要困难得多。这促使我们从模p的数字切换到椭圆曲线上的点。此外,如果我们使用基于椭圆曲线的变体,则可以使用更短的密钥获得等效的安全级别。
更短的密钥带来两个好处:
- 密钥管理简便
- 计算效率高
这些优势使基于椭圆曲线的加密方案变体对于计算资源受限的应用极具吸引力。
RSA和ElGamal方案 - 对比
让我们简要比较一下RSA和ElGamal方案在各个方面的差异。
RSA | ElGamal |
---|---|
它在加密方面效率更高。 | 它在解密方面效率更高。 |
它在解密方面效率较低。 | 它在解密方面效率更高。 |
对于特定的安全级别,RSA需要较长的密钥。 | 对于相同的安全级别,需要非常短的密钥。 |
它被广泛接受和使用。 | 它比较新,在市场上并不流行。 |