Есть ли способ быстрее, чем / dev / [u] random? Иногда мне нужно делать что-то вроде
кошка / dev / urandom> / dev / sdb
Случайные устройства "слишком" безопасны и, к сожалению, слишком медленны для этого. Я знаю что есть wipe
и аналогичные инструменты для безопасного удаления, но я полагаю, что в Linux есть и некоторые встроенные средства для этого.
К сожалению, в Linux плохая реализация urandom. Вы можете использовать aes256-ctr со случайным ключом и получать несколько сотен мегабайт псевдослучайности в секунду, если ваш процессор поддерживает AES-NI (аппаратное ускорение). Я тоже с нетерпением жду случайного перехода на современный подход.
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin
Этот щенок делает на моей коробке 1,0 ГБ / с (по сравнению с 14 МБ / с / dev / urandom). Он использует urandom только для создания случайного пароля, а затем выполняет очень быстрое шифрование / dev / zero с использованием этого ключа. Это должен быть криптографически безопасный ГПСЧ, но я не буду давать никаких гарантий.
Если вы хотите выполнить «безопасное» стирание жесткого диска (или файла), вам следует взглянуть на утилиту shred.
Как указано на предыдущих плакатах, случайные устройства / dev / * предназначены для использования в качестве источника небольших фрагментов случайных данных.
В быстром тесте под Ubuntu 8.04 на Thinkpad T60p с процессором T2500, 1 ГБ случайных данных из openssl rand
был в 3-4 раза быстрее, чем /dev/urandom
. То есть,
time cat /dev/urandom | head -c 1000000000 > /dev/null
... было около 4 минут, пока ...
time openssl rand 1000000000 | head -c 1000000000 > /dev/null
... было чуть больше 1 минуты.
Не уверен, есть ли разница в случайном качестве, но, вероятно, для HD-протирания подходит любой вариант.
Я вижу много ответов о том, что использование случайных данных не важно. Это в значительной степени верно, если все, что вы пытаетесь сделать, это стереть диск, но не настолько, если вы очищаете его при подготовке к шифрованию диска.
Если вы заполните устройство неслучайными данными, а затем разместите на нем зашифрованный раздел, вы можете столкнуться с проблемой. Часть диска, на которой хранятся зашифрованные данные, будет отличаться от остальной части диска, потому что зашифрованные данные будут выглядеть случайными, а остальные - нет. Это может быть использовано для определения информации о криптодиске, которая может быть использована для его взлома. Ссылка ниже объясняет теорию, лежащую в основе того, как работают некоторые из наиболее распространенных атак и как от них защищаться (по крайней мере, в Linux).
Если вам нужно надежно стереть HD, есть один инструмент очень мощный: DBAN
Если вы хотите стереть огромное блочное устройство, я считаю его более надежным в использовании. dd
и средство отображения устройств вместо перенаправления вывода случайных данных. Следующее будет отображать /dev/sdb
к /dev/mapper/deviceToBeErased
en- и расшифровка прозрачно между ними. Чтобы заполнить устройство на зашифрованном конце, нули копируются в текстовую сторону средства отображения (/dev/mapper/deviceToBeErased
).
cryptsetup --cipher aes-xts-plain64 --key-file /dev/random --keyfile-size 32 create deviceToBeErased /dev/sdb
dd if=/dev/zero of=/dev/mapper/deviceToBeErased bs=1M
Зашифрованные данные на /dev/sdb
гарантированно неотличим от случайных данных, если нет серьезный слабость в AES. Используемый ключ берется из /dev/random
(не волнуйтесь - он использует всего 32 байта).
Чем быстрее ваш инструмент, тем менее надежным будет результат. Создание хорошей случайности требует времени.
В любом случае, вы можете использовать что-то вроде dd if = / dev / zero of = / dev / sdb, но очевидно, что это не будет случайным, просто стирание будет происходить намного быстрее.
Другой вариант - использовать этот метод / sbin / badblocks -c 10240 -s -w -t случайный -v / dev / sdb он быстрее, чем urandom, но PRNG плохих блоков менее случайный.
/dev/random
использует много системной энтропии и поэтому производит только медленный поток данных.
/dev/urandom
менее безопасен и быстрее, но он по-прежнему ориентирован на меньшие фрагменты данных - он не предназначен для обеспечения непрерывного потока высокоскоростных случайных чисел.
Вы должны создать ГПСЧ собственного дизайна и засеять его чем-то из /dev/random
или /dev/urandom
. Если вам нужно немного больше случайности, периодически заполняйте его - каждые несколько МБ (или любой другой длины вашего prng). Получение 4 байтов (32-битное значение) из urandom или random достаточно быстро, чтобы вы могли делать это каждые 1 КБ данных (повторно загружать свой prng каждые 1 КБ) и получать очень случайные результаты при этом очень, очень, быстро.
-Адам
Если вы хотите быстро стереть жесткий диск, записывайте на него неслучайные данные. Это не менее безопасно, чем использование случайных данных. В любом случае, при подключении к компьютеру исходные данные не могут быть прочитаны. Перезапись данных жесткого диска: великие споры об стирании данных показывает, что исходные данные также нельзя прочитать с помощью микроскопа.
Отформатируйте с помощью LUKS и dd поверх зашифрованного тома. Затем используйте / dev / urandom, чтобы стереть заголовок LUKS.
Если у вас есть аппаратная поддержка AES, это очень быстрое решение.
Вкратце:
cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX cryptodev
dd if=/dev/zero bs=1M of=/dev/mapper/cryptodev
cryptsetup luksClose cryptodev
# wipe the luks header. Yes, it uses /dev/urandom but only for 2MB of data:
dd if=/dev/urandom bs=1M count=2 of=/dev/sdX
сделано!
Смотрите мой блог: Быстро заполнить диск случайными битами (без / dev / urandom)
Если вы хотите стереть жесткий диск, dd не удаляет содержимое перераспределенных секторов и работает очень медленно, если жесткий диск умирает. Вместо этого вы можете использовать встроенную функцию стирания дисков, которая уже давно стандартизирована.
В этом примере я стираю механический жесткий диск емкостью 500 ГБ всего за 102 минуты. Даже когда он заполнен перераспределенными секторами:
root@ubuntu:~# hdparm --security-set-pass Eins /dev/sdaj
security_password="Eins"
/dev/sdaj:
Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high
root@ubuntu:~# time hdparm --security-erase-enhanced Eins /dev/sdaj
security_password="Eins"
/dev/sdaj:
Issuing SECURITY_ERASE command, password="Eins", user=user
real 102m22.395s
user 0m0.001s
sys 0m0.010s
root@ubuntu:~# smartctl --all /dev/sdaj | grep Reallocated
5 Reallocated_Sector_Ct 0x0033 036 036 036 Pre-fail Always FAILING_NOW 1327
Вы можете увидеть более подробную информацию на ata.wiki.kernel.org, однако в их примере не используется --security-erase-Enhanced, который необходим для удаления ранее упомянутых перераспределенных секторов.
На практике, вероятно, нет необходимости заполнять весь диск из одного непрерывно случайного потока.
Вы можете создать небольшой кусок случайных данных, а затем просто повторять это снова и снова на диске.
Просто убедитесь, что этот фрагмент данных не кратен нормальному размеру блока диска, чтобы не перезаписать коррелированные блоки данных одним и тем же битом случайных данных. Размер блока, представляющий собой простое число в диапазоне ~ 1 МБ, должен подойти.
Для дополнительной безопасности просто сделайте это еще несколько раз, используя каждый раз другой размер блока.
Утилита shred проста и работает быстро. Если атрибуты SMART диска указывают на ноль повторно выделенных секторов, «уничтожение», вероятно, достаточно безопасно.
Однако, если на диске были перераспределены сектора, данные о поврежденных секторах не будет перезаписан. Если поврежденные места содержали конфиденциальные данные до того, как они были перераспределены, «уничтожить» может быть недостаточно. «Плохие» сектора могут быть прочитаны путем сброса карты распределения накопителя и (многократного) их чтения.
Возможность сбросить карту распределения сбойных секторов зависит от производителя и модели диска.
Если все, что вы хотите сделать, это перезаписать диск, то не имеет значения, что вы используете, потому что все, что угодно, превзойдет все, кроме лаборатории судебной экспертизы, и я бы не стал доверять ничему, кроме шлакования диска, чтобы остановить этот уровень ресурсов. .
Просто используйте неслучайный источник, такой как все нули или единицы, или повторяющийся шаблон, например (я думаю, это сработает)
(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb