0

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

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

  1. 双方将他们的公共RSA 密钥发送给对方。
  2. 服务器生成 AES 会话密钥和该密钥的签名。
  3. 服务器在将会话密钥和签名发送给客户端之前对其进行 RSA 加密。(*)
  4. 客户端验证签名并存储会话密钥。
  5. 客户端生成一个令牌,生成它的签名并将两个 AES 加密的文件发送到服务器。
  6. 服务器验证签名并回显令牌。
  7. 如果收到的令牌与发送的令牌匹配,则认为握手成功。

我在这个线程上发现,最好先对消息签名然后加密,而不是先加密然后签名。

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

我应该使用 AES 会话密钥加密签名吗?我应该采取另一种方式吗?

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

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

0 回答 0