用户为java中的blowfish CTR定义的计数器增量函数

时间:2014-07-26 21:30:54

标签: java encryption cryptography blowfish

javax crypto河豚计数器增量函数似乎是固定的(标准公式为1?)。

(a)如何改变增量函数,比如4?

(b)可以"增加"通过操纵IV值来实现?

我们可以在ECB上编写代码,但此时我们会尝试保留java安全和javax加密,而无需编写我们自己的CTR版本。

更多信息:

我们希望我们的java代码不增加1,以便匹配遗留程序的输出,该遗产程序不会增加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/82^(16*8) / 8)。

通常,当使用增量值k * 2^s时,它只会在开始重复之前覆盖计数器空间的1 / 2^s。 (如果你增加一个奇数值,它也会覆盖整个反空间。)

此外,您必须在某处存储每个加密的增量值,因此您知道将哪个用于解密。
(我假设加法也比简单加法慢一点。)

总而言之,基本上没有理由使用超过1的增量,因为它只提供(通常不是非常关键但仍然)一些缺点。我认为这可能是标准Java-API不提供此功能的原因。


我想自己实现这个功能可能是最好的解决方案,以防你真正需要这个功能......