HD Randomize Hızlı Yolu?


14

Sabit sürücülerin şifreleme için nasıl güvenli hale getirileceği hakkında okudum ve adımlardan biri, şifrelenmiş verileri sabit sürücüdeki diğer verilerden ayırt edilemez hale getirmek için sürücüye rastgele bitler yazmaktır.

Ancak, dd if=/dev/urandom of=/dev/sdageçmişte kullanmayı denediğimde , ETA günlerce sırada görünüyordu. badblocksUnderom yerine kullanmakla ilgili bir şey gördüm , ama bu pek yardımcı olmadı. Sadece bunu hızlandırmama yardımcı olabilecek herhangi bir yol olup olmadığını, örneğin seçenekler ddveya eksik olabileceğim başka bir şey olup olmadığını veya hızın HD'nin bir sınırlaması olup olmadığını bilmek istiyorum .


Blok boyutunuzu sabit sürücülere daha uygun bir şekilde değiştirin. dd bs=1MÖrneğin.
Patrick

Ne kadar hız alıyordunuz? Tüm bir 3 TB (örneğin) HDD'yi yazmak biraz zaman alır. Ayrıca iostat -kx 10sürücüdeki meşgul yüzdesinin ne olduğunu kontrol edin .
derobert

5
shred -v -n 1 /dev/overwritethishızlı. Bir shredşey için gerçekten yararlı olan tek durumla ilgili .
frostschutz

@derobert: Ne kadar hızlı olduğunu tam olarak söyleyemem, ama birkaç saatliğine ayrıldım, geri döndüm ve bunu ilk denediğimde 500G dahili HD'm için yaklaşık% 10 tamamlandı. "İostat" ipucu btw için teşekkürler
bitflips

@Patrick: Arch CD'yi bir usb'ye nasıl koyacağınıza dair kılavuzda gördüğüm için bs = 4M'yi körü körüne denedim. Biraz yardımcı oldu, ama yine de oldukça yavaştı.
bitflips

Yanıtlar:


14

dd if=/dev/urandom of=/dev/sdaveya basitçe cat /dev/urandom >/dev/sda , bir diski rastgele verilerle doldurmanın en hızlı yolu değildir. Linux en /dev/urandomhızlı kriptografik RNG değil. / Dev / urandom'a bir alternatif var mı? bazı önerileri var. Özellikle, OpenSSL daha hızlı bir şifreleme PRNG içerir:

openssl rand $(</proc/partitions awk '$4=="sda" {print $3*1024}') >/dev/sda

Sonunda, bir gelişme olup olmadığının hangi kısmın darboğaz olduğuna bağlı olduğunu unutmayın: CPU veya disk.

İyi haber, diskin rastgele verilerle doldurulması çoğunlukla işe yaramaz. Birincisi, ortak bir efsaneyi ortadan kaldırmak için sıfırlarla silmek bugünün donanımında olduğu kadar iyidir . 1980'lerin sabit disk teknolojisi ile, sıfırları olan bir sabit diskin üzerine yazmak, biraz pahalı bir donanımla kurtarılabilecek küçük bir artık ücret bıraktı; rastgele verilerle birden çok üstüne yazma geçişi (“Gutmann mendili”) gerekliydi. Bugün, sıfırlarla tek bir üzerine yazma geçişi bile, laboratuvar koşullarında bile gerçekçi bir şekilde kurtarılamayan veriler bırakıyor.

Bir bölümü şifrelediğinizde, şifrelenmiş verilerin gizliliği için diskin rastgele verilerle doldurulması gerekmez. Yalnızca şifrelenmiş verilerin kullandığı alanı kullanılmayan alandan ayırt edilemez hale getirmeniz gerektiğinde yararlıdır. Rasgele olmayan bir kabın üzerine şifreli bir birim oluşturmak, şifreli birim tarafından hangi disk bloklarının kullanıldığını gösterir. Bu, dosya sisteminin maksimum boyutu hakkında iyi bir ipucu verir (zaman geçtikçe daha kötü ve daha kötü bir yaklaşım haline gelecektir) ve biraz daha fazlası.


4
Gutmann bütünüyle bir efsane, aslında 1980'lerin sabit diski için de yapıldığını sanmıyorum. İronik olan, disklerin daha akıllı hale gelmesiyle, günümüzde sürücünün serbest sektör (trim) veya verileri sıkıştırmak yerine yazmak zorunda kaldığından emin olmak için rastgele verileri kullanmanızdır. Sıfırlar yalnızca gerçekten yazılmışlarsa iyidir.
frostschutz

1
@mellowmaroon Evet, cat /dev/zeroneredeyse her zaman yeterlidir. Yalnızca şifrelenmiş birimde ne kadar alan boş kaldığını gizlemek istiyorsanız yeterli değildir.
Gilles 'SO- kötü olmayı kes'

1
@mellowmaroon Neredeyse işe yaramaz. Bir kulak misafiri en fazla X MB veriye sahip olduğunuzu bilecektir (ve muhtemelen çok daha azdır, çünkü daha önce kullanılmış ama şimdi özgür olan alan kullanılan alandan ayırt edilemez), ne olacak? Ayrıca boş alanın konumu dosya sistemi türünü ortaya çıkarabilir (süper blok kopyalar); bu nadiren endişe vericidir ( /etc/fstabkök bölümü şifrelemediyseniz ve genellikle o kadar çok makul seçenek yoktur).
Gilles 'SO- kötü olmayı bırak'

2
@Gilles Ubuntu 13.10'da karşılaştığım sorun openssl rand, üreteceği bayt sayısı üzerinde bir üst sınıra sahip gibi görünüyor. Bu sınırı aşarsanız, örneğin 'openssl rand 810000000000 , then no random output is generated. Only a brief "help" text is printed. I'm trying to random (pretty much) fill a 3TB hard drive. Not sure if there is a way to get openssl` bu rastgele bayt üretmek için açılır.
irrasyonel John

1
İrrasyonel John'un üst limit problemi için 7510 GB'a 810 milyar bayt çıkıyor. Diskinizi birden fazla 700 GB'lık bölümlere ayırmaya, sonra openssl randsda5'ten veya her neyse başlayarak her bölümdeki komutu çalıştırıp sda1 ve son olarak sda'ya geri dönmeye ne dersiniz?
jia103

6

OpenSL benim için işe yaramadı. "Bilinmeyen seçenekler" ve sağlanan çözümler ile ilgili diğer sorunlar var. Böylece fio programına devam ettim.

fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0

Bu 24 HDD'de 19 TB yapmak için 3 saat sürüyor gibi görünüyor. Yani yaklaşık 1.800 MB / s

smp-016:~ # fdisk -l /dev/md0
Disk /dev/md0: 18890.1 GB, 18890060464128 bytes

smp-016:~ # fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0
fill: (g=0): rw=write, bs=512M-512M/512M-512M/512M-512M, ioengine=libaio, iodepth=4
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [2.7% done] [0KB/1536MB/0KB /s] [0/3/0 iops] [eta 03h:01m:11s]

Umarım bu aslında rastgele verilerdir. Man sayfası fio "Varsayılan: arabellekleri rastgele verilerle doldur" diyor. http://linux.die.net/man/1/fio

Güvenli / şifreleme amacıyla yapmıyorum, daha sonra okuduğum testlerin sadece 0 değil gerçek veriler olduğundan emin olmaya çalışıyorum. Aynı fio komutu SSD / NVMe ön koşullandırma için kullanılabilir. Sadece / dev / zero kullanıldığında, disk düzeyi sıkıştırması gerçekte ne kadar yazıldığını "aldatır". Buna bir -loops=2bayrak eklesem de, kıyaslama için yeni bir SSD ise.

Eğer güvenli olmasını istediyseniz, bu -randrepeat=bool seçeneği kullanabilirsiniz , çünkü bu sonuçlar rastgele çalışır. bunun ne kadar güvenli olacağından emin olabilirsiniz.

Ek olarak, bazı kurumsal sınıf HDD'ler SED (Kendiliğinden Şifrelemeli Sürücüler) vardır ve yazılı tüm verileri anında ve güvenli bir şekilde silmek için şifreleme anahtarını döndürmenizi sağlar.

Son olarak, geçmişte CD ve USB önyükleme seçeneklerine sahip olan ve "SourceForge'da barındırılan açık kaynaklı bir proje olan DBAN'ı (diğer adıyla Darik'in Önyükleme ve Nuke) kullandım. Program verileri sabitlenene kadar bir sabit diski güvenli bir şekilde silmek için tasarlanmıştır. kaldırıldı ve artık kurtarılamaz "


1
Boyut =% 100 benim için çalışmadı, ancak fill_device = 1 (veya fill_fs = 1) işe yaradı.
d.jamison

Ben bunu bir blok düzeyinde cihaz veya doldurmak için bir dosya sistemi vererek bağlı olacağını düşünüyorum. Blok seviyesi cihaz ile ne kadar büyük olduğunu ve boyutun cihaz boyutunun bir yüzdesi olduğunu bilir. Fill_device aygıt tam hatası alana kadar gider. Ben fill_device bayrağı herhangi bir dosyanın üzerine, sadece kullanılmayan alanın üzerine olmayabilir. Aygıt testi yaparken gerekli olmadıkça genellikle dosya sistemlerinden kaçtığım için bunu test etmedim.
TaylorSanchez

6

OpenSSL'nin /dev/zerorastgele bir parolayla şifrelenmesini sağlayarak, iyi sahte sahte verileri çok hızlı bir şekilde verebilirsiniz (CPU'nuz bunu hızlandırmayı destekliyorsa).

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | dd of=/dev/sda

Bunu boru ile yapabilirsiniz pvİlerleme / ETA almak için . Şu anda çalıştırdığım komutlar (bir kök kabukta):

DISK="sda"
DISKSIZE=$(</proc/partitions awk '$4=="'"$DISK"'" {print sprintf("%.0f",$3*1024)}')
apt-get install pv
openssl enc -aes-256-ctr -nosalt \
  -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
  < /dev/zero |
  pv --progress --eta --rate --bytes --size "$DISKSIZE" |
  dd of=/dev/"$DISK" bs=2M

Gilles'in yukarıdaki cevabı üzerine yorum yapan irrasyonel John ile aynı problemi yaşadıktan sonra bu fikri bu cevaptan aldım . Bu, silme hızımı yeni RAID dizime 11 MB / sn'den 300 MB / sn'ye yükseltti ve bir hafta sürecek olanı 10 saate indirdi.

Yukarıdaki daha karmaşık bir ifade yerine kullanabilmeniz gerektiğini ekleyeceğim , ancak sadece 16 MB çıktı üretmeye izin verecek bir hata var . (Bu hata, Ocak 2016'da dosyalanmıştır.)openssl rand #of_bytesopenssl enc ...ssl

Ve bu sorunun cevabına göre göre ve CPU'nun darboğaz olduğunu varsaymaya devam ederek openssl, ayrı çekirdeklerde birden fazla paralel işlem yaparak ve bunları bir FIFO kullanarak birleştirerek hızı daha da arttırmak mümkün olabilir .


Düzenlemenin gerekli olduğundan emin değilim. Bu sorunun diğer cevapları önerilmektedir openssl rand.
tremby

2
Ölçüt:: dd if=/dev/urandom18MiB / s openssl enc,: ~ 180MiB / s fio,: 169MiB / s, openssl randdestek yok> 754GB. Ayrıca otomatik boyut hesaplama istiyorsanız Not kullandığını: openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt </dev/zero | pv --progress --eta --rate --bytes --size $(</proc/partitions awk '$4=="sda" {print sprintf("%.0f",$3*1024)}') | dd of=/dev/sda bs=2M. Dikkat, sdabu komutta iki kez bulunur.
KrisWebDev

0

Marco'nun cevabını tamamlayarak, ihtiyacınız olan daha hızlı rastgele sayı üretecidir.

Rastgele sayıları iyi bir kütüphaneden yansıtan basit bir program boost::randomkullanırsınız ve bunu da kullanırsınız dd.

Yükseltmeyi seçerseniz , işlevi ihtiyaçlarınıza göre değiştirerek bu örneği kullanabilirsiniz experiment.


Sisteminizdeki boost çözümü ne kadar hızlı? Makinemdeki bilimsel olmayan hızlı bir karşılaştırma, tam olarak aynı hızı verir /dev/urandom.
Marco

boost::randomkripto RNG sunmuyor, değil mi? Kripto olmayan bir RNG kullanacaksanız, sıfır da kullanabilirsiniz: en azından bir güvenlik illüzyonuna sahip olmayacaksınız.
Gilles 'SO- kötü olmayı kes'

Ne kadar hızlı boost::randomjeneratörler olduğu konusunda net olamıyorum, kesin olarak bilmenin tek yolu en hızlı algoritmalarını ölçmektir/dev/urandom
RSFalcon7

0

Tıkanıklık ne blok boyutu ne de sabit disk, ancak yavaş rasgele sayılar üretilir. /dev/urandombüyüklüklerine göre daha hızlı/dev/random bu düşük entropi havuzu engelleme değil çünkü.

Sözde rasgele sayılarınızın ham çıktısını ölçerek bunu doğrulayabilirsiniz:

pv /dev/urandom >/dev/null

Bu oran, sabit sürücünüzün yazma hızından çok daha yavaş olacaktır. Doğru bir çözüm tamamen gerekli güvenlik seviyenize bağlıdır. Yüksek güvenliğe ihtiyacınız varsa, hızlı bir donanım rasgele oluşturucu kullanın veya düşük hızı kabul edin. Güvenlik gereksinimleriniz bu kadar yüksek değilse, birkaç düzine MiB veri yakalayabilir ve bu dizeyi tekrar tekrar sürücüye yazabilirsiniz. Ya da belki sıfırdan yazmak bile /dev/zerobir seçenektir.

özet

/dev/random - güvenli, çok yavaş
/dev/urandom- daha az güvenli¹, yavaş
donanım RNG - güvenli, hızlı, çok pahalı
( /dev/zero - hiç rastgele değil, çok hızlı)

To göre / dev / urandom'dan bir rand bir giriş anahtarı için güvenli mi? /dev/urandomkadar güvenli /dev/random. Gilles'e bunu işaret ettiği için teşekkürler.


O zaten kullanıyor urandom.
Patrick

Aslında. Demek istediğim urandom bile ihtiyaçları için çok yavaş, bu yüzden urandom'dan farklı bir çözüme ihtiyacı var.
Marco


@Gilles Bağlantı için teşekkürler. Man sayfası açıkça şunları ifade eder: … Sonuç olarak, entropi havuzunda yeterli entropi yoksa, döndürülen değerler teorik olarak bir kriptografik saldırıya karşı savunmasızdır… Bu yüzden onu daha az güvenli olarak sınıflandırdım.
Marco

0

dd if=/dev/urandom of=/dev/sdX status=progressÇok yavaş bir 4 TB harici USB HDD doldurmaya çalışıyordum ( bs=ayarlara bakılmaksızın ) ve opensslne kadar rasgele veri (en azından sürüm 1.0.2p) için bir kapak var gibi görünüyor . Bulduğum en iyi seçenek frostschutz gelen açıklama kullanımına shredgibi:

shred -v -n 1 /dev/sdX

-n 1Aksi takdirde cihazı varsayılan olarak 3 kez yazmanın (artı -vilerleme durumunu gösteren) kullandığınızdan emin olun . Sahte rasgele sayıların kalitesinin o kadar yüksek olduğunu düşünmüyorum , ancak şifreleme için büyük kapasiteli bir taşınabilir HDD hazırlamak benim için yeterli.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.