В этом посте разбираемся, какие способы очистки цифровых носителей информации являются самыми подходящими для каждого типа. Отмечу, что пост не претендует на оригинальность, а лишь является сборником известной полезной информации для Вашего удобства.
Исследования
Самое известное исследование про флеш память - Reliably Erasing Data From Flash-Based Solid State Drives (PDF). Открыв документ, прочитаем интересные результаты.
Например, простое удаление файла на флешке без контроллера со сбором мусора позволяет восстановить его в более чем 99% случаев:
![](https://habrastorage.org/getpro/habr/upload_files/e6b/9f0/997/e6b9f0997a49c04a04d6362f8d96ea3c.png)
Перезапись одного файла даже несколько раз тоже не гарантирует его полное уничтожение на носителях с флеш-памятью.
Что ещё более удивительно, перезапись пустого места в файловой системе 100 раз (!) тоже совсем не гарантирует уничтожение удалённых файлов:
![](https://habrastorage.org/getpro/habr/upload_files/98c/bb8/40e/98cbb840e2192f39adef622b1c1e7281.png)
Как же тогда безвозвратно удалить что-то с SSD? Ответ в той же статье:
In most cases, overwriting the entire disk twice was sufficient to sanitize the disk, regardless of the previous state of the drive. There were three exceptions: about 1% (1 GB) of the data remained on Drive A after twenty passes. We also tested a commercial implementation of the four-pass 5220.22-M standard [12] on Drive C. For the sequential initialization case, it removed all the data, but with random initialization, a single fingerprint remained.
То есть 2 перезаписей носителя полностью хватило в большинстве случаев, чтобы стереть все данные, ниже таблица с результатом:
![](https://habrastorage.org/getpro/habr/upload_files/28f/014/51a/28f01451a3b23ad6ad056df87ac96280.png)
Отмечу, что при подаче команды TRIM на поддерживающие её накопители устройство может начать агрессивно избавляться от удалённых в файловой системе объектов, что будет использоваться ниже в посте. Однако, это не полноценная замена протокола безопасного стирания, так как SSD может вообще не проводить немедленную очистку мусора.
Теперь затронем магнитные носители. Смотрим Википедию, Data erasure/Number of overwrites needed:
Data on floppy disks can sometimes be recovered by forensic analysis even after the disks have been overwritten once with zeros (or random zeros and ones).[27]
This is not the case with modern hard drives:
According to the 2014 NIST Special Publication 800-88 Rev. 1, Section 2.4 (p. 7): "For storage devices containing magnetic media, a single overwrite pass with a fixed pattern such as binary zeros typically hinders recovery of data even if state of the art laboratory techniques are applied to attempt to retrieve the data."[25] It recommends cryptographic erase as a more general mechanism.
According to the University of California, San Diego Center for Magnetic Recording Research's (now its Center for Memory and Recording Research) "Tutorial on Disk Drive Data Sanitization" (p. 8): "Secure erase does a single on-track erasure of the data on the disk drive. The U.S. National Security Agency published an Information Assurance Approval of single-pass overwrite, after technical testing at CMRR showed that multiple on-track overwrite passes gave no additional erasure."[28] "Secure erase" is a utility built into modern ATA hard drives that overwrites all data on a disk, including remapped (error) sectors.[29]
Further analysis by Wright et al. seems to also indicate that one overwrite is all that is generally required.[30]
Итак, для HDD достаточна перезапись 1 раз
Общий случай
Это, как ни странно, подумать об удалении заранее и шифровать носители информации. Это могут быть как встроенные в ОС алгоритмы (BitLocker, FileVault, LUKS), так и сторонние утилиты, как VeraCrypt, или программы с поддержкой, например, gocryptfs.
Флеш-память без контроллера со сбором мусора (флешки и карты памяти)
Полностью перезаписываем рандомом 2 раза (см. главу Исследования)
shred -v -n 2 /dev/X
где X
- Ваш диск, например, sda
shred
- утилита с самой быстрой перезаписью рандомом из известных мне, поэтому здесь и далее используем её
SATA SSD и HDD
Перепечатано из ATA WIKI, смотрите оригинальную статью для дополнительной информации.
Воспользуемся ATA Enhanced Secure Erase через утилиту hdparm
, что также затронет данные на плохих секторах. Может занять как несколько секунд, так и несколько часов, в зависимости от вида носителя. Например, более 3 часов на 500GB 5400RPM HDD.
Смотрим вывод
hdparm -I /dev/X
, гдеX
здесь и далее - Ваш диск (например,sda
). Под Security должно бытьnot enabled
иfrozen
:
Security:
Master password revision code = 65534
supported
not enabled
not locked
frozen
not expired: security count
supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Переводим компьютер в режим сна и включаем обратно. Теперь видим
not frozen
Ставим пароль на диск, здесь он Eins:
hdparm --user-master u --security-set-pass Eins /dev/X
Вывод:
security_password="Eins"
/dev/sdd:
Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high
Теперь hdparm -I /dev/X
кроме not frozen
покажет ещё и enabled
:
Security:
Master password revision code = 65534
supported
enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
Security level high
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Отправляяем команду ATA Secure Erase Enhanced:
hdparm --user-master u --security-erase-enhanced Eins /dev/X
Если у компьютера пропадёт питание в момент стирания, нужно будет загрузиться в систему снова, указав поставленный пароль на диск и повторить шаг 3. После перезаписи пароль автоматически удаляется
HDD, альтернативный способ
Перезаписываем рандомом 1 раз (см. главу Исследования). Обратите внимание, что такая перезапись не затронет переназначенные сектора:
shred -v -n 1 /dev/X
Где X
- ваш диск (например, sda
)
В случае с HDD можно затирать и отдельные файлы, и даже пустое место. Для первого можно использовать ту же утилиту shred
, для второго можно временно создать виртуальный большой файл командой fallocate
, а затем перезаписать его. Обратите внимание, что в таком случае есть риск остатков следов объектов в файловой системе.
NVMe SSD
Перепечатано из Arch Wiki, смотрите оригинальную статью для дополнительной информации.
Воспользуемся утилитой nvme-cli и проверим поддержку команд format и sanitize:
nvme id-ctrl /dev/nvme0 -H | grep "Format |Crypto Erase|Sanitize"
Вывод:
[1:1] : 0x1 Format NVM Supported
[29:29] : 0 No-Deallocate After Sanitize bit in Sanitize command Supported
[2:2] : 0 Overwrite Sanitize Operation Not Supported
[1:1] : 0x1 Block Erase Sanitize Operation Supported
[0:0] : 0x1 Crypto Erase Sanitize Operation Supported
[2:2] : 0x1 Crypto Erase Supported as part of Secure Erase
[1:1] : 0 Crypto Erase Applies to Single Namespace(s)
[0:0] : 0 Format Applies to Single Namespace(s)
Если у Вас более новый диск, поддерживающий стандарт NVMe 1.3, воспользуйтесь второй командой:
-a <action>
--sanact=<action>
Sanitize Action
000b - Reserved
001b - Exit Failure Mode
010b - Start a Block Erase sanitize operation
011b - Start an Overwrite sanitize operation
100b - Start a Crypto Erase sanitize operation
nvme sanitize /dev/nvme0 -a 0x02
Или
nvme sanitize /dev/nvme0 -a 0x04
Для проверки прогресса можно выполнить
nvme sanitize-log /dev/nvme0
Вывод:
Sanitize Progress (SPROG) : 655
Sanitize Status (SSTAT) : 0x4
Sanitize Command Dword 10 Information (SCDW10) : 0x4
Estimated Time For Overwrite : 4294967295 (No time period reported)
Estimated Time For Block Erase : 174
Estimated Time For Crypto Erase : 34
Estimated Time For Overwrite (No-Deallocate) : 0
Estimated Time For Block Erase (No-Deallocate) : 0
Estimated Time For Crypto Erase (No-Deallocate): 0
Вывод после завершённой операции:
Sanitize Progress (SPROG) : 65535
Sanitize Status (SSTAT) : 0x101
Sanitize Command Dword 10 Information (SCDW10) : 0x4
Estimated Time For Overwrite : 4294967295 (No time period reported)
Estimated Time For Block Erase : 174
Estimated Time For Crypto Erase : 34
Estimated Time For Overwrite (No-Deallocate) : 0
Estimated Time For Block Erase (No-Deallocate) : 0
Estimated Time For Crypto Erase (No-Deallocate): 0
Для более старых дисков можно попробовать nvme format
:
nvme format /dev/nvme0 -s 1 -n 1
Где -s 1
- User Data Erase, а -s 2
- Cryptographic Erase
Прочие SSD и флешки с контроллером со сбором мусора
blkdiscard --secure /dev/device
Или без --secure
при отсутствии данной опции. Это пошлёт команду TRIM на все сектора накопителя.
Пустое место на SSD
В случае, если полностью перезаписать SSD в настоящее время невозможно, попробуйте подать команду TRIM только на пустое место - например, через fstrim -v -a
на Linux, Оптимизацию диска на Windows и перезагрузку на macOS. Повторюсь, что TRIM не гарантирует уничтожение информации.
На этом всё, спасибо, что прочитали!