Рандом тооны тухай
Unix-ийн төрлийн үйлдлийн системүүдэд dev/random, dev/urandom гэсэн file-ууд байдгийг та мэдэх үү? Тэгвэл энэхүү file — уудад рандом тоон цуваа тасралтгүй бичигдэж байдаг ба тоон цуваанууд хэрхэн бичигддэг талаар ойлгосон зүйлсээ хуваалцъя.
CSPRNG — Cryptographically secure pseudorandom number generator буюу энгийн үгээр хэлбэл тааварлах боломжгүй рандом тоонуудын цуваа үүсгэгч алгоритм юм. Энэхүү алгоритм нь маш найдвартай ба олон шалгууруудыг хангасан байдаг.
Linux 4.8 аас өмнөх хувилбаруудад dev/random болон dev/urandom file — уудруу рандом тоонууд хэрхэн бичигддэгийг дараах зурагт харуулав.
Эхлээд collector буюу цуглуулагчид орчны нөлөөнөөс(жишээлбэл keyboard-н даралт, сүлжээний дасалдалт, хулганы хөдөлгөөн зэрэг) үүссэн random битүүдийг цуглуулна. Цуглуулсан санамсаргүй bit-үүдийг CSPRNG алгоритмд оруулж найдвартай санамсаргүй тоонуудын пүүлийг үүсгэдэг ба энэхүү санамсаргүй тоонууд /dev/urandom file-д бичигддэг. dev/random — д collector-т цуглуулсан мэдээлэл хангалттай гэж үзсэн тохиолдолд бичих ба эсрэг тохиолдолд хангалттай болтол нь хүлээдэг байна. Харин Linux 4.8 аас хойшхи хувилбар CSPRNG — гарсан утгыг шууд dev/urandom-д бичдэг болсон байна.
Тэгвэл хөгжүүлэгчид CSPRNG-р үүсгэгдсэн random тоонуудыг ашиглахдаа дараах сангуудыг ашигладаг байна.
Linux болон macOS дээр dev/urandom, dev/random хавтасруу шууд хандан рандот тоог үүсгэх боломжтой.
shuf --random-source='/dev/urandom' -n 1 -i 1-100
Харин Windows үйлдлийн систем дээр BCryptGenRandom функыг ашиглах боломжтой.
- C# хэлэнд
System.Security.Cryptography.RandomNumberGenerator.Create()
- Python хэлэнд
os.urandom()
эсвэлsecrets
санг. - Java хэлэнд
java.security.SecureRandom
- JavaScript хэлэнд
window.crypto.getRandomValues(Uint8Array)
crypto.randomBytes()
эсвэлnode-sodium
(Node.js) сангуудыг ашигладаг байна.
ЭХ СУРВАЛЖ
https://www.2uo.de/myths-about-urandom/#the-csprngs-are-alright
https://cryptobook.nakov.com/secure-random-generators/secure-random-generators-csprng