javax crypto河豚计数器增量函数似乎是固定的(标准公式为1?)。
(a)如何改变增量函数,比如4?
(b)可以"增加"通过操纵IV值来实现?
我们可以在ECB上编写代码,但此时我们会尝试保留java安全和javax加密,而无需编写我们自己的CTR版本。
更多信息:
我们希望我们的java代码不增加1,以便匹配遗留程序的输出,该遗产程序不会增加1,而是来自调用函数的另一个输入参数。 那么,除了1之外的增值是非标准的吗?也许无效?
提前致谢。
答案 0 :(得分:1)
标准点击率始终使用递增1并且只要您始终为每次加密使用不同的随机IV,就会被视为安全:NIST-paper
<强>为什么吗
一般来说,将计数器递增1或者比如8,绝对没有安全性差异。
使用增量1的主要原因是,只要密钥流不重复,CTR才是安全的。
将CTR与16 byte counter; increment by 1; 16 bytes blocks
一起使用时,您可以在此之前加密整个计数器空间(2^(16*8)
)。
当使用其他数字的增量(例如8
)时,流只允许您加密计数器空间的1/8
(2^(16*8) / 8
)。
通常,当使用增量值k * 2^s
时,它只会在开始重复之前覆盖计数器空间的1 / 2^s
。 (如果你增加一个奇数值,它也会覆盖整个反空间。)
此外,您必须在某处存储每个加密的增量值,因此您知道将哪个用于解密。
(我假设加法也比简单加法慢一点。)
总而言之,基本上没有理由使用超过1的增量,因为它只提供(通常不是非常关键但仍然)一些缺点。我认为这可能是标准Java-API不提供此功能的原因。
我想自己实现这个功能可能是最好的解决方案,以防你真正需要这个功能......