Рандом тооны тухай

Unix-ийн төрлийн үйлдлийн системүүдэд dev/random, dev/urandom гэсэн file-ууд байдгийг та мэдэх үү? Тэгвэл энэхүү file — уудад рандом тоон цуваа тасралтгүй бичигдэж байдаг ба тоон цуваанууд хэрхэн бичигддэг талаар ойлгосон зүйлсээ хуваалцъя.

CSPRNGCryptographically secure pseudorandom number generator буюу энгийн үгээр хэлбэл тааварлах боломжгүй рандом тоонуудын цуваа үүсгэгч алгоритм юм. Энэхүү алгоритм нь маш найдвартай ба олон шалгууруудыг хангасан байдаг.

Linux 4.8 аас өмнөх хувилбаруудад dev/random болон dev/urandom file — уудруу рандом тоонууд хэрхэн бичигддэгийг дараах зурагт харуулав.

Linux 4.8 аас өмнөх хувилбарууд

Эхлээд collector буюу цуглуулагчид орчны нөлөөнөөс(жишээлбэл keyboard-н даралт, сүлжээний дасалдалт, хулганы хөдөлгөөн зэрэг) үүссэн random битүүдийг цуглуулна. Цуглуулсан санамсаргүй bit-үүдийг CSPRNG алгоритмд оруулж найдвартай санамсаргүй тоонуудын пүүлийг үүсгэдэг ба энэхүү санамсаргүй тоонууд /dev/urandom file-д бичигддэг. dev/random — д collector-т цуглуулсан мэдээлэл хангалттай гэж үзсэн тохиолдолд бичих ба эсрэг тохиолдолд хангалттай болтол нь хүлээдэг байна. Харин Linux 4.8 аас хойшхи хувилбар CSPRNG — гарсан утгыг шууд dev/urandom-д бичдэг болсон байна.

Linux 4.8 аас дараах хувилбар

Тэгвэл хөгжүүлэгчид 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

--

--