BouncyCastle Threefish - одинаковые блоки, одинаково зашифрованные - PullRequest
0 голосов
/ 04 июня 2018

Я использую Threefish BouncyCastle напрямую, а не через 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, твик используется для шифрования в методе encryptBlock, но твик никогда не меняется.Также для шифрования следующего блока предыдущий не используется, ни оригинальный незашифрованный блок, ни зашифрованный блок.В ThreefishEngine нет способа изменить настройку после инициализации ThreefishEngine.Планирование ключей в ThreefishEngine выполняется только в пределах одного блока и не влияет на шифрование следующего блока.

Вот вопросы.

1.Правильно ли, что равные блоки создают одинаковые зашифрованные блоки?Не верны ли мои ожидания, что равные блоки должны быть зашифрованы по-разному? На самом деле это существенная разница между блочными и потоковыми шифрами, а в противном случае это будет потоковый шифр.

2.Планирование клавиш выполняется только с блоком (разные ключи применяются к разным частям блока)?Является ли планирование ключей одинаковым для каждого блока? Это объясняет, почему зашифрованные блоки равны.

...