Я думаю, вы, возможно, захотите посмотреть, как работают «настраиваемые блочные шифры», и посмотреть, как решается проблема шифрования диска: Теория шифрования диска . Шифрование всего диска похоже на вашу проблему: шифрование каждого сектора должно выполняться независимо (вы хотите независимое шифрование данных с различными смещениями), и в то же время все это должно быть безопасным. Над этим много работы сделано. Википедия, кажется, дает хороший обзор.
ИЗМЕНЕНО, чтобы добавить:
Повторяйте ваши изменения: Да, вы пытаетесь сделать настраиваемый блочный шифр из AES, XOR с помощью открытого текста. Более конкретно, у вас есть Enc (T, K, M) = AES (K, f (T) xor M), где AES (K, ...) означает шифрование AES с ключом K, а f (T) является некоторой функцией твик (в твоем случае я думаю это Фортуна). Я кратко посмотрел на статью, которую вы упомянули, и насколько я вижу, можно показать, что этот метод не создает безопасный блочный шифр с возможностью настройки.
Идея (основанная на определениях из раздела 2 статьи Лискова, Ривеста, Вагнера) заключается в следующем. У нас есть доступ либо к оракулу шифрования, либо к случайной перестановке, и мы хотим сказать, с кем мы взаимодействуем. Мы можем установить твик T и открытый текст M и получить обратно соответствующий зашифрованный текст, но мы не знаем ключ, который используется. Вот как можно выяснить, если мы используем конструкцию AES (K, f (T) xor M).
Выберите любые два различных значения T, T ', вычислите f (T), f (T'). Выберите любое сообщение M, а затем вычислите второе сообщение как M '= M xor f (T) xor f (T'). Теперь попросите оракула шифрования зашифровать M с помощью настройки T, а M - с помощью настройки T. Если мы будем иметь дело с рассматриваемой конструкцией, то результаты будут идентичны. Если мы имеем дело со случайными перестановками, результаты будут почти наверняка (с вероятностью 1-2 ^ -128) отличаться. Это связано с тем, что оба входа для шифрования AES будут одинаковыми, поэтому шифротексты также будут идентичны. Это не будет иметь место, когда мы используем случайные перестановки, потому что вероятность того, что два выхода идентичны, составляет 2 ^ -128. Суть в том, что подстройка ксиринга для ввода, вероятно, не является безопасным методом.
В статье приводятся некоторые примеры того, что может оказаться безопасной конструкцией. Самым простым кажется, что Enc (T, K, M) = AES (K, T xor AES (K, M)). Вам нужно два шифрования на блок, но они доказывают безопасность этой конструкции. Они также упоминают более быстрые варианты, но они требуют дополнительных примитивов (почти-xor-универсальные семейства функций).