Чи є альтернатива / dev / urandom?


21

Чи є якийсь швидший шлях, ніж / dev / [u] випадковий? Іноді мені потрібно робити такі речі

cat / dev / urandom> / dev / sdb

Випадкові пристрої "занадто" захищені і, на жаль, занадто повільні для цього. Я знаю, що існують wipeі подібні інструменти для безпечного видалення, але я вважаю, що в Linux також є деякі бортові засоби.


Еквівалент на StackOverflow: stackoverflow.com/questions/841356 / ...
David Z


1
Чи не кращий спосіб цього зробити? Можливо, претендент на нагороду UUoC?
Том О'Коннор

Відповіді:


12

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

Як вказують попередні плакати, випадкові пристрої / dev / * мають використовуватися як джерело невеликих шматочків випадкових даних.


1
За даними man, на сторінці "shred" використовується / dev / urandom. Тож, хоч і є гарною відповіддю на витирання диска, він не запропонує прискорити роботу над будь-якою іншою технікою читання з / dev / urandom. (Ще одна порада, якщо використовувати "клаптик": більшість людей, мабуть, будуть щасливішими з 1-2 пропусками, а не з гігантським рахунком за замовчуванням, так що на протирання не потрібно днів.)
gojomo

4
Насправді подрібнення набагато швидше, ніж / dev / urandom. Я здогадуюсь, що він надає власні псевдовипадкові дані, використовуючи / dev / urandom або / dev / random як насіння.
thomasrutter

24

На жаль, 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, але я не даю гарантій.


Дякую за цю дивовижну відповідь, я зміг піднятися з 9,5 Мб / с з / dev / urandom до понад 120 Мб / с з openssl.
НДР

За винятком першого твердження, що Linux має погану реалізацію urandom , я схвалюю цю відповідь. Досить добре, щоб витерти (або заповнити?) Жорсткий диск перед шифруванням.
Вікрант Чадхарі

5
Пройдіть pvдля отримання хорошого показника прогресу. openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -pterb > /dev/sdb.
Vikrant Chaudhary

@VikrantChaudhary urandom створює високоякісні псевдовипадкові числа, звичайно, але це не привід для повільності. Режим лічильника AES набагато швидший, і важко сперечатися, як це було б менш безпечно, ніж / dev / urandom.
Персейди

1
Просто додати до pvрекомендації, ви можете зробити так, pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbщоб він pvпоказав вам прогрес до завершення запису.
asciiphil

7

У швидкому тесті під 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.


5

Я бачу багато відповідей, які говорять про те, що використання випадкових даних не важливо. Це майже правда, якщо все, що ви намагаєтеся, - це витерти диск, але не так багато, якщо ви витираєте його під час підготовки до шифрування диска.

Якщо ви заповнюєте пристрій невипадковими даними, тоді розміщуйте на ньому зашифрований розділ, у вас може виникнути проблема. Частина диска, який зберігає зашифровані дані, буде виділятися з решти диска, оскільки зашифровані дані будуть виглядати випадковими, а решта не будуть. Це можна використовувати для визначення інформації про криптодиск, який міг би бути використаний для його розлому. Посилання нижче пояснює теорію того, як працюють деякі більш поширені атаки та як захищатись від них (у будь-якому випадку в Linux).

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


1
Дуже правильно. При відносно сучасних дисках (> 20 Гб) будь-який перезапис одного проходу достатньо стерти. Навіть НСА та подібні люди будуть важко натискати, щоб отримати будь-яку значну кількість даних з накопичувача. І це дуже дорого. Подумайте 100 000 доларів за мегабайт. Зауваження про шифрування дуже вірно. Ви хочете, щоб невикористані частини диска виглядали "так само випадково", як і використовувані.
Тонні

Чи не програмне забезпечення для шифрування вашого пристрою рандомізує весь диск?
Натан Гарабедян

5

Якщо вам потрібно надійно витерти HD, є один дуже потужний інструмент : DBAN


5

Якщо ви хочете стерти величезний блоковий пристрій, то я вважаю його більш надійним у використанні, 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 байти).


4

перевірити франдам

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

за моїм тестом це найшвидше


1
frandom більше не повинен вважатися криптографічно захищеним, враховуючи, що це використовує RC4. Див. Blog.cryptographyengineering.com/2013/03/… для прикладу прикордонної практичної (!) Атаки на TLS при використанні RC4.
Персеїди

2

Чим швидше ваш інструмент, тим менш безпечним буде результат. Створення доброї випадковості вимагає часу.

У будь-якому випадку, ви можете використовувати щось на зразок dd, якщо = / dev / zero of = / dev / sdb , але очевидно, що це не буде випадковим чином, воно просто стирається набагато швидше.

Іншим варіантом може бути використання цього методу / sbin / badblocks -c 10240 -s -w -t випадковий -v / dev / sdb - це швидше, ніж урандум, але неполадки PRNG менш випадкові.


1
і чесно кажучи - це ПОЛІТТЕСТЬ безпеки для накопичувача
warren

Багаторазове перезапис, як це робиться, вимагає часу та забезпечує кращу безпеку, ніж одне перезапис «ідеально» випадкових даних.
Призупинено до подальшого повідомлення.

"Чим швидше ваш інструмент, тим менш безпечним буде результат. Створення хорошої випадковості вимагає часу." - Що це не так. Генератор випадкових чисел AES (псевдо) набагато краще аналізується та набирає порядків швидше, ніж / dev / urandom. (Див. Відповідь Троніка.)
Персеїди

2

/dev/random використовує багато системної ентропії, і тому виробляє лише повільний потік даних.

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

Вам слід створити PRNG власного дизайну та посіяти його чимось із /dev/randomабо /dev/urandom. Якщо вам це потрібно трохи більш випадковим чином, насіньте його періодично - кожні кілька МБ (або незалежно від довжини вашого PRG). Отримання 4-х байт (32-бітове значення) від випадкових або випадкових досить швидко, що ви можете робити це кожні 1 к даних (перезавантажуйте prng кожні 1 к) і отримуєте дуже випадкові результати, ідучи дуже, дуже, швидко.

-Адам


7
Дуже рідко хтось може написати власний генератор випадкових чисел, який краще, ніж ті, які вже є в наявності. Частіше за все результат - передбачувана модель та помилкове почуття безпеки. Я рекомендую використовувати клаптики на накопичувачі через його / dev запис або дуже ретельне фізичне знищення.
Призупинено до подальшого повідомлення.

Я згоден. Я б використовував shred, який за замовчуванням використовує urandom (що я, відверто кажучи, не вважаю повільним). Як зауваження, можна використовувати / dev / random з клаптиком (вказавши --random-source = / dev / random), якщо ви дуже терплячі.
Метью Флашен

2

Якщо ви хочете швидко стерти жорсткий диск, запишіть на нього не випадкові дані. Це не менш безпечно, ніж використання випадкових даних. У будь-якому випадку, підключившись до комп'ютера, оригінальні дані не можуть бути прочитані. Перезапис даних жорсткого диска: велика суперечка протирання показує, що оригінальні дані також неможливо прочитати за допомогою мікроскопа.


2

Форматування за допомогою 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)


Чому ви турбуєтесь з LUKS, якщо все, що ви хочете зробити, це перезаписати пристрій? Звичайний dm-crypt (звичайний режим) cryptsetup) набагато простіше використовувати для цього.
Персеїди

2

Якщо ви хочете стерти жорсткий диск, 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-посилено, що необхідно для видалення раніше згадуваних перерозподілених секторів.


1

На практиці, мабуть, немає необхідності збирати весь диск з одного безперервно випадкового потоку.

Ви можете створити скромний розмір випадкових даних, а потім просто повторити це знову і знову на диску.

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

Для додаткової безпеки просто зробіть це в кілька разів більше, використовуючи кожен раз різний розмір.


1

Утиліта «клаптик» - це легко і швидко. Якщо атрибути SMART накопичувача вказують на нуль перерозподілених секторів, "клаптик", ймовірно, досить безпечний.

Однак якщо на диску накопичили сектори, дані про пошкоджені сектори не будуть перезаписані. Якщо пошкоджені місця містили конфіденційні дані до їх повторного виділення, "клаптик" може виявитися недостатньо хорошим. «Погані» сектори можуть бути прочитані шляхом скидання карти розподілу диска та (повторного) зчитування їх.

Можливість скидання карти поганого розподілу сектору залежить від виробника та моделі приводу.


0

Якщо все, що ви хочете зробити, - це перезаписати диск, то не має значення, чим ви користуєтесь, тому що що-небудь взагалі буде бити що-небудь, крім лабораторії криміналістики, і я б не довіряв нічого, крім шлакоприводу, щоб зупинити цей рівень ресурсів. .

Просто використовуйте не випадкове джерело, як усі нулі чи одиниці, або повторюваний зразок на зразок (я думаю, це спрацює)

(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb

Це може бути так, але іноді ви не можете переконати керівництво, що безпека, надана випадковим записом, насправді не більша, ніж використання всіх нулів, враховуючи рівень технології, необхідної для відновлення даних, однаковий для обох сценаріїв. У цьому випадку часто краще відповідати вимозі, побудувавши власний швидкий генератор випадкових чисел.
Адам Девіс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.