RSA 签名创建和传输

RSA signature creation and transfer

出于教育目的,我正在尝试在 python3.6 中编写 RSA 代码。

消息加密部分完成。我现在需要为消息创建一个数字签名,据我所知,这只是一个使用发件人的私钥加密的大整数(如果我错了请纠正我)。用于它的整数应该是多大?加密消息和签名是成对传输还是应该以某种方式连接成一个整数?

签名邮件未加密。当您签名时,它不会或更确切地说不应更改。相反,它是散列的,散列是用私钥“加密”的(这实际上是解密过程,但应用了填充)。

接收者需要四样东西:

  1. Public键
  2. 原始消息
  3. 签名
  4. 了解所有这些是如何表示和连接的:public 密钥的编码、消息的编码、签名的编码和实际使用的签名方案(RSA/DSA/EdDSA/SPHINCS/etc。一些特定的哈希函数和填充方案)

从数学上讲,RSA 签名是一个单一的大整数,但是当您要传输它时,您需要以某种方式对其进行编码。您可以在 RFC 8017 中找到完整的规范。如果你想使用 RSA 进行签名,你应该使用 RSASSA-PSS 或简单的 PSS,它指定了一个被认为是安全的填充方案。如果你想在生产中使用它,请不要自己实现它。