Trong lập trình không thể tạo ra giá trị ngẫu nhiên (random)

Hi Hải Duy Nguyễn.

  1. Có lẽ là do cách bạn phản biện nên dẫn đến mọi người lạc đề và không nói vào chủ đề chính.
    VD bitcoin và sinh số ngẫu nhiên trong lập trình không liên qua gì đến nhau cả.
  2. Về sinh số ngẫu nhiên đúng là thuật toán không thể tạo ra nếu không có hạt giống ngẫu nhiên ban đầu. Tuy nhiên một thực tế là phần mềm và phần cứng luôn đi kèm với nhau nên các yêu tố như thời gian hay các phần cứng ngẫu nhiên đặc biệt hoàn toàn được chấp nhận là một phần của hệ thống sinh số ngẫu nhiên. Giống như việc không có màn hình thì không có lập trình đồ họa vậy.

P/S Nếu bạn thích tranh luận thì cũng nên học về kỹ thuật hùng biện và phản biện trước.

4 Likes

Sr. Cũng chỉ vì tò mò
Thêm nữa là nhận ra hình như không có cách nào đảo ngược mã hóa ( không chắc lắm )
Lấy ví dụ thuật toán mã hóa bất đối xứng khi mà chìa khóa và giải mã không giống nhau
Ví dụ khi dữ liệu truyền qua proxy
byte[data] => hash(byte[data],publickey) { proxy can read } => unhash(byte[data],privatekey) == byte[data]
Như vậy thì proxy không cách nào giải mã được dữ liệu mã hóa dù biết chìa khóa đóng gói dữ liệu
Tất nhiên thì burte force hay ddos không bao giờ là lỗi thời
Cộng thêm sức mạnh của máy tính và có cái gì đó gọi là máy turing
Suy cho cùng thì độ dài của chìa khóa quyết định sự bảo mật
Nhưng khi tăng độ dài của chìa khóa thì cũng không loại trừ khả năng bị giải bởi 1 máy tính 128 bit hay n bit

1 Like

theo wiki thì Ngẫu nhiên nghĩa là thiếu một khuôn mẫu hay khả năng dự báo trong các sự kiện.[1] Sự ngẫu nhiên cho thấy một sự vô thứ tự hoặc không gắn kết trong một chuỗi các ký hiệu hoặc bước, nấc; sao cho không có một khuôn mẫu hoặc sự kết hợp nào minh bạch dễ hiểu. vậy những cái xuất hiện không theo quy luật được gọi là ngẫu nhiên , có những cái mà thời điểm này ngày hôm nay nó ra 1 giá trị , nhưng ngày mai cũng thời điểm này nó ra 1 giá trị khác , đó là ngẫu nhiên , thiếu quái gì hàm có thể làm được như thế =))

1 Like

Chủ đề này đang bàn về sự cực đoan/ triết học/ thuyết tuyệt đối vậy chủ topic? Tất nhiên là không cần phải có cái ngẫu nhiên đến tuyệt đối, vấn đề có giá trị khó đoán đủ để áp dụng vào các giải thuật mã hóa khiến cho phần lớn những kẻ trộm bó tay khi muốn mở mật khẩu, còn với những kẻ mà trong đầu hắn nảy sinh ra được giá trị ngẫu nhiên trùng với mật khẩu thì… khỏi bàn :D, cái sự ngẫu nhiên của ý tưởng viết chủ đề này cũng đủ để ngẫu nhiên rồi đó, nó gây tốn băng thông cho daynhauhoc.com chỉ để thỏa mãn cái ngẫu nhiên của chủ topic.

7 Likes

Những chủ đề như này đào sâu vào thì có rất nhiều thứ để tranh luận, cơ mà thiếu kiến thức cơ bản như ông thread rồi đem lên đây tranh luận thì đúng là tốn bw diễn đàn thật

3 Likes

Có bài này của bác asm bên gamevn cũng khá hay: http://forum.gamevn.com/threads/so-ngau-nhien.1315533/

3 Likes

Nói về sinh ngẫu nhiên trong game xưa thì Pokemon là điển hình: max EV max chỉ số là nhờ nắm được cái thóp này, chủ yếu dùng input thay vì dùng inner state riêng. https://www.reddit.com/r/pokemonrng/

Còn thớt muốn random ntn? (hay ứng dụng vào việc gì? quay thưởng? mô phỏng? mã hóa? có yêu cầu riêng). “Ngẫu nhiên” theo thường ngữ là một khái niệm rất mơ hồ và mâu thuẫn.

3 Likes
int getRandomNumber() {
   return 4;
}
4 Likes

Đang có suy nghĩ rằng “Ko biết các hàm random trong các ngôn ngữ lập trình có thực sự tạo ra số random ko?” thì mình “ngẫu nhiên” gặp được bài này.
Ko biết có phải “ngẫu nhiên” ko nữa?

Không dự báo hoặc kiểm soát được thì coi như random.

3 Likes

Chủ đề này vẫn thú vị theo thời gian :smile:

Theo hiểu biết của mình đồng quan điểm với trong hình “you can never be sure” và thực sự vấn đề vẫn nằm còn đang nằm ở chỗ khái miện RANDOM là gì? vì vậy trong lập trình cũng chưa chắc chắn…

Ví dụ bạn bạn quăng xúc xắc bạn nói hên xui, ngẫu nhiên… nhưng nhà khoa học chứng minh với cùng lục tay, góc quăng, mật độ không, gió cát nước ba la ba la gì đó… thì bạn sẽ luôn quăng ra được con số chính xác… cái này nhớ là có coi cái thí nghiệm ở đâu đó trên mạng rùi ^-^

Và lập luận về RANDOM vẫn còn đang cãi vã nhà khoa học này đưa ra thì nhà khoa học khác phản bác… cho tới giờ thì mình vẫn chưa có thông tin thêm vì ko ngâm nổi mấy cái sâu xa này :>>

2 Likes
5 Likes

sao cái video kia câu trước nói ngẫu nhiên là “một kết quả không dựa trên phương pháp hoặc quyết định có ý thức nào” rồi câu sau lại bảo “chỉ những bộ não có ý thức mới có thể lựa chọn ngẫu nhiên” vậy là có ý thức hay ko có ý thức mới là ngẫu nhiên :crazy_face:

rồi TRNG mà ví dụ thời gian thì cao lắm 32-bit ngẫu nhiên, ngẫu nhiên cái gì ở đây :unamused: TRNG nó lấy từ nhiều nguồn cho đủ ít nhất là 128-bit ngẫu nhiên, thời gian là 1 trong số đó thôi. Windows 11 đòi CPU thiết kế sẵn 1 con chip sinh bit ngẫu nhiên để lấy random bit từ đó. Người ta cũng thiết kế nhiều con thumb-drive TRNG lấy từ điện từ nhiễu xạ gì đó như trong vid nói, để cắm vô máy để tạo true random bit, hình như tầm $50 trở lên. Nên nói TRNG mà lấy thông dụng nhất từ thời gian thì rất nông cạn :unamused:

nếu TRNG có giới hạn thì có thể xài thuật toán AES mà encrypt 128-bit ngẫu nhiên lấy từ TRNG làm seed ban đầu rồi lấy tiếp output làm input mà encrypt ra tiếp, xài thêm 1 tí nonce/counter gì nữa thì cũng rất khó mà truy ngược ra seed ban đầu/kế tiếp là bao nhiêu. Cái này ko phải là TRNG nhưng tốt hơn PRNG nhiều do rất khó đoán nên gọi là CSPRNG. Nếu implement đúng thì đây cũng gần như là 1 TRNG khác.

nhược điểm của TRNG là nó… ko lường trước kết quả thật, nên xài trên máy mà ko kết nối internet thì hacker nó hack ra jackpot cũng ko biết được là cái máy có thật sự tạo ra con số dẫn tới jackpot hay ko vì nó ngẫu nhiên ko đoán được. Vì vậy mấy cái máy offline người ta xài PRNG để biết có bị hack hay ko. Với PRNG thì nó sẽ sinh ra từ S0 tới S1 S2 S3 v.v… đều biết trước. Sau n lần tạo hay tới giá trị Sn thì mới có jackpot. Mỗi máy có n1, n2, … khác nhau, nhà cái sẽ tính (n1 + n2 + …) x số tiền quay mỗi lần sao cho nó > giá trị jackpot thì mới bảo đảm có lời. Làm vậy thì coi như đã biết trước kết quả, ko có gì là ngẫu nhiên. Nói nhà cái lừa cũng đúng nhưng mà tránh hack cho máy offline thì chỉ có cách này thôi :unamused:

còn xài máy có kết nối online vào 1 server thì server quyết định được ai thắng ai thua, có thể xài TRNG được, nhà cái sẽ tính toán xác suất thống kê để tính toán sao cho N lần chơi thì nhà cái sẽ lời M. Có thể xài TRNG thật, nhưng ko open source thì bố ai mà biết mấy ổng xài thuật toán gì, có khi tham lam xài PRNG chứ ko xài TRNG để tính trước kết quả biết ai trúng giải mà trao cho người nhà nữa :unamused:


mới đây Pokemon VGC 2023 có vụ siết chặt cấm người chơi xài mấy con Pokemon hack/tự gen ra. Nó kiểm tra từ nhiều nguồn và 1 trong mấy nguồn đó là từ PRNG này đây. Đặc biệt là gen 3 gen 4 gì đấy truy ngược IVs theo PID rất dễ. Hack gen ra pkm mà IVs ko đúng với PID thì bị ban ngay. Mấy gen sau này có xài TRNG/CSPRNG gì nên tôi ko biết truy ngược rng thế nào. Xài PRNG để chống hack cũng tốt, nhưng mà cũng dễ bị “hack”, người ta tính trước được con pkm nào khi nhấn nút vào 1/60s nào sẽ có perfect IVs.

3 Likes

https://www.cloudflare.com/learning/ssl/lava-lamp-encryption/

Bí ẩn về random đã có lời giải. Đây có lẽ là phương pháp tối ưu nhất.

toàn đại lão :sweat: :dizzy_face:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?