/ Dev / urandom'a bir alternatif var mı?


21

/ Dev / [u] rasgele olduğundan daha hızlı bir yolu var mı? Bazen böyle şeyler yapmam gerekir

cat / dev / urandom> / dev / sdb

Rastgele cihazlar "çok" güvenli ve ne yazık ki bunun için çok yavaş. wipeGüvenli silme işlemi için benzer araçlar olduğunu biliyorum , ancak sanırım Linux'ta bunun için bir takım araçlar da var.


StackOverflow'ta Eşdeğer: stackoverflow.com/questions/841356/…
David Z


1
Dd bunu yapmak için daha iyi bir yol değil mi .. Muhtemelen UUoC ödülü için bir yarışmacı?
Tom O'Connor,

Yanıtlar:


12

Bir sabit sürücünün (veya dosyanın) "güvenli" bir şekilde silinmesini istiyorsanız, parçalama yardımcı programına bakmanız gerekir.

Önceki posterlerin işaret ettiği gibi, / dev / * rasgele cihazlarının küçük rasgele veri parçaları olarak kullanılması amaçlanmıştır.


1
Man sayfasına göre 'shred' / dev / urandom kullanır. Bu yüzden diski silmek için iyi bir cevap olsa da, / dev / urandom'dan okunan diğer herhangi bir teknikte hızlanma teklifinde bulunmaz. ('Shred' kullanıyorsanız başka bir ipucu: çoğu kişi muhtemelen dev varsayılan sayım yerine 1-2
geçişle

4
Aslında parçalama / dev / urandom'dan çok daha hızlı. Benim tahminim, tohum olarak / dev / urandom veya / dev / random kullanarak kendi sahte ve verilerini sağlıyor.
thomasrutter

24

Ne yazık ki Linux, urandomun kötü uygulanmasına sahiptir. İşlemciniz AES-NI (donanım hızlandırması) özelliğini destekliyorsa, aes256-ctr'yi rastgele bir anahtarla kullanabilir ve saniyede birkaç yüz megabayt sözde rastgelelik elde edebilirsiniz. Modern bir yaklaşıma geçiş yapmak için sabırsızlanıyorum.

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

Bu köpek yavrusu, kutumda 1.0 GB / sn (14 MB / sn / dev / urandom ile karşılaştırıldığında) kullanıyor. Urandomu yalnızca rastgele bir parola oluşturmak için kullanır ve daha sonra bu anahtarı kullanarak / dev / zero şifresini çok hızlı bir şekilde yapar. Bu kriptografik olarak güvenli bir PRNG olmalıdır, ancak garanti vermem.


Bu müthiş cevap için teşekkür ederim, openssl ile 9.5 MB / sn'den / dev / urandom ile 120 MB / sn'ye yükselebildim.
GDR

Linux'un urandomun kötü bir şekilde uygulandığı ilk ifadesi dışında , bu cevabı onaylıyorum. Şifrelemeden önce bir sabit diski silmek (veya doldurmak?) İçin yeterince iyi.
Vikrant Chaudhary

5
Geçiş pvgüzel ilerleme göstergesi için. 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, yüksek kalitede sahte rasgele sayılar üretir, elbette, ancak bu yavaş olmak için mazeret değil. AES sayacı modu çok daha hızlıdır ve / dev / urandom'dan daha az güvenli olacağını tartışmak zordur.
Perseids,

1
Sadece pvtavsiyeye eklemek için , yazma işlemini tamamlama yolunda ilerlemenizi göstermek pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbüzere boru oluşturabilirsiniz pv.
asciiphil

7

Ubuntu 8.04 altında, T2500 CPU'lu Thinkpad T60p üzerinde yapılan hızlı bir testte, 1GB'lık rasgele veri openssl rand, 3-4X'ten daha hızlıydı /dev/urandom. Yani,

time cat /dev/urandom | head -c 1000000000 > /dev/null

... yaklaşık 4 dakika oldu ...

time openssl rand 1000000000 | head -c 1000000000 > /dev/null

... 1 dakikadan biraz fazla oldu.

Rastgele kalitede bir fark olup olmadığından emin değilsiniz ancak HD silmede muhtemelen sorun yok.


5

Rasgele veri kullanmanın önemli olmadığını söyleyen birçok cevap görüyorum. Yapmaya çalıştığınız tek şey sürücüyü silmekse, disk şifrelemesi için hazırlanırken silmeyi seçiyorsanız bu oldukça doğru.

Bir cihazı rastgele olmayan verilerle doldurursanız, üzerine şifrelenmiş bir bölüm yerleştirin, bir sorunla karşılaşabilirsiniz. Şifreli verileri depolayan sürücünün kısmı, sürücünün geri kalanından sıyrılacak çünkü şifreli veriler rastgele görünecek ve geri kalanı görünmeyecek. Bu, onu kırmada kullanılabilecek kripto diski hakkındaki bilgileri belirlemek için kullanılabilir. Aşağıdaki bağlantı, bazı yaygın saldırıların nasıl çalıştığını ve bunlara karşı nasıl savunacağını açıklayan teoriyi açıklamaktadır (Linux'ta, yine de).

Linux sabit disk şifreleme ayarları


1
Çok doğru. Nispeten modern disklerde (> 20 GB) herhangi bir tek geçişin üzerine yazma işlemi yeterince silinir. NSA ve benzerleri bile, sürücüden önemli miktarda veri almak için zorlanacaktır. Ve bu çok pahalı. Megabayt başına 100.000 dolar düşünün. Şifreleme ile ilgili sözler çok doğru. Diskin kullanılmayan kısımlarının kullanılan kısımlar kadar "rastgele" görünmesini istiyorsunuz.
Tonny,

Cihaz şifreleme yazılımınız tüm diski rastgele yapmıyor mu?
Nathan Garabedian

5

Bir HD'yi güvenli bir şekilde silmeniz gerekirse, çok güçlü bir araç var : DBAN


5

Büyük bir blok cihaz silmek istiyorsanız o zaman ddrastgele verilerin çıkış yönlendirmesi yerine kullanmak ve daha fazla cihaz eşleştiricisi kullanmak buldum . Aşağıdaki eşler /dev/sdbiçin /dev/mapper/deviceToBeErasedtr ve aradaki transparantly şifresini. Aygıtı şifreli uçta doldurmak için, sıfırlar eşleştiricinin düz metin tarafına ( /dev/mapper/deviceToBeErased) kopyalanır .

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/sdbAES'de ciddi bir zayıflık yoksa, şifrelenmiş verinin rastgele verilerden ayırt edilemeyeceği garanti edilir . Kullanılan anahtar /dev/randomelinden alınır (endişelenmeyin - yalnızca 32 bayt kullanır).



2

Aracınız ne kadar hızlı olursa, sonuç o kadar az güvenli olur. İyi rastgelelik üretmek zaman alır.

Her neyse, eğer = / dev / zero of = / dev / sdb = dd gibi bir şey kullanabilirsiniz , fakat açıkça rastgele olmayacak, sadece çok daha hızlı silecektir.

Başka bir seçenek bu yöntemi kullanmak olabilir / sbin / badblocks -c 10240 -s -w -t rasgele -v / dev / sdb urandomdan daha hızlıdır, ancak badblocks PRNG daha az rastgeledir.


1
ve dürüstçe - bu sürücü için güvenlik PLANTY
warren

Parçalamanın yaptığı gibi, birden fazla üzerine yazma işlemi zaman alır ve "mükemmel" rastgele verilerin üzerine yazıldığından daha iyi güvenlik sağlar.
sonraki duyuruya kadar duraklatıldı.

"Aracınız ne kadar hızlı olursa, sonuç o kadar az güvenli olur. İyi rastgelelik oluşturmak zaman alır." - Bu doğru değil. Bir AES sayıcı modu (sözde) rasgele sayı üreteci çok daha iyi analiz edilir ve büyüklük dereceleri / dev / urandom'dan daha hızlıdır. (Bkz.
Tronic'in

2

/dev/random çok fazla sistem entropisi kullanır ve bu nedenle yalnızca yavaş bir veri akışı üretir.

/dev/urandom daha az güvenli ve daha hızlıdır, ancak yine de daha küçük veri parçalarına yöneliktir - sürekli yüksek hızlı rasgele sayı akışı sağlamak anlamına gelmez.

Kendi tasarımınızın bir PRNG'sini yapmalı ve onu /dev/randomveya içinden bir şeyle tohumlamalısın /dev/urandom. Biraz daha rastgele ihtiyacınız olursa, periyodik olarak tohumlayın - her birkaç MB'de (veya prng'nizin uzunluğu ne olursa olsun). Urandomdan veya rastgele 4 bayt (32 bit değer) almak, her 1k veriyi (prng'lerinizi her 1k'de yeniden hazırlar) yapabileceğiniz ve çok, çok, çok hızlı bir şekilde giderken çok rastgele sonuçlar alabilmeniz için yeterince hızlıdır.

-Adam


7
Birisinin kendi rasgele sayı üretecini, halihazırda hazır olanlardan daha iyi yazabilmesi çok nadirdir. Çoğu zaman, sonuç tahmin edilebilir bir kalıp ve yanlış bir güvenlik duygusudur. Bir sürücüdeki parçalamasını / dev girişi veya çok ayrıntılı fiziksel yıkım yoluyla kullanmanızı öneririm.
sonraki duyuruya kadar duraklatıldı.

Katılıyorum. Varsayılan olarak urandom kullanan shred'i kullanırdım (ki açıkçası yavaş bulmuyorum). Bir not olarak, eğer çok sabırlıysanız / dev / random komutunu (shred ile birlikte kullanabilirsiniz - --random-source = / dev / random).
Matthew Flaschen


2

LUKS ile formatlayın ve şifreli birimin üzerine dd. Ardından LUKS başlığını silmek için / dev / urandom kullanın.

Donanım AES desteğiniz varsa bu çok hızlı bir çözümdür.

Kısaca:

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

bitmiş!

Bloguma bakın: Bir diski rasgele bitlerle hızlı bir şekilde doldurun (/ dev / urandom olmadan)


Tüm yapmak istediğiniz cihazın üzerine yazmaksa neden LUKS ile uğraşıyorsunuz? Düz dm-crypt (cryptsetup "düz modu") bunun için kullanımı çok kolaydır.
Perseids,

2

Bir sabit sürücüyü silmek istiyorsanız, dd yeniden tahsis edilen sektörlerin içeriğini silmez ve sabit sürücü ölüyorsa çok yavaştır. Bunun yerine, uzun süredir standart hale getirilmiş olan sürücülerin silme işlevini kullanabilirsiniz.

Bu örnekte, 500 GB'lık bir mekanik sabit diski yalnızca 102 dakikada siliyorum. Yeniden tahsis edilen sektörlerle dolu olsa bile:

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 

Daha fazla ayrıntıyı ata.wiki.kernel.org adresinde görebilirsiniz , ancak örnekleri, daha önce bahsedilen yeniden tahsis edilen sektörleri silmek için gerekli olan - security-erase-enhanced kullanmıyor.


1

Uygulamada muhtemelen tüm diski sürekli olarak rastgele bir akımdan ekmeye gerek yoktur.

Mütevazı boyutlu bir rasgele veri yığını oluşturabilir ve daha sonra bunu diskte tekrar tekrar yapabilirsiniz.

Sadece veri yığınının, aynı blok rastgele verinin aynı veri blokları üzerine yazılmamasını sağlamak için diskin normal blok boyutunun bir katı olmadığından emin olun. ~ 1MB aralığında bir asal sayı olan bir yığın boyutu iyi yapmalı.

Ek güvenlik için, her seferinde farklı bir yığın boyutu kullanarak birkaç kez daha yapın.


1

'Shred' yardımcı programı kolay ve hızlı. Sürücünün SMART öznitelikleri sıfır tahsis edilmiş sıfır sıfatı gösteriyorsa, 'parçalama' yeterince güvenlidir.

Ancak, sürücünün yeniden tahsis ettiği sektörler varsa, hasarlı sektörlere ilişkin verilerin üzerine yazılmayacaktır. Zarar görmüş konumlar yeniden tahsis edilmeden önce hassas veriler içeriyorsa, 'parçalama' yeterince iyi olmayabilir. 'Kötü' sektörler, sürücünün tahsis haritasını sıfırlayarak ve (tekrar tekrar) bunları okuyarak okunabilir.

Kötü sektör tahsis haritasını sıfırlama yeteneği, üreticiye ve sürücü modeline göre değişmektedir.


0

Tek yapmak istediğiniz diskin üzerine yazmaksa, ne kullandığınız önemli değil, çünkü herhangi bir şey bir adli tıp laboratuarından başka bir şeyi geçemez ve bu seviyedeki kaynakları durdurmak için sürücüyü cüruf kesmekten başka bir şeye güvenmezdim. .

Sadece tüm sıfırlar veya olanlar gibi rastgele olmayan bir kaynak kullanın veya tekrar eden bir desen kullanın (bunun işe yarayacağını düşünüyorum)

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

Durum bu olabilir, ancak bazen yönetimi rastgele yazma ile sağlanan güvenliğin, verileri kurtarmak için gereken teknoloji seviyesi göz önüne alındığında tüm sıfırları kullanmaktan daha büyük olmadığına ikna edemezsiniz, her iki senaryo için de aynıdır. Bu durumda, kendi hızlı rasgele sayı üretecinizi oluşturarak gereksinimi karşılamak genellikle daha iyidir.
Adam Davis,

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.