我想问一下关于一个初始化向量(IV)和对称密码算法密钥的使用的最佳做法。
我想从一个客户端接收消息,对其进行加密,并在后端存储。这将在一定时间来完成,并且会有在以后的时间来进行汇集了消息,并以可读的形式回报他们的请求。
据我所知道的,关键可以是多个独立的消息进行加密时相同。该IV应与每一个新的加密改变。然而,这会引起问题,因为每封邮件都需要进行去cryption不同的IV在以后的时间。
我想知道这是做的最好的方式。是否有任何方式,以避免存储IV与每一个消息,这将简化用的加密/解密的工作的整个过程?
IV选择是有点复杂,因为确切的要求取决于操作模式。有一些通用规则,但是:
操作中最常见的具体模式:
当在数据库中的数据进行加密,所以通常不使用安全行ID(或从它衍生的值)为四。使用行ID是安全的只有该行从未更新或删除,否则第二次数据使用相同ID存储,它会重复IV。谁看到使用相同的密钥和IV加密的两个不同的消息很可能是能够解密两个消息(细节取决于模式和攻击者就可以多少猜测的消息内容的一个对手;注意,即使微弱的猜测,例如“它的打印UTF-8” 就足够了)。
除非你有一个很好的理由不这样做(只保存每行的几个字节不能算作一个很好的理由)和密码破译审查要在其中存储和检索数据的具体方式:
¹假设一切都正确执行,例如随机值需要与随机发生器适合于密码术来产生。 ²只要它不依赖于键的方式选择。