Какой программой можно безопасно удалять файлы, чтобы их потом _нельзя_ было ни как восстановить, желательно по алгоритму DoD 5220.22-M. Заранее спасибо.
Во-первых, там не учитывается архитектура дисков, поэтому вышеприведенный "псевдокод" вовсе не соответствует стандарту. Точнее, стандарт пишет "Overwrite all addressable locations with a character, its complement, then a random character and verify." Это хорошо, но, там же - "TTHIS METHOD IS NOT APPROVED FOR SANITIZING MEDIA THAT CONTAINS TOP SECRET INFORMATION." - во-вторых, данные могут оставаться "на границах" дорожек, поскольку запись на диск, в сущности, аналоговая.
За обсуждением этого аспекта, думаю, стоит обратиться к файлику usenix6-gutmann.doc, который есть в архиве secure delete, ссылку на который я уже давал.
gcc -O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D__KERNEL__ -DMODULE -fomit-frame-pointer -fno-strict-aliasing -pipe -mpreferred-stack-boundary=2 -I/lib/modules/`uname -r`/build/include -c sdel-mod.c
sdel-mod.c:22:25: asm/smplock.h: No such file or directory
sdel-mod.c: In function `smash_it':
sdel-mod.c:197: error: `O_RDWR' undeclared (first use in this function)
sdel-mod.c:197: error: (Each undeclared identifier is reported only once
sdel-mod.c:197: error: for each function it appears in.)
sdel-mod.c:302: error: `O_WRONLY' undeclared (first use in this function)
sdel-mod.c:302: error: `O_TRUNC' undeclared (first use in this function)
sdel-mod.c: In function `wipefile':
sdel-mod.c:322: error: `MOD_INC_USE_COUNT' undeclared (first use in this function)
sdel-mod.c:324: warning: assignment makes pointer from integer without a cast
sdel-mod.c:337: error: `PATH_MAX' undeclared (first use in this function)
sdel-mod.c:380: error: `MOD_DEC_USE_COUNT' undeclared (first use in this function)
make: *** [sdel-mod.o] Ошибка 1
Я не удивлюсь, если на 2.6 его еще не портировали. Попробуй попинать автора.
> sdel-mod.c:22:25: asm/smplock.h: No such file or directory
а этот файл есть? все ошибки - это просто отсутствие различных констант, причем O_RDWR, O_WRONLY, O_TRUNC - точно относятся к файловым операциям, PATH_MAX - максимальная длина пути. MOD_INC_USE_COUNT и MOD_DEC_USE_COUNT используются для регистрации модулей и беглый grep по сорцам показывает, что в 2.6 оно тоже никуда не делось.
В общем, ничего смертельного не видно. Подключи файлы, где соответствующие константы определены, должно собраться.
1. The overwriting procedure (in the secure mode) does a 38 times
overwriting. After each pass, the disk cache is flushed.
2. truncating the file, so that an attacker don't know which
diskblocks belonged to the file.
3. renaming of the file, so that an attacker can't draw any conclusion
from the filename on the contents of the deleted file.
4. finally deleting the file (unlink).
Все тоже самое "... и так 38 раз ..." (btw, 38? ;-)
Тем болеее, ни слова о "во-вторых, данные могут оставаться "на границах" дорожек, поскольку запись на диск, в сущности, аналоговая"
Data overwritten once or twice may be recovered by subtracting what is
expected to be read from a storage location from what is actually
read. Data which is overwritten an arbitrarily large number of times
can still be recovered provided that the new data isn't written to the
same location as the original data (for magnetic media), or that the
recovery attempt is carried out fairly soon after the new data was
written (for RAM). For this reason it is effectively impossible to
sanitise storage locations by simple overwriting them, no matter how
many overwrite passes are made or what data patterns are written.
38 раз - это некоторое (возможно - срежнепотолочное) число перезаписи, которое позволит заодно разрушить данные на границах дорожки. Хотя, почему-то у меня есть ощущение, что в Гутмане это объясняется, не помню.
Привет,
"все дело в ...", что hard disk drivers используют
компрессию (RLE или др.), читай zippping on hardware level.
т.е. когда пишешь 255 раз по 1, на самом деле записываются не 225 "ячейки",
а только 2 == "255 раз по 1", т.е остальные 253 "ячейки"
остаются нетронутыми, что невозможно прочитать програмно, но легко "железно".
Товаришч из статьи пытался найти алгоритм, как "обмануть"
compression, чтобы "портились" все ячейки. Отсюда "итак 38 раз ...",
потому что он брал наиболее вероятные/популярные виды компрессии
используемые в hard disk drivers .
Очевидно, что алгоритм hardware compression зависит от производителя
(к сожалению не отечественного ;-) и реально подобрать
универсальный алгоритм, который бы портил/терел на все 100% для любых
drivers/hard disks невозможно.
По-видимому такая задача должна решаться на "harware level".
Интересно, а что мешает файловой системе оптимизировать запись в файл таким образом, чтобы записываемая информация пишется не поверх старой информации, а в соверщенно новое место?
Например, какая-нибудь оптимизирующая fs может обнаруживать, что мы пытаемся записать 512 байт в файл длиной 512 байт и, вместо того, чтобы записывать их поверх старого содержимого, "передвинуть" указатель на содержимое файла поближе к началу диска и записать информацию уже туда.
В этом случае 38 (или даже 38000) перезаписей не спасут. И придётся разбираться с форматом хранения файлов у разных файловых систем + писать отдельное безопасное удаление для этих фс.
Я не утверждаю, что существующие fs именно так _делают_, но они (или будующие fs) вполне _могут_ так делать.