使用Pycryptodome

时间:2019-02-07 13:47:10

标签: encryption python-3.7 pycryptodome pkcs#1 public-key-exchange

我正在编写一个模块,该模块使用ZeroMQ套接字和Pycryptodome创建一个安全的通信通道。

客户端和服务器之间的初始握手将遵循以下步骤:

  1. 双方将彼此的公开 RSA密钥相互发送。
  2. 服务器生成AES会话密钥和该密钥的签名。
  3. 服务器将会话密钥和签名RSA加密,然后再将其发送给客户端。 (*)
  4. 客户端验证签名并存储会话密钥。
  5. 客户端生成令牌,生成其签名,然后将两个AES加密的令牌发送到服务器。
  6. 服务器验证签名并回显令牌。
  7. 如果收到的令牌与发送的令牌匹配,则表示握手成功。

我在this thread上发现,最好先对邮件签名然后再加密,而不是先加密再签名。

问题在于,对于2048位RSA密钥,签名的长度为256个字节。同一密钥的最大加密大小为190字节。这意味着我无法按照线程中的建议对签名进行加密。

我应该用AES会话密钥加密签名吗?我应该采取其他方式吗?

我知道有“标准化的”密钥交换协议(例如ECDH),但在Pycryptodome中尚不可用。

Cipher: RSA PKCS1 OAEP
Signing : PKCS1 PSS w/ BLAKE2b hash

0 个答案:

没有答案