曲线类型:
密钥格式:
公钥显示格式:
私钥显示格式:
明文格式:
密文格式:
临时公钥:
PBE
基于口令的密码(Password Based Encryption, PBE)就是一种根据口令生成密钥并用该密钥进行加密的方法。其中加密和解密使用同一个密钥。

虽然这种方法的名字叫 “密钥交换”,但实际上双方并没有真正交换密钥,而是通过计算生成出了一个相同的共享秘钥。因此,这种方法也称为 Diffie-Hellman 密钥协商(Diffie-Hellmankey agreement)

PBE 加密
PBE 的加密过程如下图所示。

生成 KEK
首先,伪随机数生成器会生成一个被称为盐的随机数。将盐和鲍勃输入的口令一起输人单向散列函数,得到的散列值就是用来加密密钥的密钥(KEK)。

生成会话密钥并加密
接下来,我们使用伪随机数生成器生成会话密钥。会话密钥是用来加密消息的密钥(CEK)。

会话密钥需要用刚才步骤(1)中生成的 KEK 进行加密,并和盐一起保存在安全的地方。会话密钥加密之后,KEK 就会被丢弃,因为 KEK 没有必要保存下来,只要通过盐和口令就可以重建 KEK。

加密消息
最后,我们用步骤(2)中生成的会话密钥对消息进行加密。PBE 加密后所产生的输出包括下列 3 种。


用 KEK 加密的会话密钥
用会话密钥加密的消息
其中“盐”和“用 KEK 加密的会话密钥”需要保存在安全的地方。

PBE 解密
PBE 的解密过程如下图所示。

重建 KEK
首先我们将之前保存下来的盐,和鲍勃输人的口令一起输人单向散列函数。这个计算过程和生成 KEK 时的计算过程是一样的,因此所得到的散列值就是 KEK。

解密会话密钥
然后,我们获取之前保存下来的“用KEK 加密的会话密钥”,用步骤(1)中恢复的 KEK 进行解密。这一步我们可以得到会话密钥。

解密消息
最后,我们用步骤(2)中重建的会话密钥对加密的消息进行解密。

将上述解密过程与“PBE 加密”的过程对比一下就会发现,在 PBE 加密过程中使用了两次伪随机数生成器,而在 PBE 解密过程中却一次都没有使用。

曲线类型
  • p192 (NIST P-192): 192位素数域椭圆曲线,由美国国家标准与技术研究院(NIST)推荐,安全性较低,不推荐用于新系统。
  • p224 (NIST P-224): 224位素数域椭圆曲线,NIST推荐,安全性比P-192高。
  • p256 (NIST P-256): 256位素数域椭圆曲线,NIST推荐,广泛应用于TLS等协议,提供良好的安全性和性能平衡。
  • p384 (NIST P-384): 384位素数域椭圆曲线,NIST推荐,提供更高安全性。
  • p521 (NIST P-521): 521位素数域椭圆曲线,NIST推荐的最高安全级别曲线,计算开销较大。
  • curve25519 (X25519): 设计用于高效的密钥交换,广泛应用于现代加密协议,提供良好的性能和安全性,在这里也可用于 ECIES。
  • secp256k1 (Bitcoin curve): 256位Koblitz曲线,比特币和其他加密货币使用,非NIST标准,但在区块链领域广泛应用。

密钥格式
  • PKCS#8: 更通用,支持多种算法(如RSA、DSA、EC等),结构更灵活,可以包含额外信息。
  • RAM: 原始的非对称密钥格式,通常是直接的密钥数据,没有额外的封装或格式化,可能更加紧凑,但缺乏额外的元数据信息,在一些特定的应用场景中使用,但不如标准格式普遍。
  • DEM: 不是一种密钥格式,而是一种加密机制,通常用于混合加密系统中,使用对称加密来加密实际数据,然后用非对称加密来保护对称密钥,结合了对称加密的效率和非对称加密的安全性。

使用随机填充
在 RSA 的实际使用中,通常会在加密前会向明文中添加一些随机数据,使得每次加密的输入都不同,从而产生不同的密文。目的是增加加密的安全性,防止各种潜在的攻击,如重放攻击、选择明文攻击等。虽然每次加密结果看起来不同, 但使用相同的私钥仍然可以正确解密。但在某些特定情境下我们又需要不做随机的填充,因此在勾选上“使用随机填充”后会在加密过程中添加随机数,反之亦然。
+