Как стать автором
Обновить

Абсолютно защищенная файловая система

Время на прочтение3 мин
Количество просмотров2.2K
По мотивам этого поста. Предположим, у вас есть некоторая система, которую необходимо защитить от гипотетических злоумышленников. Предположим также, что злоумышленники могут получить физический доступ к носителям с данными, а также, что еще более неприятно, физический доступ (с возможностью применения мер физического воздействия) непосредственно к вам. Необходимо обеспечить следующие условия:

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


Мне кажется, я знаю, как это можно реализовать.



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

Итак, изначально диск у нас представлен набором блоков фиксированного размера, блоки идут подряд и могут быть пронумерованы от 0 до N. Предположим, у нас есть некая функция F(i,K), принимающая на вход номер блока i и некий ключ K. Функция такова, что при любом 0<=i<=N ее результат лежит в диапазоне [0..N] и для различных i результат будет разным. Другими словами, функция F транслирует «логический» номер блока в «физический», в зависимости от ключа K. Такую функцию можно построить, например, путем перестановки битов в i.

Сначала мы генерируем ключ K1 и создаем файловую систему на «перемешанном» при помощи F диске. Заполняем ее некоторыми данными, которые будем называть «открытыми». Данные шифруются по определенному алгоритму (о нем ниже). Ключ K1 мы можем смело сообщать злоумышленникам. Домустим, эти данные заняли некий набор M[] блоков на ФС.

Следующим шагом мы генерируем ключ K2 таким образом, чтобы блоки, входящие в M[], соответствовали известному набору i, скажем, i=N-Nm...N, где Nm — число блоков в M[]. В дальнейшем мы эти блоки не используем. Это, наверное, самый нетривиальный шаг, но его можно облегчить, если алгоритм размещения файлов по блокам в ФС достаточно прост.

На оставшемся месте, в блоках i=0...N-Nm-1, размещаем закрытые данные, доступ злоумышленников к которым нужно исключить. Данные шифруются.

Об алгоритме шифрования. Для обеспечения невозможности модификации данных на ФС без ее разрушения, необходимо использовать ассиметричное шифрование с открытым ключом. При этом «открытый ключ» используется для чтения (расшифровки данных), а «закрытый» — для записи (шифровки). Открытый ключ, используемый для расшифровки «открытых данных» можно сообщить злоумышленникам, однако закрытого ключа им давать не следует (это будет трудно, да, но вполне возможно). Злоумышленники смогут прочесть данные из открытой части ФС, но не смогут ее модифицировать.

Алгоритм шифрования закрытой части ФС должен быть таким, чтобы энтропия зашифрованных данных была как можно более велика. Т.е. чтобы зашифрованный блок с данными был неотличим от просто блока, забитого случайными числами. Если при этом ФС при удалении файла будет освободившиеся блоки забивать «мусором», то блоки со скрытыми данными ничем не будут отличаться от просто свободных блоков при использовании ключа K1.

Таким образом, в случае захвата диска и вас злоумышленниками, вы можете смело сообщить им K1 и открытый ключ для чтения данных из «открытого» раздела. Наличие же на диске еще каких-то данных вы можете смело отрицать, доказать их наличие, не зная K2 и второго набора ключей шифрования будет невозможно. Также как будет невозможна модификация данных в «открытом» разделе, поскольку «закрытого» ключа для записи вы этим самым злоумышленникам, разумеентся, наотрез откажетесь сообщать.

Не думаю, что я первый, кому пришла в голову подобная идея, так что если кто-нибудь из читателей укажет на уже существующую реализацию подобного — буду очень благодарен.
Теги:
Хабы:
Всего голосов 15: ↑9 и ↓6+3
Комментарии36

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн