我正在创建一个新的传输协议,我目前使用大量的RSA传输来发送AES密钥以保护数据。
我目前对数据包的设置是:
RSA_Block{
AES key
IV
Other things
}
AES_Block{
Data
}
问题是IV本身占用了安全RSA块内的空间。如果我将IV移出(从安全角度来看很好)在我的传输中需要一些额外的空间(按IV大小放大数据包)。 所以我在想....如果RSA块包含纯随机数据(AES密钥在每次传输时都是随机的)。我使用RSA编码块的第一部分作为IV。
但它安全吗?或者RSA块的第一个字节是否有一些非随机性?
答案 0 :(得分:1)
RSA 将一个数据块加密为一个加密数据块。可以适合块的数据大小由密钥大小决定。加密块的大小不取决于您加密的数据量,而是密钥大小。因此,从 RSA 输入中删除 IV 不会使输出变小 - 假设输入可以放在一个块中。 RSA 块中存在 IV 不会对总加密时间产生影响。
从安全角度来看,您不需要保护 IV 。通常,您只需将数据与明确的数据一起传递即可。像这样:
RSA_Block{
AES key
Other things
}
AES_Block{
IV
Data
}
我知道这实际上会使数据更大一些。但它不会对处理时间产生太大影响。在谈论 RSA 加密时考虑memcpy的成本没有任何意义。差异超过1000因素(might even be in the millions - depending on key size etc.)。