Có một sự thật về điều này, trên thực tế nhiều sự thật hơn huyền thoại, nhưng dù sao thì tuyên bố này phản ánh một sự hiểu lầm cơ bản về những gì đang diễn ra. Có, di chuyển chuột trong khi tạo khóa bằng GPG có thể là một ý tưởng hay. Có, di chuyển chuột đóng góp một số entropy làm cho số ngẫu nhiên ngẫu nhiên. Không, di chuyển chuột không làm cho khóa an toàn hơn.
Tất cả các trình tạo ngẫu nhiên tốt phù hợp với mật mã và Linux nằm trong danh mục đó, có hai thành phần:
- Một nguồn entropy , không xác định. Mục đích của entropy là để bootstrap trình tạo số ngẫu nhiên với dữ liệu không thể đoán trước. Nguồn entropy phải không xác định: nếu không, một kẻ thù có thể tái tạo cùng một tính toán.
- Trình tạo số giả ngẫu nhiên , tạo ra các số ngẫu nhiên không thể đoán trước theo kiểu xác định từ trạng thái nội bộ thay đổi.
Entropy phải đến từ một nguồn bên ngoài máy tính. Người dùng là một nguồn của entropy. Những gì người dùng làm hầu hết không phải là ngẫu nhiên, nhưng thời gian gõ phím và chuyển động chuột rất khó đoán là hơi ngẫu nhiên - không phải là rất ngẫu nhiên, nhưng từng chút một, nó tích lũy. Các nguồn entropy tiềm năng khác bao gồm thời gian của các gói mạng và nhiễu trắng của camera hoặc micrô. Các phiên bản và cấu hình kernel khác nhau có thể sử dụng một bộ nguồn khác nhau. Một số máy tính có các mạch RNG phần cứng chuyên dụng dựa trên sự phân rã phóng xạ hoặc, ít ấn tượng hơn, các mạch điện tử không ổn định. Các nguồn chuyên dụng này đặc biệt hữu ích trong các thiết bị và máy chủ nhúng có thể có hành vi khá dễ đoán trong lần khởi động đầu tiên của chúng mà không cần người dùng thực hiện những điều kỳ lạ.
Linux cung cấp số ngẫu nhiên cho các chương trình thông qua hai thiết bị: /dev/random
và/dev/urandom
. Đọc từ một trong hai thiết bị trả về chất lượng mật mã. Cả hai thiết bị đều sử dụng cùng một trạng thái RNG bên trong và cùng một thuật toán để chuyển đổi trạng thái và tạo ra các byte ngẫu nhiên. Họ có những hạn chế đặc biệt khiến cả hai không phải là điều đúng:
/dev/urandom
có thể trả về dữ liệu dự đoán nếu hệ thống chưa tích lũy đủ entropy.
/dev/random
tính toán số lượng entropy và khối có sẵn nếu không đủ. Điều này nghe có vẻ tốt, ngoại trừ việc tính toán dựa trên những cân nhắc về mặt lý thuyết làm cho lượng entropy có sẵn giảm tuyến tính với mỗi bit đầu ra. Do đó /dev/random
có xu hướng chặn rất nhanh.
Các hệ thống Linux lưu trạng thái RNG nội bộ vào đĩa và khôi phục nó khi khởi động. Do đó, entropy chuyển từ khởi động này sang khởi động tiếp theo. Lần duy nhất khi một hệ thống Linux có thể thiếu entropy là khi nó được cài đặt mới. Một khi có đủ entropy trong hệ thống, entropy không giảm; chỉ tính toán thiếu sót của Linux giảm. Để giải thích thêm về việc xem xét này, đọc /dev/urandom
là phù hợp để tạo khóa mật mã , bởi một nhà mật mã học chuyên nghiệp. Xem aso Bạn có thể giải thích ước tính entropy được sử dụng trong Random.c .
Di chuyển chuột thêm entropy vào hệ thống. Nhưng gpg chỉ có thể đọc từ /dev/random
chứ không phải/dev/urandom
(một cách để giải quyết vấn đề này là tạo /dev/random
cùng một thiết bị 1: 9 /dev/urandom
), vì vậy nó không bao giờ có nguy cơ nhận được các số ngẫu nhiên không đủ ngẫu nhiên. Nếu bạn không di chuyển chuột, phím sẽ ngẫu nhiên nhất có thể; nhưng điều có thể xảy ra là gpg có thể bị chặn trong một lần đọc từ đó /dev/random
, chờ cho bộ đếm entropy của kernel tăng lên.