Encryption BouncyCastle三条鱼-等分块等分

Encryption BouncyCastle三条鱼-等分块等分,encryption,cryptography,bouncycastle,block-cipher,Encryption,Cryptography,Bouncycastle,Block Cipher,我直接使用BouncyCastle的Threefish,而不是通过安全API byte[] key = new byte[1024]; ... byte[] tweak = new byte[16]; ... ThreefishEngine threefishEngine = new ThreefishEngine(1024); threefishEngine.init(true, new TweakableBlockCipherParameters(new KeyParameter(key),

我直接使用BouncyCastle的Threefish,而不是通过安全API

byte[] key = new byte[1024];
...
byte[] tweak = new byte[16];
...
ThreefishEngine threefishEngine = new ThreefishEngine(1024);
threefishEngine.init(true, new TweakableBlockCipherParameters(new KeyParameter(key), tweak));
...
threefishEngine.processBlock(...);
有趣的是,相同的块将以相同的方式加密。我曾预计前一个块的结果会影响下一个块的结果(因为密钥调度会产生永久不同的密钥),并且相同的块将以不同的方式加密

在BouncyCastle的源代码ThreefishEngine.java中,tweak用于方法encryptBlock中的加密,但tweak从不更改。另外,对于下一个块的加密,不使用前一个块,既不使用原始未加密块,也不使用加密块。在ThreefishEngine中,没有方法在ThreefishEngine初始化后更改调整。ThreefishEngine中的密钥调度仅在单个块内完成,对下一个块的加密没有影响

以下是问题

1。是否正确,相等的块产生相等的加密块?我的期望是错误的,相等的块应该以不同的方式加密吗?实际上,这是块密码和流密码的本质区别,否则这就是流密码


2。关键点调度是否仅在块中完成(不同的关键点应用于块的不同部分)?每个块的密钥调度是否相同?这可以解释为什么加密块是相等的。

这个问题确实属于我们的问题。听起来你把分组密码的操作模式,如CBC或GCM,和分组密码本身混淆了。我同意。我会把它移到。