Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шнайер - Прикладная криптография.doc
Скачиваний:
13
Добавлен:
01.05.2025
Размер:
10 Мб
Скачать
☆

10.4 Шифрование данных для хранения

Шифрование данных для хранения и последующего извлечение также можно рассмотреть, используя модель Алисы и Боба. Алиса все также отправляет сообщение Бобу, но в этот раз "Боб" - это та же Алиса, но спустя какое-то время. Однако, эта проблема значительно отличается от предыдущей.

В каналах связи передаваемые сообщения сами по себе не имеют значения. Если Боб не получит какое-то сообщение, Алиса всегда сможет передать его еще раз. Это не так для хранящихся шифрованных данных. Если Алиса не сможет расшифровать свое сообщение, она не сможет вернуться в прошлое и снова зашифровать его. Данные будут потеряны навсегда. Это значит, что приложения, шифрующие данные для хранения, должны содержать некие механизмы для предотвращения невосстановимых ошибок, вызванных сбоями шифротекста.

Ключ шифрования имеет тот же смысл, что и для передачи сообщений, но меньшее значение. По сути, криптография превращает большие секреты в маленькие. А маленькие секреты терять не так страшно. Процедуры управления ключами должны учитывать, что одни и те же ключи будут использованы снова и снова, и что данные могут годами храниться на диске, ожидая дешифрирования.

Более того, ключи должны быть под рукой в течение длительного времени. Ключ, используемый при передаче информации, в идеале существует только во время передачи. Ключ, используемый для хранения данных, может использоваться в течение нескольких лет и, следовательно, должен все это время надежно храниться.

В [357] перечислены другие проблемы, присущие шифрованию компьютерных данных для хранения:

  • Данные могут одновременно существовать и в открытом виде на другом диске, на другом компьютере или на бумаге. Криптоаналитик получает дополнительные возможности для вскрытия с помощью известного открытого текста.

  • В базах данных блоки данных могут быть меньше, чем размеры блоков большинства алгоритмов. Это приведет к тому, что шифротекст будет заметно больше открытого текста.

  • Скорость устройств ввода/вывода предъявляет высокие требования к скорости шифрования и дешифрирования и, возможно, потребует использования аппаратного шифрования. В некоторых приложениях могут понадобиться специальные высокоскоростные алгоритмы.

  • Необходимо долго и надежно хранить ключи.

  • Намного усложняется управление ключами, так как различным людям нужен доступ к различным файлам, различным частям одного файла и т.д..

Табл. -4. Сравнение канального и сквозного шифрований

Канальное шифрование

Сквозное шифрование

Безопасность внутри главных компьютеров

На посылающем компьютере сообщение открыто

На промежуточных узлах сообщение открыто

На посылающем компьютере сообщение зашифровано

На промежуточных узлах сообщение зашифровано

Роль пользователя

Реализуется посылающим компьютером

Невидимо для пользователя

Шифрование выполняет компьютер

Единое средство для всех пользователей

Может быть выполнено аппаратно

Шифруются все сообщения или ни одного

Реализуется посылающим процессом

Шифрование выполняет пользователь

Пользователь должен найти алгоритм

Пользователь выбирает шифрование

Легче выполнить программно

Для каждого сообщения пользователь выбирает, шифровать или нет

Соображения по реализации

Требует одной пары ключей для пары компьютеров

Требует установки на каждый компьютер аппаратуры или программного обеспечения шифрования

Обеспечивает проверку подлинности узлов

Требует одной пары ключей для пары пользователей

Требует установки на каждый узел аппаратуры или программного обеспечения шифрования

Обеспечивает проверку подлинности пользователей

Если зашифрованный файл не структурирован по записям и полям (например, это текстовый файл), то дешифрирование выполняется проще: перед использованием расшифровывается весь файл. Если зашифрованы файлы базы данных, решение проблематично. Дешифрирование всей базы данных для чтения единственной записи неэффективно, а независимое шифрование записей может быть уязвимо по отношению к вскрытию повтором блока.

Кроме того, вы должны убедиться, что незашифрованный файл удаляется после шифрования (см. раздел 10.9). Дальнейшие подробности и соображения можно найти в [425, 569].

Маскировка ключей

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

Решение заключается в том, чтобы зашифровать каждый файл отдельным ключом и зашифровать ключи другим ключом, известным пользователям. Каждому пользователю нужно будет запомнить только один ключ. Для различных пользователей их ключами будут зашифрованы различные подмножества ключей шифрования файлов. К тому же, может быть главный ключ, которым зашифрованы все ключи шифрования файлов. Это даже безопаснее, потому что ключи шифрования файлов случайны и менее уязвимы по отношению к вскрытию со словарем.

Шифрование на уровне драйвера и на файловом уровне

Существует два способа зашифровать жесткий диск: на уровне драйвера и на файловом уровне. Шифрование на файловом уровне означает, что каждый файл шифруется отдельно. Для использования зашифрованного файла его надо будет сначала расшифровать, а после использования снова зашифровать.

Шифрование на уровне драйвера создает на машине пользователя логический диск, на котором все данные хранятся в зашифрованном виде. При хорошей реализации такой способ предоставляет безопасность, которая, за исключением выбора хороших паролей, не создает пользователю никаких неудобств. Однако, драйвер должен быть намного сложнее, чем простая программа шифрования файлов, потому что он должен быть связан с вопросами загружаемого драйвера устройства, выделением новых секторов для файлов, повторным использованием освобождающихся секторов, чтением с произвольным доступом, запросами на обновление данных логического диска, и т.д.

Обычно перед запуском драйвер предлагает пользователю ввести пароль. Он используется для генерации главного ключа дешифрирования, который затем может быть использован для дешифрирования действительных ключей шифрования различных данных.

Табл. -5. Сравнение шифрования на уровне драйвера и на уровне

Шифрование на файловом уровне

Шифрование на уровне драйвера

Преимущества

Легко реализовать и использовать.

Гибкое.

Относительно небольшая потеря производительности.

Пользователи могут без проблем переносить файлы с машины на машину.

Пользователи могут без проблем создавать резервные копии файлов.

Временные файлы, рабочие файлы, и т.п., могут храниться на безопасном диске.

В подобных системах тяжелее забыть что-нибудь зашифровать.

Вопросы безопасности

Потенциальная утечка при работе программ, не заботящихся о безопасности. (Программа может, например, сохранить на диске временный файл.)

Плохие реализации могут при повторном шифровании всегда использовать один и тот же ключ для данного пароля

Может произойти сбой драйвера устройства или резидентной программы.

Плохие реализации создадут предпосылки для вскрытия с выбранным открытым текстом или даже с выбранным шифротекстом.

Если вся система пользуется главным ключом, закрытым одним паролем, потеря этого пароля позволит взломщику получить доступ ко всему.

Для приложений этого типа спектр возможных шифров более ограничен. Например, потоковые шифры OFB работать не будут.

Проблемы использования

Пользователь должен знать, что делать.

Для различных файлов могут использоваться различные пароли.

Единственным способом управления доступом является ручное шифрование выбранных файлов.

Неизбежна потеря производительности.

Может быть затруднено взаимодействие драйвера с Windows, режимом эмуляции DOS в OS/2, драйверами устройств, и т.д.

Обеспечение произвольного доступа к зашифрованному диску

От большинства систем требуется возможность произвольного доступа к отдельным секторам диска. Это определенным образом усложняет использование многих потоковых и блочных шифров в любом из режимов сцепления.

При генерации уникального IV для каждого шифруемого или дешифрируемого сектора используйте адрес сектора. Недостатком такого приема является то, что каждый сектор всегда будет шифроваться с одинаковым IV. Убедитесь, что это не влияет на безопасность.

Для главного ключа создайте псевдослучайный блок размером с сектор. (Это можно сделать, например, используя алгоритм в режиме OFB.) Для шифрования любого сектора сначала выполните его XOR с этим псевдослучайным блоком, а затем зашифруйте его, как обычно, блочным шифром в режиме ECB. Такой прием называется ECB+OFB (см. раздел 15.4).

Так как CBC и CFB являются самовосстанавливающимися режимами, вы можете использовать все блоки сектора, кроме первого или первых двух, при генерации IV для этого сектора. Например, IV для сектора 3001 может быть хэш-значением всех, кроме первых 128, битов данных сектора. Создав IV, шифруйте, как обычно, в режиме CBC. Для дешифрирования сектора используйте в качестве IV второй 64-битовый блок сектора и расшифровывайте оставшуюся часть сектора. Затем, используя расшифрованные данные, вы сможете восстановить IV и расшифровать первые 128 бит.

Блочный шифр можно использовать с блоком, достаточно большим, чтобы сразу шифровать целый сектор. Примером такой реализации является Crab (см. раздел 14.6).