Обеспечение произвольного доступа к зашифрованному диску
От большинства систем требуется возможность произвольного доступа к отдельным секторам диска. Это определенным образом усложняет использование многих потоковых и блочных шифров в любом из режимов сцепления.
При генерации уникального IV для каждого шифруемого или дешифрируемого сектора используйте адрес сектора. Недостатком такого приема является то, что каждый сектор всегда будет шифроваться с одинаковым IV. Убедитесь, что это не влияет на безопасность.
Для главного ключа создайте псевдослучайный блок размером с сектор. (Это можно сделать, например, используя алгоритм в режиме OFB.) Для шифрования любого сектора сначала выполните его XOR с этим псевдослучайным блоком, а затем зашифруйте его, как обычно, блочным шифром в режиме ECB. Такой прием называется ECB+OFB (см. раздел 15.4).
Так как CBC и CFB являются самовосстанавливающимися режимами, вы можете использовать все блоки сектора, кроме первого или первых двух, при генерации IV для этого сектора. Например, IV для сектора 3001 может быть хэш-значением всех, кроме первых 128, битов данных сектора. Создав IV, шифруйте, как обычно, в режиме CBC. Для дешифрирования сектора используйте в качестве IV второй 64-битовый блок сектора и расшифровывайте оставшуюся часть сектора. Затем, используя расшифрованные данные, вы сможете восстановить IV и расшифровать первые 128 бит.
Блочный шифр можно использовать с блоком, достаточно большим, чтобы сразу шифровать целый сектор. Примером такой реализации является Crab (см. раздел 14.6).