正如标题中所说的,我必须用RSA加密一条消息,生成一个签名,并通过CAN传输所有信息(假设密钥已经交换)。问题是,一个CAN-FD帧支持总共64字节的有效负载,但是在加密(使用2048位密钥)和签名之后,我会有多少字节呢?这取决于要传输的消息长度吗?
发布于 2020-05-24 14:21:31
使用RSA加密消息本身是错误的做法。你应该使用混合加密。
使用接收方的长期RSA密钥进行加密是错误的做法,因为它不提供前向保密。泄漏长期密钥允许对所有过去的消息进行追溯解密。这在上世纪90年代被认为是可以接受的,但今天是不允许的。在新协议中,您必须使用Diffie (通常是现在的X25519)来建立随机的每个会话或每个消息密钥,这些密钥本身没有使用您的长期密钥进行加密。长期标识密钥只应用于身份验证。
首先,选择要用于对称部件的AEAD模式。
AES-GCM很受欢迎。AES-EAX是谷歌优先考虑的硬件,有AES电路.
如果您的硬件没有AES硬件电路,则建议使用ChaCha20-Poly1305。我会使用XChacha20-Poly1305 (扩展的nonce版本),因为这样我就不需要担心现在的重用和不安全的软件AES了。
如果您不能使用这些,您可以使用AES-CTR与HMAC-SHA2,与MAC覆盖的现在(如果你使用CTR与现在和计数器,而不仅仅是计数器),在加密-然后-MAC,MAC-然后-解密模式。这也是安全的。
带有随机IV和HMAC-SHA2的AES-CBC也是安全的,MAC覆盖IV,并再次以加密-然后-MAC,MAC-然后解密模式。这是比较慢的加密,但你可能不在乎。
在您有了AEAD模式之后,您将查看加密消息所需的随机字节数。生成那么多随机字节,并使用它们加密明文。你需要把密文,现在和MAC发送到另一边。您使用RSA加密随机字节(RSA PKCS#1 v1.5是错误的)。您可以使用RSA签署整个项目(RSA PKCS#1 v1.5是不好的)。
您发送消息本身的密文。如果您选择CBC,您的消息将被填充到16个字节。否则,就没有垫子了。
你需要发送nonce或IV,所以添加这个。大小取决于AEAD模式。
你需要发送MAC,所以加上这个。大小取决于AEAD模式。
随机字节的RSA-2048加密是256字节,不管消息大小如何.
整个事件的RSA-2048签名是256字节,而不管消息大小如何。
使用X25519和Ed25519签名会产生比RSA-2048短的消息。
如果使用噪声框架,则不需要Ed25519代码,它使用长期X25519密钥和HMAC进行身份验证。
将所有这些原语结合到一个协议中可能是不安全的,您最好使用Google或level或其他一些高级别的抗误用API。
发布于 2020-05-24 14:19:42
最后找到了,为什么要花这么长时间:加密后的2048位,因为不依赖于消息的长度来加密,也不依赖256字节的签名。所以512个总字节在8个不同的64字节可以FD帧传输.
https://security.stackexchange.com/questions/232128
复制相似问题