Có một sự thay thế cho / dev / urandom không?


21

Có cách nào nhanh hơn / dev / [u] ngẫu nhiên không? Đôi khi, tôi cần làm những việc như

mèo / dev / urandom> / dev / sdb

Các thiết bị ngẫu nhiên "quá" an toàn và không may là quá chậm. Tôi biết rằng có wipevà các công cụ tương tự để xóa an toàn, nhưng tôi cho rằng cũng có một số phương tiện trên tàu trong Linux.


Tương đương trên StackOverflow: stackoverflow.com/questions/841356/NH
David Z


1
Không phải là cách tốt hơn để làm điều này .. Có thể là ứng cử viên cho giải thưởng UUoC?
Tom O'Connor

Câu trả lời:


12

Nếu bạn đang tìm cách xóa "an toàn" ổ đĩa cứng (hoặc tệp), bạn nên xem tiện ích shred.

Như các áp phích trước chỉ ra, các thiết bị ngẫu nhiên / dev / * được sử dụng như một nguồn dữ liệu ngẫu nhiên nhỏ.


1
Theo trang man, 'shred' sử dụng / dev / urandom. Vì vậy, trong khi một câu trả lời tốt cho việc xóa đĩa, nó sẽ không tăng tốc hơn bất kỳ kỹ thuật nào khác đọc từ / dev / urandom. (Một mẹo khác nếu sử dụng 'shred': hầu hết mọi người có thể sẽ hạnh phúc hơn với 1-2 đường chuyền, thay vì số lượng mặc định khổng lồ, để việc xóa sạch không mất nhiều ngày.)
gojomo

4
Trên thực tế chia là nhiều nhanh hơn / dev / urandom. Tôi đoán là nó cung cấp dữ liệu giả danh riêng bằng cách sử dụng / dev / urandom hoặc / dev / ngẫu nhiên làm hạt giống.
thomasrutter

24

Thật không may Linux đã thực hiện xấu urandom. Bạn có thể sử dụng aes256-ctr với một khóa ngẫu nhiên và nhận được hàng trăm megabyte giả ngẫu nhiên mỗi giây, nếu CPU của bạn hỗ trợ AES-NI (tăng tốc phần cứng). Tôi đang mong chờ urandom chuyển sang một cách tiếp cận hiện đại.

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

Chú chó con này có 1.0 GB / s trên hộp của tôi (so với 14 MB / s của / dev / urandom). Nó chỉ sử dụng urandom để tạo mật khẩu ngẫu nhiên và sau đó thực hiện mã hóa / dev / zero rất nhanh bằng khóa đó. Đây phải là một PRNG bảo mật bằng mật mã nhưng tôi sẽ không đảm bảo.


Cảm ơn bạn vì câu trả lời tuyệt vời này, tôi đã có thể tăng từ 9,5 MB / s với / dev / urandom lên hơn 120 MB / s với openssl.
GDR

Ngoại trừ tuyên bố đầu tiên rằng Linux có triển khai xấu về urandom , tôi chấp nhận câu trả lời này. Đủ tốt để xóa (hoặc điền?) Đĩa cứng trước khi mã hóa.
Vikrant Chaudhary

5
Đi qua pvcho một chỉ số tiến bộ tốt đẹp. 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 tạo ra các số ngẫu nhiên giả chất lượng cao, chắc chắn, nhưng đó không phải là lý do cho việc chậm. Chế độ truy cập AES nhanh hơn nhiều và rất khó để tranh luận làm thế nào nó sẽ kém an toàn hơn so với / dev / urandom.
Perseids

1
Chỉ cần để thêm vào các pvkhuyến nghị, bạn có thể đường ống để pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbpvcho bạn thấy những tiến bộ hướng tới kết thúc ghi.
asciiphil

7

Trong thử nghiệm nhanh với Ubuntu 8.04 trên Thinkpad T60p với CPU T2500, 1GB dữ liệu ngẫu nhiên từ openssl randnhanh hơn 3-4 lần so với /dev/urandom. Đó là,

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

... là khoảng 4 phút trong khi ...

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

... chỉ hơn 1 phút.

Không chắc chắn nếu có sự khác biệt về chất lượng ngẫu nhiên, nhưng có lẽ cũng tốt cho việc xóa HD.


5

Tôi thấy rất nhiều câu trả lời nói rằng sử dụng dữ liệu ngẫu nhiên không quan trọng. Điều đó khá đúng nếu tất cả những gì bạn đang cố gắng làm là xóa sạch ổ đĩa, nhưng sẽ không quá nhiều nếu bạn xóa sạch nó để chuẩn bị mã hóa đĩa.

Nếu bạn điền vào một thiết bị với dữ liệu không ngẫu nhiên thì đặt một phân vùng được mã hóa trên đó, bạn có thể gặp phải sự cố. Phần của ổ đĩa đang lưu trữ dữ liệu được mã hóa sẽ nổi bật so với phần còn lại của ổ đĩa, vì dữ liệu được mã hóa sẽ trông ngẫu nhiên và phần còn lại sẽ không. Điều này có thể được sử dụng để xác định thông tin về đĩa tiền điện tử có thể được sử dụng để bẻ khóa nó. Liên kết dưới đây giải thích lý thuyết đằng sau cách một số cuộc tấn công phổ biến hoạt động và cách phòng thủ chống lại chúng (trên Linux, dù sao đi nữa).

Cài đặt mã hóa đĩa cứng Linux


1
Rất đúng. Với các đĩa tương đối hiện đại (> 20 GB), bất kỳ ghi đè đơn lẻ nào cũng được xóa sạch. Ngay cả NSA và lượt thích cũng khó có thể nhận được bất kỳ lượng dữ liệu đáng kể nào từ ổ đĩa. Và nó rất tốn kém. Hãy suy nghĩ 100.000 đô la mỗi megabyte. Nhận xét về mã hóa là rất đúng. Bạn muốn các phần không được sử dụng của đĩa trông "ngẫu nhiên" như các phần được sử dụng.
Tonny

Không phải phần mềm mã hóa thiết bị của bạn ngẫu nhiên hóa toàn bộ đĩa?
Nathan Garabedian

5

Nếu bạn cần xóa HD một cách an toàn, có một công cụ rất mạnh: DBAN


5

Nếu bạn muốn xóa một thiết bị khối lớn thì tôi đã thấy nó mạnh hơn khi sử dụng ddvà trình ánh xạ thiết bị thay vì chuyển hướng dữ liệu ngẫu nhiên. Sau đây sẽ ánh xạ /dev/sdbtới /dev/mapper/deviceToBeEraseden- và giải mã trong suốt ở giữa. Để điền vào thiết bị ở đầu được mã hóa, các số không được sao chép vào phía văn bản đơn giản của trình ánh xạ ( /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

Dữ liệu được mã hóa trên /dev/sdbđược đảm bảo không thể phân biệt với dữ liệu ngẫu nhiên nếu không có điểm yếu nghiêm trọng trong AES. Khóa được sử dụng được lấy từ /dev/random(đừng lo lắng - nó chỉ sử dụng 32 byte).



2

Công cụ của bạn càng nhanh thì kết quả sẽ càng kém an toàn. Tạo ra sự ngẫu nhiên tốt cần có thời gian.

Dù sao, bạn có thể sử dụng cái gì đó như dd if = / dev / zero of = / dev / sdb , nhưng rõ ràng điều đó sẽ không phải là ngẫu nhiên, nó sẽ xóa nhanh hơn nhiều.

Một tùy chọn khác có thể là sử dụng phương thức này / sbin / badblocks -c 10240 -s -w -t ngẫu nhiên -v / dev / sdb, nó nhanh hơn urandom, nhưng PRNG badblocks ít ngẫu nhiên hơn.


1
và thành thật mà nói - đây là SỐ LƯỢNG bảo mật cho ổ đĩa
warren

Nhiều ghi đè, như shred làm, mất thời gian và cung cấp bảo mật tốt hơn so với ghi đè lên dữ liệu ngẫu nhiên "hoàn hảo".
Tạm dừng cho đến khi có thông báo mới.

"Công cụ của bạn càng nhanh thì kết quả sẽ càng kém an toàn. Tạo ra sự ngẫu nhiên tốt cần có thời gian." - Đo không phải sự thật. Trình tạo số ngẫu nhiên của chế độ truy cập AES (giả) được phân tích tốt hơn nhiều và các đơn đặt hàng có cường độ nhanh hơn / dev / urandom. (Xem câu trả lời của Tronic.)
Perseids

2

/dev/random sử dụng rất nhiều entropy hệ thống và do đó chỉ tạo ra luồng dữ liệu chậm.

/dev/urandom ít an toàn hơn và nhanh hơn, nhưng nó vẫn hướng đến những khối dữ liệu nhỏ hơn - nó không có nghĩa là cung cấp một dòng số ngẫu nhiên tốc độ cao liên tục.

Bạn nên tạo một PRNG cho thiết kế của riêng bạn và gieo nó với một cái gì đó từ /dev/randomhoặc/dev/urandom . Nếu bạn cần ngẫu nhiên hơn một chút, hãy gieo hạt theo định kỳ - cứ sau vài MB (hoặc bất kể độ dài của prng của bạn là bao nhiêu). Nhận 4 byte (giá trị 32 bit) từ urandom hoặc ngẫu nhiên là đủ nhanh để bạn có thể thực hiện việc này cứ sau 1k dữ liệu (lấy lại prng của bạn sau mỗi 1k) và nhận được kết quả rất ngẫu nhiên, trong khi rất nhanh chóng.

-Adam


7
Rất hiếm khi ai đó có thể viết trình tạo số ngẫu nhiên của riêng họ tốt hơn so với những người đã có sẵn. Thường xuyên hơn không, kết quả là một mô hình có thể dự đoán được và cảm giác an toàn sai lầm. Tôi sẽ khuyên bạn nên sử dụng shred trên một ổ đĩa thông qua mục nhập / dev hoặc phá hủy vật lý rất kỹ lưỡng.
Tạm dừng cho đến khi có thông báo mới.

Tôi đồng ý. Tôi sẽ sử dụng shred, theo mặc định sử dụng urandom (mà tôi thực sự không thấy chậm). Lưu ý, có thể sử dụng / dev / Random với shred (bằng cách chỉ định --random-source = / dev / Random) nếu bạn rất kiên nhẫn.
Matthew Flaschen

2

Nếu bạn muốn xóa sạch ổ cứng một cách nhanh chóng, hãy ghi dữ liệu không hợp lệ vào nó. Điều này không kém phần an toàn so với việc sử dụng dữ liệu ngẫu nhiên. Dù bằng cách nào, khi được nối với máy tính, dữ liệu gốc không thể đọc được. Ghi đè dữ liệu ổ cứng: Cuộc tranh cãi về xóa sổ lớn cho thấy dữ liệu gốc không thể được đọc bằng kính hiển vi.


2

Định dạng với LUKS và dd trên khối lượng được mã hóa. Sau đó sử dụng / dev / urandom để xóa tiêu đề LUKS.

Nếu bạn có hỗ trợ AES phần cứng thì đây là một giải pháp rất nhanh.

Ngắn gọn:

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

làm xong!

Xem blog của tôi: Nhanh chóng lấp đầy đĩa bằng các bit ngẫu nhiên (không có / dev / urandom)


Tại sao bạn bận tâm với LUKS nếu tất cả những gì bạn muốn làm là ghi đè lên thiết bị? Plain dm-crypt ("chế độ đơn giản" của cryptsetup) dễ sử dụng hơn cho việc đó.
Perseids

2

Nếu bạn muốn xóa một ổ cứng, dd không xóa nội dung của các khu vực được phân bổ lại và rất chậm nếu ổ cứng bị chết. Thay vào đó, bạn có thể sử dụng các ổ đĩa được xây dựng trong chức năng xóa, đã được chuẩn hóa trong một thời gian dài.

Trong ví dụ này, tôi đang xóa một ổ cứng cơ 500 GB chỉ trong 102 phút. Ngay cả khi nó có đầy đủ các lĩnh vực được phân bổ lại:

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 

Bạn có thể xem thêm chi tiết tại ata.wiki.kernel.org , tuy nhiên ví dụ của họ không sử dụng - bảo mật-xóa được tăng cường, cần thiết để xóa các lĩnh vực được phân bổ lại trước khi đề cập đến.


1

Trong thực tế có lẽ không cần phải gieo toàn bộ đĩa từ một luồng ngẫu nhiên liên tục.

Bạn có thể tạo một khối dữ liệu ngẫu nhiên có kích thước khiêm tốn và sau đó chỉ cần lặp đi lặp lại dữ liệu đó trên đĩa.

Chỉ cần đảm bảo rằng khối dữ liệu đó không phải là bội số của kích thước khối thông thường của đĩa, để đảm bảo rằng bạn không ghi đè lên các khối dữ liệu tương quan với cùng một bit dữ liệu ngẫu nhiên. Kích thước khối là số nguyên tố trong phạm vi ~ 1MB sẽ hoạt động tốt.

Để bảo mật hơn, chỉ cần thực hiện thêm một vài lần, sử dụng kích thước khối khác nhau mỗi lần.


1

Tiện ích 'shred' rất dễ dàng và nhanh chóng. Nếu các thuộc tính SMART của ổ đĩa chỉ ra các khu vực được phân bổ lại bằng 0, thì 'shred' có thể đủ an toàn.

Tuy nhiên, nếu ổ đĩa có các khu vực được phân bổ lại, dữ liệu về các khu vực bị hư hỏng sẽ không bị ghi đè. Nếu các vị trí bị hỏng chứa dữ liệu nhạy cảm trước khi chúng được phân bổ lại, 'shred' có thể không đủ tốt. Các thành phần 'xấu' có thể được đọc bằng cách đặt lại bản đồ phân bổ của ổ đĩa và (lặp đi lặp lại) đọc chúng.

Khả năng thiết lập lại bản đồ phân bổ khu vực xấu khác nhau tùy thuộc vào nhà sản xuất và mô hình ổ đĩa.


0

Nếu tất cả những gì bạn muốn làm là ghi đè lên đĩa, thì đó không phải là vấn đề bạn sử dụng vì mọi thứ sẽ đánh bại bất cứ thứ gì trong phòng thí nghiệm pháp y và tôi sẽ không tin bất cứ thứ gì thiếu vào ổ đĩa để ngăn chặn mức tài nguyên đó .

Chỉ cần sử dụng một nguồn không ngẫu nhiên như tất cả các số không hoặc số không hoặc một mẫu lặp lại như (tôi nghĩ rằng điều này sẽ hoạt động)

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

Đó có thể là trường hợp, nhưng đôi khi bạn không thể thuyết phục được quản lý rằng bảo mật được truyền bởi một ghi ngẫu nhiên thực sự không lớn hơn việc sử dụng tất cả các số không với mức công nghệ cần thiết để khôi phục dữ liệu là như nhau cho cả hai kịch bản. Trong trường hợp này, tốt hơn là đáp ứng yêu cầu bằng cách xây dựng trình tạo số ngẫu nhiên nhanh của riêng bạn.
Adam Davis

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.