27

Я пытаюсь полубезопасно стереть кучу жестких дисков. Следующее работает на 20-50Мб / с

dd if=/dev/zero of=/dev/sda

Но

dd if=/dev/random of=/dev/sda 

Кажется, не работает. Также, когда я печатаю

dd if=/dev/random of=stdout

Это дает мне всего несколько байтов, независимо от того, что я передаю для bs = и count =

Я использую /dev /random неправильно? Какую другую информацию я должен искать, чтобы продвинуть это устранение проблем? Есть ли другой способ сделать это с помощью скрипта или что-то вроде

makeMyLifeEasy | dd if=stdin of=/dev/sda

Или что-то типа того...

5 ответов5

42

И /dev/random и /dev/urandom используют "пул энтропии". Когда пул заканчивается, /dev/random ожидает его пополнения, что требует отслеживания поведения системы (ввода с клавиатуры, движения мыши и т.д.), Тогда как /dev/urandom будет продолжать давать вам псевдослучайные данные. /dev/random теоретически более высокого качества, но /dev/urandom почти наверняка подходит для ваших целей. (Но даже /dev/urandom , вероятно, будет медленнее, чем некоторые другие методы. Более быстрый, но менее качественный генератор, вероятно, достаточно хорош для стирания жестких дисков. Не ясно, что злоумышленник получит какое-либо преимущество, зная последовательность, которая будет сгенерирована, или что случайные числа лучше для этой цели, чем последовательность, такая как 0, 1, 2, 3, 4, ....)

Цитирую random(4) справочную страницу:

Если вы не уверены, следует ли вам использовать /dev/random или /dev/urandom , то, вероятно, вы захотите использовать последнее. Как правило, /dev/urandom следует использовать для всего, кроме долговечных ключей GPG/SSL/SSH.

ОБНОВЛЕНИЕ : страница man random(4) была обновлена с тех пор, как я ее написал. Теперь говорится:

Интерфейс /dev/random считается устаревшим интерфейсом, и /dev/urandom является предпочтительным и достаточным во всех случаях использования, за исключением приложений, которые требуют случайности во время ранней загрузки; для этих приложений вместо этого следует использовать getrandom(2) , поскольку он будет блокироваться до тех пор, пока не будет инициализирован пул энтропии.

Смотрите также " Мифы о /dev /urandom " Томаса Хуна.

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

РЕДАКТИРОВАТЬ: Ниже приводится отступление от "истинных" случайных чисел против псевдослучайных чисел. Если все, что вас интересует, - это практический ответ на вопрос, вы можете перестать читать сейчас.

Кажется, я утверждаю (включая другие ответы здесь), что /dev/random реализует "истинный" генератор случайных чисел, а не генератор псевдослучайных чисел (PRNG). Например, статья в Википедии делает такое заявление. Я не верю, что это правильно. Там какая - то дискуссия о нем здесь , который относится к аппаратным генераторов случайных чисел, но я не вижу никаких доказательств того, что /dev/random обычно используется такое устройство, или что типичные компьютеры даже есть такое устройство. Они отличаются от PRNG, таких как функция C rand() тем, что они не являются детерминированными, поскольку они собирают энтропию из источников, которые практически непредсказуемы.

Я бы сказал, что есть три класса генераторов "случайных" чисел:

  1. Детерминированные PRNG, такие как функция C rand() , которые используют алгоритм для генерации повторяющихся последовательностей, которые имеют (более или менее) статистические свойства действительно случайной последовательности. Они могут быть достаточно хороши для игр (учитывая хороший способ их заполнения) и необходимы для приложений, которые требуют повторяемости, но они не подходят для криптографии.

  2. Генераторы типа /dev/random и /dev/urandom которые собирают энтропию из какого-либо практически непредсказуемого источника, такого как операции ввода-вывода (поэтому нажатие на клавиатуре или перемещение мыши может привести к тому, что /dev/random произведет больше данных). Не ясно (мне) они удовлетворяют ли определение ПСЧ (я видел определений , которые говорят ГСЧ является детерминированным), но они также не истинные генераторы случайных чисел.

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

13

/dev/random является источником настоящей энтропии, действительно случайных байтов. Как таковой, он нуждается в источнике случайности. Вы можете «использовать» случайность, читая с нее. Это даст вам всю случайность, которую он имеет, затем блокирует, пока не получит больше. Вы, вероятно, просто сидите в ожидании, и машина получает совсем немного новой случайности, и она просто ждет.

/dev/random для действительно случайной криптографии, случайность высокого качества. Таким образом, это перерасход для перезаписи диска. Писать из /dev/zero несколько раз нормально. Или вы можете написать из /dev/urandom , который не блокирует и выдает псевдослучайные числа, когда заканчивается полная случайность.

7

В Linux /dev /random - это специальный файл, который обслуживает высококачественные псевдослучайные числа. Эта реализация собирает энтропию от событий, происходящих от клавиатуры, мыши, диска и системных прерываний.(см. этот документ). Поэтому, когда таких событий нет, пул энтропии пуст, чтение из /dev /random будет блокировать, пока не будет собран дополнительный шум окружающей среды. Это объясняет вашу проблему. Для заполнения энтропийного пула вы можете нажимать клавиши на клавиатуре.

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

Аппаратный генератор случайных чисел обычно состоит из преобразователя для преобразования некоторых аспектов физических явлений в электрический сигнал, усилителя и других электронных схем для увеличения амплитуды случайных колебаний до макроскопического уровня и некоторого типа аналого-цифрового преобразователя. преобразовать вывод в цифровое число, часто простую двоичную цифру 0 или 1. Путем многократной выборки случайно изменяющегося сигнала получается серия случайных чисел.

Аппаратный генератор случайных чисел собирает шум окружающей среды от драйверов устройств и других источников в пул энтропии. Из этого энтропийного пула создаются случайные числа. При чтении устройство /dev /random будет возвращать только случайные байты в пределах предполагаемого количества битов шума в пуле энтропии. Это объясняет вашу проблему.

Некоторые реализации Hardware RNG описаны в документации к ядру и информации об устройстве.

Аналогом /dev /random является /dev /urandom ("разблокированный" / неблокирующий случайный источник), который повторно использует внутренний пул для получения большего количества псевдослучайных битов. Это означает, что вызов не будет блокироваться, но вывод может содержать меньше энтропии, чем соответствующее чтение из /dev /random.

Поэтому, если вы не хотите создавать CSPRNG(криптографически безопасный генератор псевдослучайных чисел), вы должны использовать /dev /urandom.

2

Не отвечая на ваш вопрос - здесь уже есть полные ответы - вы также можете проверить загрузчик Darik's Boot и Nuke aka DBAN, который представляет собой очиститель дисковода для live-CD.

0

Просто используйте команду shred которая поставляется с coreutils. Он использует случайные данные эффективным способом. dd - инструмент низкого уровня, и это, вероятно, слишком низкий уровень для этой задачи. Например, shred будет эффективно пропускать неписываемые части устройства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .