Есть ли альтернатива /dev/urandom?

Есть ли какой-нибудь более быстрый способ, чем / dev / [u] random? Иногда мне нужно делать такие вещи, как

cat / dev / urandom> / dev / sdb

Случайные устройства "слишком" безопасны и, к сожалению, слишком медленны для этого. Я знаю что есть wipe и аналогичные инструменты для безопасного удаления, но я полагаю, что есть и некоторые встроенные средства для этого в Linux.

15 ответов

Решение

Если вы хотите "безопасно" стереть жесткий диск (или файл), вам следует взглянуть на утилиту уничтожения.

Как отмечалось в предыдущих постерах, случайные устройства /dev/* предназначены для использования в качестве источника небольших порций случайных данных.

К сожалению, в 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 с использованием этого ключа. Это должен быть криптографически безопасный PRNG, но я не буду давать гарантий.

В быстром тесте под 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-очистки.

Если вы хотите стереть огромное блочное устройство, я нашел его более надежным в использовании dd и устройство отображения вместо перенаправления вывода случайных данных. Следующее будет карта /dev/sdb в /dev/mapper/deviceToBeErased и расшифровка между ними. Чтобы заполнить устройство на зашифрованном конце, нули копируются в текстовую часть картографа (/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 байта).

Я вижу много ответов о том, что использование случайных данных не важно. Это в значительной степени верно, если все, что вы пытаетесь сделать, это стереть диск, но не так сильно, если вы стираете его при подготовке к шифрованию диска.

Если вы заполняете устройство неслучайными данными, а затем размещаете на нем зашифрованный раздел, вы можете столкнуться с проблемой. Часть диска, на которой хранятся зашифрованные данные, будет выделяться из остальной части диска, поскольку зашифрованные данные будут выглядеть случайными, а остальные - нет. Это может быть использовано для определения информации о криптографическом диске, который может быть использован при его взломе. Ссылка ниже объясняет теорию о том, как работают некоторые из наиболее распространенных атак и как защититься от них (во всяком случае, в Linux).

Настройки шифрования жесткого диска Linux

Если вам нужно безопасно стереть HD, есть один очень мощный инструмент: DBAN

Проверять случайность

http://billauer.co.il/frandom.html

по моему тесту это самый быстрый

Если вы хотите стереть жесткий диск, 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-extended, что необходимо для удаления упомянутых ранее перераспределенных секторов.

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

Чем быстрее ваш инструмент, тем менее безопасным будет результат. Генерация хорошей случайности требует времени.

В любом случае, вы можете использовать что-то вроде dd if = / dev / zero of = / dev / sdb, но очевидно, что это не будет случайным, оно будет просто стираться намного быстрее.

Другим вариантом может быть использование этого метода /sbin/badblocks -c 10240 -s -w -t random -v /dev/sdb, он быстрее, чем urandom, но PRNG для badblocks является менее случайным.

Отформатируйте с 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)

/dev/random использует много системной энтропии, и поэтому создает только медленный поток данных.

/dev/urandom менее безопасен и быстрее, но все же ориентирован на меньшие порции данных - он не предназначен для обеспечения непрерывного потока высокоскоростных случайных чисел.

Вы должны сделать PRNG своего собственного дизайна и посеять что-то из /dev/random или же /dev/urandom, Если вам нужно немного более случайным образом, заполняйте его периодически - каждые несколько МБ (или независимо от длины вашего prng). Получение 4 байтов (32-битного значения) из случайного или случайного числа достаточно быстро, чтобы вы могли делать это через каждые 1 КБ данных (повторная загрузка каждые 1 КБ) и получать очень случайные результаты, причем очень, очень и очень быстро.

-Адам

На практике, вероятно, нет необходимости заполнять весь диск одним непрерывным потоком.

Вы можете создать скромный размер случайных данных, а затем просто повторять это снова и снова на диске.

Просто убедитесь, что этот фрагмент данных не кратен нормальному размеру блока диска, чтобы не допустить перезаписи коррелированных блоков данных с одинаковым битом случайных данных. Размер чанка, который является простым числом в диапазоне ~1 МБ, должен хорошо работать.

Для дополнительной безопасности просто сделайте это несколько раз больше, используя каждый раз другой размер куска.

Утилита 'shred' проста и быстра. Если атрибуты SMART накопителя указывают на ноль перераспределенных секторов, вероятно, "клочок" достаточно безопасен.

Однако если на диске есть перераспределенные сектора, данные о поврежденных секторах не будут перезаписаны. Если поврежденные места содержали конфиденциальные данные до того, как они были перераспределены, "клочок" может оказаться недостаточно хорошим. "Плохие" сектора могут быть прочитаны путем сброса карты распределения дисков и (многократного) чтения их.

Возможность сброса карты распределения поврежденных секторов зависит от производителя и модели накопителя.

Если все, что вы хотите сделать, это перезаписать диск, то не имеет значения, что вы используете, потому что что-либо вообще побьет все, что угодно, кроме криминалистической лаборатории, и я бы не стал доверять чему-либо, кроме как сломать диск, чтобы остановить этот уровень ресурсов.,

Просто используйте неслучайный источник, такой как все нули или единицы, или повторяющийся шаблон, как (я думаю, это будет работать)

(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb
Другие вопросы по тегам