Làm cách nào để có / dev / ngẫu nhiên hoạt động trên máy ảo Ubuntu?


19

Rõ ràng, / dev / ngẫu nhiên dựa trên các ngắt phần cứng hoặc các khía cạnh không thể đoán trước tương tự của phần cứng vật lý. Vì máy ảo không có phần cứng vật lý, chạy cat /dev/randomtrong máy ảo không tạo ra gì. Tôi đang sử dụng Ubuntu Server 11.04 làm máy chủ và khách, với libvirt / KVM.

Tôi cần thiết lập Kerberos bên trong máy ảo, nhưng krb5_newrealmchỉ bị treo mãi mãi "Đang tải dữ liệu ngẫu nhiên", vì hệ thống không tạo ra bất kỳ.

Có ai biết làm thế nào để làm việc này không? Có thể chuyển / dev / ngẫu nhiên của máy chủ (rất trò chuyện) vào vm để vm có thể sử dụng dữ liệu ngẫu nhiên của nó không?

Tôi đã đọc rằng có một số lựa chọn thay thế phần mềm, nhưng chúng không tốt cho tiền điện tử vì chúng không đủ ngẫu nhiên.

EDIT: Dường như cat / dev / ngẫu nhiên trên vm không tạo ra đầu ra, chỉ rất, rất chậm. Tôi đã thiết lập vương quốc của mình bằng cách đợi khoảng hai giờ trong khi đó là "Đang tải dữ liệu ngẫu nhiên". Cuối cùng, nó đã có đủ để tiếp tục. Tôi vẫn quan tâm đến một cách để tăng tốc điều này mặc dù.

Câu trả lời:


10

Nó nên 'chỉ hoạt động'. Mặc dù vm không có phần cứng vật lý chuyên dụng, nó vẫn có quyền truy cập vào một số nguồn ngẫu nhiên rất tốt. Ví dụ, nó có thể sử dụng TSC của CPU để tính thời gian đọc từ các đĩa ảo, điều này cuối cùng sẽ kết thúc các đĩa vật lý thời gian đến một phần tỷ giây. Những thời gian này phụ thuộc vào luồng không khí hỗn loạn cắt trong ổ cứng, đó là điều không thể đoán trước.

Logic tương tự áp dụng cho lưu lượng mạng. Mặc dù giao diện được ảo hóa, miễn là gói có nguồn gốc trên mạng vật lý (và không phải cục bộ trong hộp, giả sử bắt nguồn từ một vm khác), thời gian gói phụ thuộc vào độ lệch pha giữa bộ dao động tinh thể trên card mạng và bộ dao động tinh thể điều khiển TSC. Điều này phụ thuộc vào sự thay đổi nhiệt độ vùng vi mô trong hai tinh thể thạch anh. Điều này cũng là không thể đoán trước.

Nếu vì lý do nào đó nó không hoạt động, giải pháp đơn giản nhất là viết chương trình khai thác entropy và thêm nó vào nhóm hệ thống. Giao diện mạng là nguồn đáng tin cậy nhất của bạn. Ví dụ: bạn có thể viết mã vào:

1) Truy vấn TSC.

2) Đưa ra một truy vấn DNS cho một máy chủ được biết là không nằm trên cùng một máy vật lý.

3) Truy vấn TSC khi truy vấn hoàn thành.

4) Lặp lại điều này một vài lần, tích lũy tất cả các giá trị TSC.

5) Thực hiện băm an toàn trên các chức năng TSC tích lũy.

6) Truyền đầu ra của hàm băm an toàn cho nhóm entropy của hệ thống.

7) Theo dõi mức độ hồ bơi entropy và đợi cho đến khi mức thấp. Khi có, quay lại bước 1.

Linux có các lệnh gọi IOCTL đơn giản để thêm entropy vào nhóm, kiểm tra mức độ của nhóm, v.v. Bạn có thể có rngd, có thể lấy entropy từ một đường ống và đưa nó vào nhóm hệ thống. Bạn có thể điền vào đường ống từ bất kỳ nguồn nào bạn muốn, cho dù đó là yêu cầu TSC hoặc 'wget' từ nguồn entropy của riêng bạn.


Về lý thuyết thứ hai của bạn có vẻ thú vị trên lý thuyết, nhưng tôi đã hy vọng một giải pháp không liên quan đến lập trình. Tôi tự hỏi nếu sao chép một tệp lớn vào hoặc từ máy chủ lưu trữ từ ổ đĩa USB sẽ ảnh hưởng đến nhóm entropy của vm (tức là làm cho nó hoạt động nhanh hơn)? Nếu vậy, tôi có thể cố gắng tạo ra vương quốc của mình trong khi chạy bản sao lưu hình ảnh máy trên máy chủ ...
Nick

1
Bạn có thể thực hiện một số thử nghiệm để xem những gì nạp đầy hồ bơi entropy. Một khi bạn tìm thấy một cái gì đó hoạt động, bạn có thể làm điều đó. Lưu lượng mạng nên làm điều đó. Hoạt động ổ đĩa nên làm điều đó. Bạn có thể kiểm tra để xem những gì hoạt động với lệnh này: cat /proc/sys/kernel/random/entropy_availBất cứ điều gì làm tăng hoạt động.
David Schwartz

Hãy nhớ rằng mèo chạy "ăn" entropy (ngẫu nhiên không gian địa chỉ). Bạn có thể sử dụng python -c 'while True: import time; print str(time.sleep(1))[0:0] + open("/proc/sys/kernel/random/entropy_avail", "rb").read(),'. Yeh, thật khó đọc, nhưng tôi thấy không có cách nào để nhập những dòng mới trong các bình luận ...
Doncho Gunchev

10

Tôi sử dụng hasged trên tất cả các máy chủ không đầu của tôi thực hiện các hoạt động mã hóa (ví dụ: bắt tay TLS, kerberos, v.v.). Nó phải có trong kho lưu trữ gói của hầu hết các phiên bản Ubuntu: http://packages.ubfox.com/search?keywords=haveged&searchon=names&suite=all§ion=all

hasged sử dụng thuật toán HAVAGE để trích xuất entropy từ trạng thái bên trong của bộ xử lý hiện đại. Đây là một lời giải thích sâu sắc: http://www.irisa.fr/caps/projects/hipsor/

Bạn có thể kiểm tra tính ngẫu nhiên của entropy được tạo bằng gói ent. Trên hệ thống của tôi, entropy được tạo từ đã vượt qua tất cả các kiểm tra ngẫu nhiên bằng ent


Bạn cũng cần chạy bộ kiểm tra NIST để chắc chắn.
Michael Hampton

7

Vâng, bạn có thể gieo nó, từ:

http://manpages.ubfox.com/manpages/jaunty/man4/random.4.html

Bạn chỉ có thể đặt nó vào / dev / urandom và nó sẽ tạo ra nhóm entropy. Tôi đã có thể xác nhận điều này bằng cách:

root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
128
root@mx01-ewr:/proc/sys/kernel/random# cat /dev/xvda >/dev/urandom  &
[1] 16187 # just using this as a source of data, you could do ssh hostIP 'cat /dev/random' >... etc
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1221
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1398

Phần thưởng nếu bạn thực hiện lệnh ssh đi qua bộ định tuyến để nó tạo ra entropy * :)


Tôi bối rối về phần giữa. Tôi không có "/ dev / xvda" trên hệ thống. Có phải mục tiêu sử dụng ssh để định tuyến / dev / ngẫu nhiên của máy chủ vào vm's / dev / urandom không? Tôi có thể gửi bất cứ thứ gì tôi muốn vào "/ dev / urandom" và nó xuất phát từ "/ dev / ngẫu nhiên"?
Nick

Tôi có thể nhận dữ liệu ngẫu nhiên từ máy chủ bằng cách sử dụng "ssh 192.168.1.1 'cat / dev / Random'", nhưng tôi không biết làm thế nào để nó ảnh hưởng đến khách "/ dev / ngẫu nhiên". "Ssh 192.168.1.1 'cat / dev / Random'> / dev / urandom" dường như không làm gì cả.
Nick

Tôi vừa kiểm tra bằng cách chạy 'cat / dev / Random' trong một thiết bị đầu cuối và đợi cho đến khi nó dừng xuất dữ liệu. Sau đó, trong một lần khác tôi đã làm 'cat somerandomfile> / dev / urandom' và dần dần 'cat / dev / Random' bắt đầu xuất lại công cụ. Có vẻ như bạn cần RẤT NHIỀU đầu vào ngẫu nhiên trên / dev / urandom để tạo đầu vào xứng đáng / dev / ngẫu nhiên. Bạn có nói rằng khi thực hiện con mèo ... '> / dev / urandom bạn không thấy bất kỳ đầu ra nào trên / dev / ngẫu nhiên?
đa thức

Tôi thấy một số đầu ra cuối cùng, nhưng nó rất chậm. Tôi không chắc liệu nó có hơn những gì được sản xuất tự nhiên không. Tôi đã phát hiện ra rằng một lượng dữ liệu ngẫu nhiên rất chậm và nhỏ được tạo ra trong các máy ảo, nó chỉ mất mãi mãi. Tôi đã tạo ra vương quốc của mình sau khi để nó ngồi và "thu thập dữ liệu ngẫu nhiên" trong khoảng 2 giờ.
Nick

+1 cho câu trả lời hữu ích.
Nick

5

Điều này làm việc cho tôi

Chạy krb5_newrealm bên trong VM có thể mất nhiều thời gian để hoàn thành (sau khi hiển thị thông báo "Đang tải dữ liệu ngẫu nhiên"). Bạn có thể sử dụng hack sau để nhanh chóng mọi thứ một chút.

$ sudo aptitude install rng-tools -y
$ sudo rngd -r /dev/urandom -o /dev/random  # don't do this in production!

đăng tại http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md


1

Câu trả lời X86 là đảm bảo VM của bạn không bẫy RdRand hoặc RdSeed. Bạn tin tưởng VM của bạn cho nhiều thứ, đây là một trong số đó.

Một RNGd gần đây trên CPU Snady Bridge bài đăng, sẽ (hoặc có thể được yêu cầu) sử dụng RdRand hoặc RdSeed, và một RdRand hoặc RdSeed chưa được khai thác sẽ được nhập vào VM. / dev / ngẫu nhiên sau đó hoạt động với một nguồn entropy thực (không phải ảo).

Đây không phải là tình cờ. Nó ở ngay trong tài liệu kiến ​​trúc Intel.

Đối với nguồn entropy phần cứng dựa trên thiết bị (IE sử dụng trình điều khiển hạt nhân để chia sẻ nó), bạn cần VM để ảo hóa chính xác nguồn vật lý. Tôi không có đầu mối nếu họ làm điều này và nếu vậy, cho thiết bị nào.

Nếu RNGd của bạn không có tùy chọn drng bên dưới, hãy cập nhật nó. Nếu phần cứng của bạn không có RNG phần cứng nhanh, bạn sẽ phải chịu số phận và bạn nên cân nhắc sử dụng các phần cứng khác nhau cho mục đích bảo mật.

# rngd --help
Usage: rngd [OPTION...]
Check and feed random data from hardware device to kernel entropy pool.

  -b, --background           Become a daemon (default)
  **-d, --no-drng=1|0          Do not use drng as a source of random number input**
                             (default: 0)
  -f, --foreground           Do not fork and become a daemon
  -n, --no-tpm=1|0           Do not use tpm as a source of random number input
                             (default: 0)
  -o, --random-device=file   Kernel device used for random number output
                             (default: /dev/random)
  -p, --pid-file=file        File used for recording daemon PID, and multiple
                             exclusion (default: /var/run/rngd.pid)
  -q, --quiet                Suppress error messages
  -r, --rng-device=file      Kernel device used for random number input
                             (default: /dev/hwrng)
  -s, --random-step=nnn      Number of bytes written to random-device at a time
                             (default: 64)
  -v, --verbose              Report available entropy sources
  -W, --fill-watermark=n     Do not stop feeding entropy to random-device until
                             at least n bits of entropy are available in the
                             pool (default: 2048), 0 <= n <= 4096
 -?, --help                 Give this help list
  --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

Report bugs to Jeff Garzik <jgarzik@pobox.com>.

0

Tôi cũng gặp vấn đề với krb5_newrealm. Điều này làm việc tốt cho tôi, dựa trên câu trả lời trên:

cat /dev/sda > /dev/urandom

Bạn có thể muốn giết nó sau khi bạn hoàn thành nhu cầu về dữ liệu ngẫu nhiên. / dev / sda có thể có nhiều dữ liệu hơn bạn cần.

Lưu ý: Tôi không chắc chắn ngẫu nhiên dữ liệu ngẫu nhiên được tạo theo cách này thực sự như thế nào.


Vui lòng tham khảo các bài viết khác bằng cách sử dụng tên của người đăng. Nói "ở trên" hoặc "bên dưới" là vô nghĩa bởi vì tất cả chúng ta không thấy các bài đăng theo cùng một trình tự.
John Gardeniers

4
Điều này có thể hoạt động, nhưng / dev / sda chứa rất nhiều dữ liệu không ngẫu nhiên (ít nhất là số 0), điều này làm cho ý tưởng không được tốt lắm từ quan điểm bảo mật. Ngoài các số 0, nó bắt đầu bằng MBR, điều này thực sự rất dễ đoán, tôi có thể đoán ít nhất 3 byte ... hoặc nó sẽ không khởi động;)
Doncho Gunchev
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.