我目前正在研究OpenSSL及其API,我对密码学不太熟悉。所以我看了一下信封的非对称加密上的例子。它说消息是用会话密钥对称加密的,然后会话密钥用实际的非对称密钥加密。然后,我的问题是如何生成会话密钥,以及如何在其他编程语言中搜索这个概念。
发布于 2019-12-11 21:26:12
会话密钥可以由Alice使用CSPRNG生成。Alice和Bob已经有了不变的静态密钥对。Alice和Bob将创建短暂的密钥对,这些密钥对是新生成的每个会话。
然后,Alice用她的静态私钥签署她的临时公钥,并将其发送给Bob --这个公钥不需要以任何方式加密,因为它是公钥。Bob收到此消息,并使用Alice的静态公钥验证签名。鲍勃通过同样的协议,这样爱丽丝就可以得到他短暂的公钥。
现在有两种方法可以实现-- KEX (密钥交换)或KEM (密钥封装机制)。
对于KEX,Alice和Bob都使用DH(E)或ECCDH(E)将自己的临时私钥与其他公钥组合在一起。这使得它们都有相同的共享秘密,可以通过HKDF来创建一个格式正确的所需长度的对称密钥。
对于KEM,Alice将创建一个所需长度的对称密钥,用她的静态私钥签名,然后用Bob的临时公钥对其进行加密,并将其发送给Bob,Bob可以解密和验证它们的密钥。必须用RSA来解决这个问题。
对于编程语言,通常有一个用于伪随机数(PRNG)和密码安全伪随机数生成器(CSPRNG)的模块。在Python中,随机模块是PRNG,秘密模块或os.urandom是CSPRNG。对于密码学,有一个PyCryptodome或密码学等。
https://crypto.stackexchange.com/questions/76362
复制相似问题