Компания Kudelski Security, специализираща се в областта на сигурността, публикува инструмента Shufflecake, който позволява създаването на скрити файлови системи, разпръснати в наличното свободно пространство в съществуващите дялове и неразличими от произволни остатъчни данни. Дяловете се създават по такъв начин, че без наличието на ключа за достъп е трудно да се докаже съществуването им дори при криминалистичен анализ. Кодът на утилитите (shufflecake-userland) и модула на ядрото на Linux (dm-sflc) е написан на C и се разпространява под лиценз GPLv3, което прави невъзможно включването на публикувания модул на ядрото в основното ядро на Linux поради несъвместимост с лиценза GPLv2, под който се предоставя ядрото.
Проектът се позиционира като по-съвършен от Truecrypt и Veracrypt, решение за скриване на данни, изискващи защита, което има родна поддръжка на платформа Linux и позволява разполагане на до 15 скрити дяла на устройството, вложени един в друг за усложняване на разпознаването на съществуването им. Ако самото приложение Shufflecake не представлява тайна, за което може да се съди по наличието на съответните утилити в системата, то общият брой на създадените скрити дялове не може да бъде определен. Създаваните скрити дялове по желание на потребителя могат да бъдат форматирани за разполагане на всяка файлова система, например, ext4, xfs или btrfs. Всеки дял се обработва като отделно виртуално блочно устройство със собствен ключ за отключване.
За затрудняване на проследяването се предлага да се използва модел на поведение „правдоподобно отрицание“ (plausible deniability), чиято същност е, че ценните данни се крият под формата на допълнителни слоеве в криптирани дялове с по-малко ценни данни, образувайки своеобразна скрита йерархия на дяловете. В случай на натиск, притежателят на устройството може да разкрие ключа към криптирания дял, но в този дял могат да се крият други дялове (включително до 15 вложени нива), а определянето на тяхното наличие и доказването на съществуването им е трудно.
Скриването се осигурява чрез формиране на всеки раздел като набор от шифровани слайсове, разположени на произволни позиции в хранилището. Всеки слайс се създава динамично в момента, когато в раздела е необходимо допълнително пространство за съхранение. За да се затрудни анализът, слайсовете на различни раздели се редуват, т.е. разделите Shufflecake не се свързват с непрекъснати области, а слайсовете на всички раздели се смесват. Информацията за използваните и свободни слайсове се съхранява в картата на местоположението, свързана с всеки раздел, на която се позовава шифрованият заглавен файл. Картите и заглавният файл са шифровани и без знание на ключа за достъп са неразличими от случайни данни.
Заглавието е разделено на слотове, всеки от които определя своя раздел и свързаните с него слайсове. Слотът в заглавието е разположен в стеков ред и рекурсивно свързан — текущият слот съдържа ключ за декриптиране на параметрите на предишния раздел в йерархията (по-малко скрит), което позволява използването на една парола за декриптиране на всички по-малко скрити раздели, свързани с избрания раздел. Всеки по-малко скрит раздел разглежда слайсовете на вложените раздели като свободни.
По подразбиране всички вложени раздели на Shufflecake имат същия видим размер, като раздела на най-високо ниво. Например, ако на устройството с размер 1 ГБ са активни три раздела, всеки от тях ще бъде видим за системата като раздел с размер 1 ГБ и общото достъпно дисково пространство ще се използва съвместно от всички раздели — ако общият размер на съхранените данни надвиши фактическия размер на устройството, ще започне да се появява грешка при въвеждане/извеждане.
Неприведени вложени раздели не участват в разпределението на мястото, т.е. опит да се запълни основния раздел ще доведе до пренаписване на данни във вложените раздели, но няма да даде възможност да се разкрие тяхното съществуване чрез анализ на размера на данните, които могат да бъдат поставени в раздела до началото на извеждането на грешка (предполага се, че основните раздели съдържат неизменяеми данни за отвлекателност и никога не се използват самостоятелно, а стандартната работа се извършва винаги с най-новия вложен раздел, самата схема предполага, че е по-важно да се запази тайна за съществуването на данните, отколкото да се загубят тези данни).
Всъщност винаги се създават 15 раздела Shufflecake — към използваните раздели се прикрепя парола на потребителя, а неизползваните раздели се снабдяват с случайно генерирана парола (невъзможно е да се разбере колко точно раздела се използват). При инициализацията на разделите Shufflecake, диска, раздела или виртуалното блочно устройство, предвидени за тях, се запълва с произволни данни, което не позволява да се определи на общия фон метаданните и данните на Shufflecake.
Реализацията на Shufflecake има доста висока производителност, но заради наличието на разходи, които са приблизително два пъти, отстъпва по пропускна способност в сравнение с криптиране на дискове на базата на подсистемата LUKS. Използването на Shufflecake води до допълнителни разходи за оперативна памет и място за съхранение на служебни данни на диска. Разходите за паметта се оценяват на 60 МБ на всеки раздел, а мястото на диска на 1% от общия размер. За сравнение, аналогичната по предназначение техника WORAM предизвиква забавяния от 5 до 200 пъти с 75% загуба на полезно място на диска.
Инструментариумът и модулът на ядрото са тествани само при работа в Debian и Ubuntu с ядра 5.13 и 5.15 (поддържа се работа в Ubuntu 22.04). Отбелязва се, че проектът все още трябва да се разглежда като работен прототип, който не бива да се използва за съхранение на важни данни. В бъдеще се планира провеждане на допълнителна оптимизация на производителността, надеждността и сигурността, както и осигуряване на възможност за зареждане от разделите Shufflecake.
Източник: opennet.ru
