Кіріспе
Unix-тәрізді операциялық жүйелерде псевдокездейсоқ сан генераторлары (PSG) – криптографиялық қауіпсіз псевдокездейсоқ сан генераторлары (CSPRNG) ретінде қызмет ететін арнайы файлдар. Олар қоршаған орта шуынан, құрылғы драйверлерінен және басқа көздерден жиналған энтропиямен қамтамасыз етілген CSPRNG-ге қол жеткізуге мүмкіндік береді. Әдетте, сұралғаннан аз энтропия болған жағдайда бұғатталатын болған; бірақ соңғы уақыттарда (операциялық жүйелер арасындағы айырмашылықтар төменде келтірілген) ол көбінесе жеткілікті энтропия жиналғанға дейін жүктелу кезінде бұғатталады, содан кейін тұрақты түрде ашылады. Құрылғы әдетте бұғатталатын құрылғы болған емес, тіпті псевдокездейсоқ сан генераторының бастамасы жүктелуден бастап энтропиямен толыққанды инициализацияланбаған болса да. Бұл арнайы файл 1994 жылы Linux жүйесінде пайда болды және Unix-қа ұқсас басқа операциялық жүйелерде жылдам қабылданып алынды. 2016 жылдың қазан айында Linux ядросының 4.8 нұсқасы шығарылғанда, ядроның псевдокездейсоқ сан генераторы Теодор Цоның ChaCha20 негізіндегі криптографиялық псевдокездейсоқ сан генераторына (CPRNG) ауыстырылды, бұл Bernstein-нің жоғары бағаланған ChaCha20 ағынды шифріне негіделген. Linux ядросының 5.17 нұсқасынан бастап, кездейсоқ сан генераторы энтропия жинағышында SHA 1 криптографиялық хэш функциясын пайдаланудан BLAKE2s-қа, жаңа, жылдам және қауіпсіз хэш функциясына ауысты.
In Unix like operating systems, and are special files that serve as cryptographically secure pseudorandom number generators (CSPRNGs). They allow access to a CSPRNG that is seeded with entropy from environmental noise, collected from device drivers and other sources. typically blocked if there was less entropy available than requested; more recently (see below for the differences between operating systems) it usually blocks at startup until sufficient entropy has been gathered, then unblocks permanently. The device typically was never a blocking device, even if the pseudorandom number generator seed was not fully initialized with entropy since boot. Not all operating systems implement the same methods for and
This special file originated in Linux in 1994. It was quickly adopted by other Unix like operating systems. In October 2016, with the release of Linux kernel version 4.8, the kernel's was switched over to a ChaCha20 based cryptographic pseudorandom number generator (CPRNG) implementation by Theodore Ts'o, based on Bernstein's well regarded stream cipher ChaCha20. Since version 5.17 of the Linux kernel, the random number generator switched from using the SHA 1 cryptographic hash function in the entropy collector to BLAKE2s, a newer, faster and more secure hash function.
Бастапқы іске асыру
Ядро кеңістігінде кездейсоқ сандарды генерациялау алғаш рет 1994 жылы Теодор Цо Linux жүйесі үшін іске асырылды. Іске асыру шифрларды емес, қауіпсіз хэштерді пайдаланды, генератор бастапқыда жобаланған кезде қолданылған криптографиялық экспорт шектеулерінен аулақ болу үшін. Сондай-ақ, кез келген хэш немесе шифрдың әлсіз екендігі анықталуы мүмкін деген болжаммен жобаланған, сондықтан жоба осындай әлсіздіктерге қарамастан берік. Пулдың бұзылуынан жылдам қалпына келу қажеттілік ретінде қарастырылмаған, өйткені пулдың бұзылуына қойылатын талаптар операциялық жүйенің байланысты емес бөліктеріне әлдеқайда оңай және тікелей шабуыл жасау үшін жеткілікті. Цо-ның іске асыруында генератор энтропиялық пулдегі шу биттерінің санын бағалайды. Осы энтропиялық пулден кездейсоқ сандар жасалады. Оқылғанда, құрылғы энтропиялық пулдегі шу биттерінің шамамен есептелген санының ішіндегі кездейсоқ байттарды ғана қайтарады. Энтропиялық пул бос болған кезде, қосымша қоршаған орта шуы жиналғанға дейін оқу тоқтатылады. Оның мақсаты – мүмкіндігінше үлкен энтропиямен шығыс беретін, криптографиялық қауіпсіз псевдокездейсоқ сандар генераторы ретінде қызмет ету. Авторлар бұл жоғары құнды немесе ұзақ мерзімді қорғаныс үшін криптографиялық кілттерді жасау үшін пайдалануды ұсынады./Блоктаусыз кездейсоқ дерек көзі.
Сондай-ақ, оған жазуға да болады. Бұл кез келген пайдаланушыға кездейсоқ деректерді пулға қосуға мүмкіндік береді. Кездейсоқ емес деректер зиянсыз, өйткені тек артықшылықты пайдаланушы ғана энтропияны бағалауды арттыру үшін қажетті ioctl командасын орындай алады. Энтропияның ағымдағы мөлшері және Linux ядросының энтропиялық пулының көлемі, екеуі де биттермен өлшенеді, командасы арқылы және сәйкесінше көрсетілуі мүмкін.
Энтропияны енгізу
Гаттерман, Пинкас және Рейнман 2006 жылдың наурызында Linux кездейсоқ сан генераторының бірнеше әлсіз тұстарын сипаттайтын егжей-тегжейлі криптографиялық талдауын жариялады. Олар есептейтін ең ауыр мәселе – кіріктірілген немесе Live CD жүйелері, мысалы маршрутизаторлар және дискісіз клиенттер, олар үшін жүктелу күйі болжамды және қоршаған ортадан ентропияның қолжетімді көлемі шектеулі болуы мүмкін. Ұдайы есімдемесі бар жүйе үшін олар RNG күйін келесі қайта жүктеу кезінде RNG күйіне қосу үшін, жүйені өшіру кезінде сақтауды ұсынады. Желілік трафик энтропияның негізгі қолжетімді көзін құрайтын маршрутизатор үшін олар қайта жүктеу кезінде күйді сақтаудың "маршрутизатор пайдалануға алынған сәттен бастап барлық желілік трафикті тыңдауды қажет ететінін" атап өтеді, немесе маршрутизатордың ішкі күйіне тікелей қол жеткізуді талап етеді. Бұл мәселе, олар атап өткендей, сымсыз маршрутизатор үшін ерекше маңызды, өйткені оның желілік трафигі қашықтан түсірілуі мүмкін, ал RNG деректерді шифрлау кілттерін жасау үшін қолданылуы мүмкін. Linux ядросы, егер орнатылған болса, бірнеше аппараттық кездейсоқ сан генераторларын қолдайды. Мұндай құрылғының шикі шығысын алуға болады. Linux ядросының 3.16 және одан кейінгі нұсқаларында ядроның өзі HWRNG-нің анықталатын ентропия сапасына сүйене отырып, аппараттық кездейсоқ сан генераторларынан алынған деректерді жылжымалы шкала бойынша араластырады. Бұл дегеніміз, осы жұмысты орындау үшін, мысалы, пайдаланушы кеңістігіндегі демон қажет емес. Linux ядросының 3.17+ нұсқаларында VirtIO RNG 0-ден жоғары дефолттық сапамен анықталды, сондықтан қазіргі уақытта HWRNG-ге дефолтты түрде қосылған жалғыз HWRNG болып табылады. Энтропиялық пулді , және т.б. бағдарламалары арқылы жақсартуға болады. , Entropy Key сияқты аппараттық кездейсоқ сан генераторлары осыған жазуға болады. Diehard сынақ бағдарламалары , және осы кездейсоқ сан генераторларын сынауға болады.
With Linux kernel 3.16 and newer, the kernel itself mixes data from hardware random number generators into on a sliding scale based on the definable entropy estimation quality of the HWRNG. This means that no userspace daemon, such as from , is needed to do that job. With Linux kernel 3.17+, the VirtIO RNG was modified to have a default quality defined above 0, and as such, is currently the only HWRNG mixed into by default. The entropy pool can be improved by programs like , , etc. With , hardware random number generators like Entropy Key, etc. can write to The diehard tests programs , and can test these random number generators.
Энтропия инъекциясының сын-тегесі
2014 жылдың қаңтар айында Дэниел Бернштейн Linux жүйесінде энтропияның әртүрлі көздерінің қалай араласатынына қатысты сын жариялады. Ол энтропияның басқа көздерін бақылай алатын бір энтропия көзі, басқа энтропия көздерінің кездейсоқтығын жою үшін олардың нәтижесін өзгерте алатын шабуылды сипаттайды. H(x,y,z) функциясын қарастырайық, мұнда H – хэш-функция, ал x, y және z – энтропия көздері, z – процессорлық зиянды HRNG Z-дің нәтижесі: Z, r кездейсоқ мәнін жасайды. Z, H(x,y,r) есептейді. Егер H(x,y,r) нәтижесі қажетті мәнге тең болса, r-ді z ретінде шығарады. Әйтпесе, 1-ден бастап қайталаңыз. Бернштейн шабуылшының DSA және ECDSA-ны бұзу үшін H(x,y,r) функциясын 16 рет қайталау қажет екенін есептеді, бұл RNG нәтижесінің алғашқы төрт битінің 0 болуына себеп болады. Мұның себебі Linux жоғары сапалы бір тұқымды пайдаланудың орнына H-ті үнемі жаңа тұқыммен жаңартады.
Z generates a random value of r.
Z computes H(x,y,r). If the output of H(x,y,r) is equal to the desired value, output r as z. Else, repeat starting at 1. Bernstein estimated that an attacker would need to repeat H(x,y,r) 16 times to compromise DSA and ECDSA, by causing the first four bits of the RNG output to be 0. This is possible because Linux reseeds H on an ongoing basis instead of using a single high quality seed.
BSD жүйелері
FreeBSD операциялық жүйесі тек дұрыс қамтылғанға дейін Both блогына сілтеме береді. FreeBSD-дің PRNG (Fortuna) жүйелі түрде қайта қамтылады және энтропияны бағалауға тырыспайды. Желілік және дискілік белсенділігі аз жүйеде қайта қамту секундтың бір бөлігінен кейін жүзеге асырылады. OpenBSD 5.1 (2012 жылдың 1 мамыры) және RC4-ке негізделген CSPRNG функциясы arc4random-ды пайдаланады. Функция OpenBSD 5.5 (2014 жылдың 1 мамыры) көмегімен күштірек ChaCha20-ға өзгертілді. Жүйе автоматты түрде аппараттық кездейсоқ сандар генераторларын (мысалы, кейбір Intel PCI хабтарында ұсынылғандар) қолда бар болса, OpenBSD Cryptographic Framework арқылы пайдаланады. OpenBSD 6.3 (2018 жылдың 15 сәуірінде) алынып тасталды. NetBSD-нің ескі API-ін іске асыруы да ChaCha20-ға ауыстырылды.
macOS, iOS және басқа Apple операциялық жүйелері
Барлық Apple операциялық жүйелері кем дегенде 2019 жылдың желтоқсанынан бері, мүмкін одан да ертерек Fortuna-ға көшті. Ол SHA 256 негізінде құрылған. Қауіпсіз анклавтың кездейсоқ сандар генераторы (RNG), жүктелу кезеңінің уақыт ауытқуы, аппараттық үзіліс (уақыттық есептеулер) сияқты бірнеше энтропия көздері пайдаланылады. RDSEED/RDRAND, оны қолдайтын Intel процессорлары бар Mac компьютерлерінде қолданылады. Тұқымдық (энтропиялық) деректер келесі қайта жүктеулер үшін сақталады. Бұрын macOS және iOS 160 биттік Yarrow алгоритмін SHA 1 негізінде қолданған. Олардың арасында ешқандай айырмашылық жоқ, екеуі де бірдей жұмыс істейді.