RSA 签名创建和传输
RSA signature creation and transfer
出于教育目的,我正在尝试在 python3.6 中编写 RSA 代码。
消息加密部分完成。我现在需要为消息创建一个数字签名,据我所知,这只是一个使用发件人的私钥加密的大整数(如果我错了请纠正我)。用于它的整数应该是多大?加密消息和签名是成对传输还是应该以某种方式连接成一个整数?
签名邮件未加密。当您签名时,它不会或更确切地说不应更改。相反,它是散列的,散列是用私钥“加密”的(这实际上是解密过程,但应用了填充)。
接收者需要四样东西:
- Public键
- 原始消息
- 签名
- 了解所有这些是如何表示和连接的:public 密钥的编码、消息的编码、签名的编码和实际使用的签名方案(RSA/DSA/EdDSA/SPHINCS/etc。一些特定的哈希函数和填充方案)
从数学上讲,RSA 签名是一个单一的大整数,但是当您要传输它时,您需要以某种方式对其进行编码。您可以在 RFC 8017 中找到完整的规范。如果你想使用 RSA 进行签名,你应该使用 RSASSA-PSS 或简单的 PSS,它指定了一个被认为是安全的填充方案。如果你想在生产中使用它,请不要自己实现它。
出于教育目的,我正在尝试在 python3.6 中编写 RSA 代码。
消息加密部分完成。我现在需要为消息创建一个数字签名,据我所知,这只是一个使用发件人的私钥加密的大整数(如果我错了请纠正我)。用于它的整数应该是多大?加密消息和签名是成对传输还是应该以某种方式连接成一个整数?
签名邮件未加密。当您签名时,它不会或更确切地说不应更改。相反,它是散列的,散列是用私钥“加密”的(这实际上是解密过程,但应用了填充)。
接收者需要四样东西:
- Public键
- 原始消息
- 签名
- 了解所有这些是如何表示和连接的:public 密钥的编码、消息的编码、签名的编码和实际使用的签名方案(RSA/DSA/EdDSA/SPHINCS/etc。一些特定的哈希函数和填充方案)
从数学上讲,RSA 签名是一个单一的大整数,但是当您要传输它时,您需要以某种方式对其进行编码。您可以在 RFC 8017 中找到完整的规范。如果你想使用 RSA 进行签名,你应该使用 RSASSA-PSS 或简单的 PSS,它指定了一个被认为是安全的填充方案。如果你想在生产中使用它,请不要自己实现它。