Khoa học Phổ thông: Số Ngẫu nhiên Thực và Số Giả Ngẫu nhiên
比特派钱包
2020-03-06 03:06
本文约1313字,阅读全文需要约5分钟
Tính ngẫu nhiên của các số ngẫu nhiên là huyết mạch của việc tạo khóa riêng
Người dùng bitcoin thích thảo luận về các chủ đề khó hiểu như "mã hóa bất đối xứng", "đường cong elip" và "máy tính lượng tử", sau đó mất tiền theo một cách rất khó giải thích, chẳng hạn như: "ngẫu nhiên".

Đã có nhiều sự cố mất tiền của người dùng ví của các thương hiệu khác nhau trong lịch sử, tất cả là do sự cố với chức năng ngẫu nhiên.

Tính ngẫu nhiên là rất quan trọng, đặc biệt là đối với Bitcoin, một loại tiền điện tử mật mã. Rất tiếc là cộng đồng chưa có nhiều thảo luận về ngẫu nhiên dẫn đến nhiều người hiểu chưa đúng nên hôm nay chúng tôi sẽ cùng các bạn nói về ngẫu nhiên.

Khi nói đến tính ngẫu nhiên, có hai khái niệm cần phải làm rõ: "True Random Number Generator" (TRNG) và Pseudo-Random Number Generator (PRNG).

Hầu hết các hàm ngẫu nhiên trong các chương trình và ngôn ngữ máy tính đều là các trình tạo số giả ngẫu nhiên và tất cả chúng đều sử dụng một "hạt giống" (chẳng hạn như "thời gian") để tạo ra các kết quả "có vẻ ngẫu nhiên" theo một thuật toán nhất định.

Không còn nghi ngờ gì nữa, miễn là bất kỳ ai biết thuật toán và hạt giống, hoặc các số ngẫu nhiên đã được tạo trước đó, thì đều có thể lấy được thông tin của dãy số ngẫu nhiên tiếp theo. Do khả năng dự đoán của chúng, chúng không an toàn về mặt mật mã, vì vậy chúng tôi gọi chúng là "giả ngẫu nhiên". Loại số ngẫu nhiên này để kẻ thủ ác trong trò chơi chạy trốn không phải là vấn đề lớn, nếu nó được sử dụng để tạo khóa riêng Bitcoin thì quá không an toàn.

Hãy nói về bộ tạo số ngẫu nhiên thực sự. Trong Wiki tiếng Trung, việc đánh đồng "bộ tạo số ngẫu nhiên phần cứng" (HRNG) với bộ tạo số ngẫu nhiên thực sự là không chính xác lắm. Tính ngẫu nhiên thực sự theo nghĩa chặt chẽ có thể chỉ tồn tại trong cơ học lượng tử Trong số đó, điều chúng ta hiện đang muốn (hoặc có thể muốn) không phải là kiểu ngẫu nhiên này.

Chúng tôi thực sự muốn một số ngẫu nhiên không thể đoán trước, thống kê và bảo mật bằng mật mã. Miễn là một trình tạo số ngẫu nhiên có thể làm điều này có thể được gọi là trình tạo số ngẫu nhiên thực sự. Loại ngẫu nhiên thực sự này không nhất thiết phải là phần cứng được thiết kế đặc biệt.Bộ tạo số ngẫu nhiên (/dev/random) trong nhân của hệ điều hành Linux duy trì một nhóm entropy (thu thập tiếng ồn phần cứng, chẳng hạn như: hoạt động của bàn phím, chuột, mạng thay đổi cường độ tín hiệu, v.v.), cho phép cung cấp entropy dữ liệu ngẫu nhiên lớn nhất có thể, do đó, đây cũng là một trình tạo số ngẫu nhiên thực chất lượng cao.

Tuy nhiên, /dev/random đang bị chặn, nghĩa là, nếu nhóm entropy trống, các thao tác đọc tới /dev/random sẽ bị tạm dừng cho đến khi thu thập đủ tiếng ồn xung quanh.

Vì vậy, khi phát triển chương trình, chúng ta nên sử dụng /dev/urandom như một bản sao của /dev/random, nó sẽ không bị chặn, nhưng entropy đầu ra của nó có thể nhỏ hơn /dev/random.

Ok, sau tất cả những gì đã nói, chúng ta nên sử dụng loại trình tạo số ngẫu nhiên nào để tạo khóa riêng khi phát triển ứng dụng Bitcoin?

Câu trả lời rất đơn giản: urandom. Luôn chỉ sử dụng urandom.

Không sử dụng bất kỳ giải pháp số ngẫu nhiên nào của bên thứ ba, ngay cả một số thư viện bảo mật nâng cao cung cấp các chức năng ngẫu nhiên được cho là "rất an toàn". Bởi vì chúng đều là trình tạo số ngẫu nhiên mã hóa trong chế độ người dùng và urandom là trình tạo số ngẫu nhiên trong chế độ kernel. Kernel có quyền truy cập vào entropy của thiết bị thô và kernel có thể đảm bảo rằng nó không chia sẻ cùng trạng thái giữa các ứng dụng .

Trong lịch sử, vô số trường hợp lỗi số ngẫu nhiên hầu hết xảy ra trong trình tạo số ngẫu nhiên ở trạng thái người dùng và trình tạo số ngẫu nhiên ở trạng thái người dùng hầu như luôn phụ thuộc vào trình tạo số ngẫu nhiên ở trạng thái hạt nhân (nếu bạn không dựa vào nó, thì Rủi ro lớn hơn), ngoại trừ việc nó có thể đơn giản hóa một số công việc phát triển của bạn, không có lợi ích bổ sung nào cả, nhưng nó làm tăng các rủi ro bảo mật tiềm ẩn có thể do việc giới thiệu mã của bên thứ ba gây ra.

Do đó, các nhà phát triển nên sử dụng urandom khi họ cần các số ngẫu nhiên được bảo mật bằng mật mã.

Cuối cùng, một số trẻ hỏi, ví phần cứng BITHD của bạn có tạo ra các số ngẫu nhiên thực sự không?

Đây là câu trả lời: Tất nhiên rồi

Chip của BITHD có một bộ tạo số ngẫu nhiên phần cứng, bộ tạo này sẽ tạo ra một số ngẫu nhiên thực sự bằng cách lấy nguồn nhiễu vật lý.

比特派钱包
作者文库