Máy tạo số là gì?
Máy phát số là một quy trình, thuật toán hoặc thiết bị vật lý tạo ra một dãy số mà giá trị của chúng không thể được dự đoán trước hoàn toàn bởi người hoặc hệ thống nhận chúng. Kết quả đầu ra có thể là một số đơn hoặc một dãy số dài tùy ý, được lấy từ một phạm vi, phân phối hoặc tập hợp các quy tắc đã được xác định. Máy phát số xuất hiện trong điện toán, thống kê, mật mã học, trò chơi, mô phỏng khoa học và việc ra quyết định hàng ngày, khiến chúng trở thành một trong những công cụ được ứng dụng rộng rãi nhất trong toán học và kỹ thuật hiện đại.
Điểm khác biệt quan trọng nằm ở chỗ giữa tính ngẫu nhiên thực sự và sự xấp xỉ tính ngẫu nhiên bằng máy tính . Hầu hết các bộ tạo số trong phần mềm không thực sự ngẫu nhiên — chúng là các thuật toán xác định tạo ra đầu ra không thể dự đoán được về mặt thống kê đến mức nó hoạt động giống như tính ngẫu nhiên trong hầu hết các mục đích thực tế. Một nhóm nhỏ hơn các bộ tạo khai thác sự bất định vật lý thực sự để tạo ra các con số mà không thuật toán nào có thể tái tạo được. Hiểu rõ loại nào bạn đang sử dụng là vô cùng quan trọng, bởi vì hậu quả của việc chọn sai bộ tạo có thể từ kết quả nghiên cứu sai lệch đến các sự cố bảo mật nghiêm trọng.
Tại sao các công cụ tạo số ngẫu nhiên lại quan trọng?
Các hệ thống tạo số ngẫu nhiên là cơ sở hạ tầng thiết yếu trong nhiều lĩnh vực. Chất lượng của chúng quyết định trực tiếp đến tính hợp lệ của kết quả trong từng lĩnh vực.
- Mật mã học và bảo mật: Khóa mã hóa, mã thông báo phiên, số ngẫu nhiên và mật khẩu dùng một lần phải được tạo ra từ các nguồn mà việc dự đoán bằng máy tính là bất khả thi. Một trình tạo yếu ở đây có thể khiến hàng triệu người dùng dễ bị tấn công. Lỗ hổng OpenSSL của Debian năm 2008, do việc vô tình giảm lượng hạt giống entropy, đã khiến các khóa riêng tư có thể đoán được và làm tổn hại các máy chủ trên toàn thế giới.
- Mô phỏng khoa học: Phương pháp Monte Carlo, được sử dụng trong vật lý, tài chính, mô hình khí hậu và nghiên cứu thuốc, dựa trên các chuỗi số ngẫu nhiên lớn để xấp xỉ lời giải cho các vấn đề không thể giải quyết bằng phương pháp phân tích. Chất lượng thống kê của bộ tạo số ngẫu nhiên ảnh hưởng trực tiếp đến độ chính xác của mô phỏng.
- Lấy mẫu thống kê: Nghiên cứu khảo sát, thử nghiệm lâm sàng và kiểm toán chất lượng đều dựa trên việc lựa chọn ngẫu nhiên để đảm bảo mẫu đại diện cho quần thể mà không bị thiên lệch. Một trình tạo mẫu có các mẫu ẩn có thể loại trừ một cách có hệ thống một số kết quả nhất định, làm mất hiệu lực các kết luận.
- Trò chơi và đánh bạc: Tính công bằng trong các trò chơi bài, xổ số, máy đánh bạc và sòng bạc trực tuyến phụ thuộc về mặt pháp lý và đạo đức vào việc tạo ra các số ngẫu nhiên không thể dự đoán được. Các cơ quan quản lý ở hầu hết các khu vực pháp lý đều yêu cầu các bộ tạo số ngẫu nhiên được chứng nhận.
- Tạo nội dung theo quy trình: Trò chơi điện tử tạo ra địa hình, hầm ngục, hành vi của kẻ thù và vật phẩm bằng cách sử dụng các chuỗi giả ngẫu nhiên được gieo mầm, cho phép tạo ra những thế giới rộng lớn, đa dạng từ một đoạn mã nhỏ gọn.
- Những quyết định thường nhật: Chọn người thắng cuộc trong một cuộc xổ số, phân nhóm học sinh, chọn ngẫu nhiên danh sách nhạc hoặc chọn nhà hàng — các công cụ tạo số ngẫu nhiên xử lý việc ra quyết định một cách khách quan ở mọi quy mô.
Hai loại máy phát số cơ bản
Mỗi bộ tạo số ngẫu nhiên đều thuộc một trong hai loại chính, được phân biệt bởi nguồn gốc của tính không thể dự đoán được của chúng.
Bộ tạo số ngẫu nhiên giả (PRNG)
Máy tạo số giả ngẫu nhiên (PRNG) là một thuật toán xác định, nhận một giá trị ban đầu gọi là hạt giống và áp dụng một hàm toán học lặp đi lặp lại để tạo ra một dãy số. Với cùng một hạt giống, PRNG luôn tạo ra chính xác cùng một dãy số. Dãy số này không ngẫu nhiên theo nghĩa toán học nghiêm ngặt — nó hoàn toàn được xác định bởi hạt giống — nhưng nó vượt qua các bài kiểm tra thống kê về tính ngẫu nhiên và phù hợp với hầu hết các ứng dụng không liên quan đến mật mã.
Cơ chế cốt lõi liên quan đến việc duy trì một trạng thái nội bộ, một khối bit được biến đổi ở mỗi bước. Đầu ra được tạo ra từ trạng thái này, và trạng thái được cập nhật trước khi tạo ra đầu ra tiếp theo. Độ dài của chuỗi trước khi lặp lại được gọi là chu kỳ . Một bộ tạo số ngẫu nhiên giả tốt có chu kỳ đủ dài để trên thực tế không bao giờ gặp phải sự lặp lại.
Các thuật toán tạo số ngẫu nhiên giả phổ biến bao gồm:
- Máy phát số ngẫu nhiên tuyến tính (LCG): Một trong những máy phát số ngẫu nhiên giả lâu đời và đơn giản nhất, sử dụng công thức X n+1 = (aX n + c) mod m . Nhanh và dễ triển khai, nhưng có những điểm yếu đã biết bao gồm chu kỳ ngắn và các mẫu có thể phát hiện được trong không gian nhiều chiều. Được sử dụng trong nhiều ngôn ngữ lập trình đời đầu và vẫn còn được tìm thấy trong một số thư viện chuẩn.
- Mersenne Twister (MT19937): Được phát triển vào năm 1997, đây là thuật toán tạo số ngẫu nhiên giả (PRNG) được sử dụng rộng rãi nhất trong các ngôn ngữ lập trình đa năng, bao gồm Python, Ruby, PHP và R. Nó có chu kỳ 2 19937 −1, vượt qua hầu hết các bài kiểm tra thống kê và hoạt động nhanh. Tuy nhiên, nó không an toàn về mặt mật mã — chỉ cần biết 624 đầu ra liên tiếp là đủ để tái tạo toàn bộ trạng thái bên trong của nó và dự đoán tất cả các đầu ra trong tương lai.
- Xorshift và Xoshiro/Xoroshiro: Một họ các bộ tạo số ngẫu nhiên giả (PRNG) nhanh và hiện đại dựa trên các phép toán XOR bitwise và dịch bit. Xoshiro256** và Xoroshiro128+ rất phổ biến trong các công cụ trò chơi và tính toán số học nhờ tốc độ, kích thước trạng thái nhỏ và các đặc tính thống kê tuyệt vời.
- PCG (Permuted Congruential Generator): Một họ máy phát mới hơn kết hợp cơ sở đồng dư tuyến tính với hàm đầu ra hoán vị. Máy phát PCG nhanh, có hiệu suất thống kê xuất sắc và hỗ trợ nhiều luồng độc lập, do đó rất phù hợp cho mô phỏng song song.
Bộ tạo số ngẫu nhiên thực sự (TRNG)
Một bộ tạo số ngẫu nhiên thực sự (TRNG) tạo ra kết quả từ một quá trình vật lý hoàn toàn không thể dự đoán được — một quá trình được chi phối bởi cơ học lượng tử, nhiễu nhiệt hoặc các nguồn entropy vật lý khác. Vì nguồn này không mang tính xác định, nên hai lần chạy với thiết lập giống hệt nhau vẫn tạo ra các kết quả khác nhau. TRNG không thể được gieo mầm để tái tạo một chuỗi, đây vừa là điểm mạnh, vừa là điểm hạn chế của chúng trong một số trường hợp.
Các nguồn entropy vật lý được sử dụng trong TRNG bao gồm:
- Nhiễu nhiệt: Chuyển động ngẫu nhiên của các electron trong điện trở tạo ra các dao động điện áp có thể được lấy mẫu và số hóa. Đây là một trong những nguồn nhiễu phần cứng phổ biến nhất.
- Phân rã phóng xạ: Thời điểm phát xạ các hạt từ một mẫu phóng xạ về cơ bản là tuân theo quy luật lượng tử và không thể dự đoán được. Máy đếm Geiger được kết nối với máy tính có thể thu thập dữ liệu về entropy này.
- Hiệu ứng lượng tử quang tử: Các thiết bị tách photon và đo đường đi của chúng khai thác sự chồng chất lượng tử để tạo ra các bit có tính ngẫu nhiên có thể chứng minh được. Hiện nay đã có các bộ tạo số ngẫu nhiên lượng tử (QRNG) thương mại.
- Nhiễu khí quyển: Các dịch vụ như RANDOM.ORG lấy mẫu nhiễu tần số vô tuyến từ khí quyển, số hóa nó và cung cấp các số kết quả qua internet. Đây là một TRNG được cung cấp dưới dạng dịch vụ.
- Các nhóm entropy của hệ điều hành: Các hệ điều hành hiện đại thu thập entropy từ các ngắt phần cứng, thời gian hoạt động của đĩa, thời gian đến của gói mạng và đầu vào của người dùng (nhấn phím, di chuyển chuột). Trên Linux, nhóm này được truy cập thông qua
/dev/randomvà/dev/urandom; trên Windows, thông qua API CryptGenRandom.
Bộ tạo số ngẫu nhiên giả an toàn về mặt mật mã (CSPRNG)
Loại thứ ba lấp đầy khoảng trống giữa PRNG và TRNG. Một bộ tạo số giả ngẫu nhiên an toàn về mặt mật mã là một PRNG được gieo mầm từ một nguồn entropy thực sự và được thiết kế sao cho đầu ra của nó không thể phân biệt được về mặt tính toán với tính ngẫu nhiên thực sự, ngay cả bởi một kẻ thù có nguồn lực đáng kể. Việc biết bất kỳ phần nào trong đầu ra của nó cũng không cho phép dự đoán các giá trị trong quá khứ hoặc tương lai.
Ví dụ bao gồm:
- ChaCha20: Một thuật toán mã hóa luồng được sử dụng làm CSPRNG trong các hệ điều hành và thư viện mật mã hiện đại, bao gồm cả
/dev/urandomcủa Linux kể từ kernel 4.8. - Fortuna: Một thiết kế CSPRNG (Bộ tạo số ngẫu nhiên an toàn về mặt an ninh mạng) do Bruce Schneier và Niels Ferguson phát triển, liên tục tự tái tạo từ nhiều nguồn entropy khác nhau, giúp nó chống lại các cuộc tấn công xâm phạm trạng thái.
- HMAC-DRBG và CTR-DRBG: Các bộ tạo bit ngẫu nhiên xác định được tiêu chuẩn hóa bởi NIST (SP 800-90A), được sử dụng rộng rãi trong các thư viện mật mã và các mô-đun bảo mật phần cứng.
Cách thức hoạt động của trình tạo số ngẫu nhiên: Hướng dẫn từng bước
Mặc dù cách thức triển khai có thể khác nhau, hầu hết các bộ tạo số ngẫu nhiên đều tuân theo một mô hình hoạt động chung.
- Khởi tạo: Bộ tạo số ngẫu nhiên thiết lập trạng thái nội bộ của nó. Đối với bộ tạo số ngẫu nhiên giả (PRNG), điều này có nghĩa là chấp nhận một giá trị hạt giống — thường là thời gian hệ thống hiện tại, một số nguyên do người dùng cung cấp hoặc các byte từ nguồn entropy. Đối với bộ tạo số ngẫu nhiên thực (TRNG), bước này liên quan đến việc kích hoạt phần cứng đo lường vật lý.
- Biến đổi trạng thái: Bộ tạo áp dụng hàm toán học cốt lõi của nó vào trạng thái hiện tại, tạo ra một trạng thái mới. Trong Mersenne Twister, điều này liên quan đến một phép toán xoắn trên một mảng 624 phần tử gồm các số nguyên 32 bit. Trong một bộ tạo đồng dư tuyến tính, đó là một phép nhân, cộng và phép toán modulo đơn giản.
- Trích xuất đầu ra: Một phần của trạng thái mới — hoặc một hàm của nó — được trích xuất và trả về dưới dạng số đầu ra. Bước này thường bao gồm việc trộn hoặc điều chỉnh thêm để cải thiện các đặc tính thống kê.
- Ánh xạ phạm vi: Đầu ra thô, thường là một số nguyên lớn hoặc một chuỗi bit, được ánh xạ đến phạm vi mong muốn. Đối với một số nằm giữa 1 và 100, đầu ra thô được điều chỉnh bằng phép chia hoặc phép toán modulo. Cần phải cẩn thận ở đây: phép giảm modulo đơn giản sẽ gây ra sai lệch khi phạm vi đầu ra không chia hết cho không gian đầu ra của bộ tạo.
- Lặp lại: Các bước 2 đến 4 được lặp lại cho mỗi số tiếp theo được yêu cầu. Trạng thái tiếp tục phát triển, tạo ra giá trị tiếp theo trong chuỗi.
Các đặc tính chính xác định chất lượng máy phát điện
Không phải tất cả các bộ tạo số đều giống nhau. Các thuộc tính sau đây được sử dụng để đánh giá và so sánh chúng.
| Tài sản | Ý nghĩa của nó | Tại sao điều đó lại quan trọng |
|---|---|---|
| Giai đoạn | Độ dài của chuỗi trước khi nó lặp lại | Các khoảng thời gian ngắn gây ra sự lặp lại trong các mô phỏng dài, dẫn đến sự tương quan. |
| Tính đồng nhất | Mỗi giá trị đầu ra khả thi đều xuất hiện với tần suất như nhau trong thời gian dài. | Sai lệch đầu ra không đồng đều gây ảnh hưởng đến việc lấy mẫu, trò chơi và mô phỏng. |
| Độc lập | Việc biết được kết quả trước đó không cung cấp thông tin gì về kết quả trong tương lai. | Các kết quả tương quan làm mất hiệu lực các bài kiểm tra thống kê và tạo điều kiện cho các cuộc tấn công dự đoán. |
| Không thể đoán trước | Người quan sát không thể xác định giá trị tương lai từ kết quả quá khứ. | Cần thiết cho các ứng dụng mật mã; không liên quan đến các mô phỏng có thể tái tạo. |
| Khả năng tái tạo | Cùng một loại hạt giống luôn tạo ra cùng một chuỗi kết quả. | Cần thiết cho việc gỡ lỗi, khả năng tái tạo khoa học và tạo quy trình. |
| Tốc độ | Máy phát điện tạo ra điện năng nhanh như thế nào? | Các mô phỏng thông lượng cao có thể yêu cầu hàng tỷ phép tính mỗi giây. |
| Quy mô tiểu bang | Lượng bộ nhớ mà trạng thái nội bộ chiếm dụng | Ảnh hưởng đến tính phù hợp cho các hệ thống nhúng và thực thi song song. |
Kiểm định thống kê các máy phát số
Vì tính chất giả ngẫu nhiên là một thuộc tính thống kê chứ không phải là một sự đảm bảo toán học, nên các bộ tạo số ngẫu nhiên được đánh giá bằng cách sử dụng các bộ kiểm thử tiêu chuẩn nhằm tìm kiếm các mẫu có thể phát hiện được.
- Bộ kiểm thử thống kê NIST (SP 800-22): Mười lăm bài kiểm tra bao gồm tần số, tần số khối, chuỗi, chuỗi dài nhất, hạng ma trận nhị phân, biến đổi Fourier rời rạc (DFT), mẫu chồng chéo, thống kê phổ quát, độ phức tạp tuyến tính, tuần tự, entropy xấp xỉ, tổng tích lũy, độ lệch ngẫu nhiên và các biến thể độ lệch ngẫu nhiên. Cần thiết cho chứng nhận mật mã.
- Các bài kiểm tra Diehard: Được phát triển bởi George Marsaglia, một loạt các bài kiểm tra bao gồm bài kiểm tra Khoảng cách sinh nhật, Hoán vị chồng chéo và Bài kiểm tra Squeeze. Có ảnh hưởng lịch sử; hiện nay phần lớn đã bị thay thế.
- TestU01: Một thư viện C toàn diện được phát triển tại Đại học Montreal, bao gồm ba bộ kiểm thử chính — SmallCrush, Crush và BigCrush — trong đó BigCrush là bộ kiểm thử khắt khe nhất. Mersenne Twister không vượt qua được một số bài kiểm thử BigCrush; Xoshiro256** và PCG đều vượt qua tất cả.
- PractRand: Một bộ kiểm thử hiện đại có khả năng xử lý các chuỗi dữ liệu rất dài (hàng terabyte dữ liệu đầu ra) để phát hiện các mối tương quan tinh tế, tầm xa mà các bài kiểm thử ngắn hơn bỏ sót.
Một máy phát điện vượt qua tất cả các bài kiểm tra trong một bộ kiểm tra nhất định không có nghĩa là nó được chứng minh là ngẫu nhiên — mà là nó được chứng minh là thiếu các mẫu cụ thể mà các bài kiểm tra đó tìm kiếm. Sự khác biệt này là cơ bản: kiểm tra thống kê cung cấp bằng chứng về chất lượng, chứ không phải là bằng chứng toán học về tính không thể dự đoán được.
Cách sử dụng công cụ tạo số ngẫu nhiên hiệu quả: Chiến lược và chiến thuật thực tiễn
Để sử dụng trình tạo số ngẫu nhiên hiệu quả, hãy xác định phạm vi và số lượng trước khi tạo, chọn loại trình tạo phù hợp với trường hợp sử dụng của bạn (ngẫu nhiên thực sự so với giả ngẫu nhiên), và xác minh rằng công cụ đáp ứng các yêu cầu thống kê của nhiệm vụ. Hầu hết các lỗi đến từ cài đặt không phù hợp, đầu ra lặp lại khi cần tính duy nhất, và sử dụng trình tạo chất lượng thấp cho công việc nhạy cảm về bảo mật.
Chiến lược từng bước để đạt được kết quả đúng đắn
Bước 1: Xác định phạm vi và các tham số của bạn
Trước khi sử dụng bất kỳ công cụ nào, hãy ghi rõ chính xác những gì bạn cần. Thông tin không rõ ràng sẽ dẫn đến kết quả vô dụng. Hãy xác định rõ:
- Giá trị tối thiểu: Số nhỏ nhất được chấp nhận trong kết quả đầu ra của bạn (ví dụ: 1, 0 hoặc số âm)
- Giá trị tối đa: Số lớn nhất được cho phép (ví dụ: 100, 1000 hoặc một giá trị trần tùy chỉnh)
- Số lượng: Số lượng số bạn cần trong một lần rút thăm.
- Yêu cầu về tính duy nhất: Liệu có cho phép các số trùng lặp hay mỗi số chỉ được xuất hiện một lần.
- Loại số: Chỉ số nguyên, hoặc số thập phân với số chữ số thập phân được chỉ định.
- Thứ tự sắp xếp: Liệu kết quả đầu ra nên được sắp xếp, xáo trộn hay giữ nguyên thứ tự ban đầu.
Bỏ qua bước này là nguyên nhân phổ biến nhất gây lãng phí thời gian. Người tổ chức xổ số mà quên tắt chức năng loại bỏ vé trùng lặp có thể rút cùng một số vé hai lần và phải bắt đầu lại từ đầu.
Bước 2: Chọn máy phát điện phù hợp với mục đích của bạn
Không phải tất cả các bộ tạo số ngẫu nhiên đều giống nhau. Bảng dưới đây thể hiện sự tương ứng giữa các trường hợp sử dụng phổ biến và loại bộ tạo số ngẫu nhiên phù hợp.
| Trường hợp sử dụng | Loại máy phát điện được đề xuất | Yêu cầu chính |
|---|---|---|
| Quay số trúng thưởng, bốc thăm may mắn, quà tặng | Ngẫu nhiên thực sự (do phần cứng hoặc nhiễu khí quyển) | Có thể kiểm chứng công khai, không thiên vị. |
| Lấy mẫu thống kê, nghiên cứu | PRNG (Bộ tạo số ngẫu nhiên giả) an toàn về mặt mật mã hoặc số ngẫu nhiên thực sự | Phân phối đồng đều, khả năng tái tạo tùy chọn |
| Khóa mã hóa, mật khẩu, mã thông báo | Bộ tạo số ngẫu nhiên giả an toàn về mặt mật mã (CSPRNG) | Tính không thể dự đoán, được gieo mầm bởi entropy |
| Cơ chế trò chơi, mô phỏng | PRNG tiêu chuẩn (Mersenne Twister, xoshiro) | Tốc độ, khả năng lặp lại với một hạt giống |
| Giảng dạy, các hoạt động trong lớp học | Bất kỳ công cụ tạo số ngẫu nhiên giả đơn giản nào hoặc công cụ trực tuyến nào. | Dễ sử dụng, hình thức hấp dẫn |
| Thử nghiệm A/B, phân bổ ngẫu nhiên | Bộ tạo số ngẫu nhiên giả (PRNG) với hạt giống cố định để đảm bảo tính khả reproducible (khả năng tái tạo). | Khả năng kiểm toán, chạy lại nhất quán |
| Mã PIN, số xác minh | CSPRNG | Không có quy luật nào có thể dự đoán được. |
Bước 3: Cấu hình công cụ đúng cách
Mở trình tạo bạn đã chọn và thiết lập mọi thông số có sẵn trước khi nhấn nút tạo. Không nên dựa vào cài đặt mặc định trừ khi bạn đã xác minh chúng phù hợp với nhu cầu của mình. Các trường cấu hình phổ biến bao gồm:
- Trường phạm vi: Nhập giá trị tối thiểu và tối đa của bạn một cách rõ ràng, ngay cả khi giá trị mặc định trông có vẻ chính xác.
- Trường đếm: Đặt số lượng đầu ra chính xác cần thiết
- Tùy chọn "Số duy nhất/không lặp lại": Bật tùy chọn này cho các lần quay số mà mỗi số chỉ được xuất hiện một lần.
- Tùy chọn định dạng: Chọn hiển thị kết quả dưới dạng danh sách, phân tách bằng dấu phẩy hoặc dạng bảng.
- Nhập giá trị hạt giống (nâng cao): Để có kết quả có thể tái lập trong nghiên cứu hoặc thử nghiệm, hãy nhập một giá trị hạt giống cố định và ghi lại giá trị đó.
Bước 4: Tạo và xác thực kết quả đầu ra
Sau khi tạo xong, đừng sử dụng kết quả ngay lập tức. Hãy chạy một bước kiểm tra nhanh để xác thực:
- Xác nhận tất cả các số đều nằm trong phạm vi bạn đã chỉ định.
- Kiểm tra xem có bản ghi trùng lặp hay không nếu yêu cầu tính duy nhất.
- Hãy kiểm tra xem số lượng có khớp với số lượng bạn đã yêu cầu hay không.
- Để phục vụ mục đích nghiên cứu, hãy thực hiện kiểm tra tần suất cơ bản trên nhiều lô hàng để phát hiện các bất thường trong phân phối.
- Vì lý do bảo mật, tuyệt đối không hiển thị hoặc ghi nhật ký kết quả thô trong môi trường không an toàn.
Bước 5: Ghi chép và lưu trữ kết quả
Đối với bất kỳ mục đích sử dụng chính thức nào — cuộc thi, nghiên cứu, kiểm toán — hãy ghi lại sự kiện tạo số ngẫu nhiên. Ghi lại công cụ đã sử dụng, URL hoặc phiên bản phần mềm, ngày giờ, các tham số đã nhập và chính kết quả đầu ra. Điều này tạo ra một nhật ký kiểm toán có thể bảo vệ chống lại các tranh chấp. Một số dịch vụ trực tuyến, chẳng hạn như RANDOM.ORG, cấp chứng chỉ hoặc dấu thời gian cho mỗi sự kiện tạo số ngẫu nhiên dành riêng cho mục đích này.
Các chiến thuật thực tiễn cho các tình huống cụ thể
Tổ chức một cuộc xổ số hoặc bốc thăm trúng thưởng công bằng
- Hãy gán số thứ tự cho tất cả người tham gia trước khi tạo (từ 1 đến N, trong đó N là tổng số người tham gia).
- Hãy sử dụng bộ tạo số ngẫu nhiên thực sự, chứ không phải bộ tạo số ngẫu nhiên giả (PRNG), để kết quả không thể được giải mã ngược từ một hạt giống.
- Trình bày trước sự chứng kiến của người khác hoặc ghi lại màn hình để tránh tranh chấp.
- Nếu có nhiều người thắng cuộc, hãy bật tùy chọn không trùng lặp để một người không thể thắng hai lần.
- Công bố toàn bộ bộ thông số cùng với kết quả để bất kỳ ai cũng có thể xác minh tính công bằng của cuộc bốc thăm.
Tạo số liệu cho nghiên cứu thống kê
- Hãy quyết định trước xem bạn cần phân phối đều, phân phối chuẩn hay loại phân phối nào khác — hầu hết các trình tạo mặc định chỉ tạo ra phân phối đều.
- Hãy sử dụng hạt giống cố định khi bạn cần kết quả có thể lặp lại trong nhiều lần chạy cùng một thí nghiệm.
- Hãy tạo một mẫu lớn hơn mức cần thiết, sau đó loại bỏ các giá trị nằm ngoài phạm vi mục tiêu thay vì tạo lại mẫu, để tránh gây ra sai lệch.
- Hãy kiểm tra mẫu của bạn bằng phép kiểm định chi-square goodness-of-fit hoặc phép kiểm định Kolmogorov-Smirnov nếu chất lượng ngẫu nhiên có ảnh hưởng đến kết luận của bạn.
Tạo mã thông báo và mã bảo mật
- Luôn sử dụng thuật toán tạo số ngẫu nhiên an toàn bằng mật khẩu (CSPRNG). Trong Python, hãy sử dụng secrets.randbelow() hoặc secrets.token_hex() . Trong JavaScript, hãy sử dụng crypto.getRandomValues() . Tuyệt đối không sử dụng Math.random() vì mục đích bảo mật.
- Hãy tạo mã thông báo có đủ độ phức tạp (entropy) cho mô hình rủi ro của bạn — mã PIN số gồm 6 chữ số chỉ có khoảng 20 bit độ phức tạp, quá yếu cho bất kỳ việc xác minh nào vượt quá mức rủi ro thấp.
- Tránh tạo ra các mã trông giống nhau (ví dụ: 000001, 000002) — hãy sử dụng một phạm vi rộng để ngăn chặn các cuộc tấn công liệt kê.
- Lưu trữ các mã thông báo được tạo dưới dạng băm, không phải dưới dạng văn bản thuần.
Sử dụng máy phát số ngẫu nhiên trong trò chơi và mô phỏng
- Hãy chọn thuật toán tạo số ngẫu nhiên giả (PRNG) phù hợp với tốc độ và độ dài chu kỳ — thuật toán Mersenne Twister có chu kỳ là 2 19937 −1, thích hợp cho các mô phỏng dài.
- Sử dụng nguồn tạo số ngẫu nhiên giả (PRNG) có độ nhiễu cao (xung nhịp hệ thống kết hợp với nhiễu phần cứng) để tránh các chuỗi giống hệt nhau trong các lần chạy lặp lại.
- Để đảm bảo tính công bằng trong chế độ chơi nhiều người, hãy tạo số thứ tự ở phía máy chủ và chỉ tiết lộ chúng sau khi tất cả người chơi đã thực hiện nước đi của mình (phương pháp thực hiện-tiết lộ).
- Các mã hạt giống nhật ký được sử dụng trong quá trình thử nghiệm trò chơi để bạn có thể tái tạo chính xác trạng thái trò chơi nhằm mục đích gỡ lỗi.