我知道,根据this article我应该签署邮件,然后加密邮件。
我的程序运作如下:
我应该这样做吗?
感谢协助
答案 0 :(得分:1)
对消息进行数字签名,并将其与消息的字节连接起来。
你需要知道一个人的结局和另一个人的开始,但确定。有些API只需要一个键和一个消息并产生一个字节输出,然后它们不需要单独的验证(数据) - >布尔步骤,而是需要一串字节并返回已验证的消息或失败。 / p>
是的,你可以发送
encrypt(
concat(
sign(message, signerPrivateKey), message),
encryptionKey)
要获得经过验证的消息,接收方必须提前收到两个密钥:签名者公钥和解密密钥,它与对称加密的encryptionKey相同,且必须是一个保密密码。
如果您想使用非对称加密,那么您只需要交换公钥,并且您的消息并不总是短于密钥,通常您会生成一次性使用对称密钥,并且只对非对称加密,因为非对称算法通常是比对称的更贵。
oneTimeUseSymmetricCryptoKey := generateKey()
concat(
encryptAssymetric(
oneTimeUseSymmetricCryptoKey,
encrypterPrivateKey),
encryptSymmetric(
concat(sign(message, signerPrivateKey), message),
oneTimeUseSymmetricCryptoKey))
这些都不会阻止上面链接中描述的消息转发攻击。为此,您需要对发件人进行身份验证,例如通过选择一个公钥来验证签名 AND 一个密钥,根据一个独立于加密字节交换而得到的发件人地址进行解密。