Кіріспе

Unix-тәрізді операциялық жүйелерде псевдокездейсоқ сан генераторлары (PSG) – криптографиялық қауіпсіз псевдокездейсоқ сан генераторлары (CSPRNG) ретінде қызмет ететін арнайы файлдар. Олар қоршаған орта шуынан, құрылғы драйверлерінен және басқа көздерден жиналған энтропиямен қамтамасыз етілген CSPRNG-ге қол жеткізуге мүмкіндік береді. Әдетте, сұралғаннан аз энтропия болған жағдайда бұғатталатын болған; бірақ соңғы уақыттарда (операциялық жүйелер арасындағы айырмашылықтар төменде келтірілген) ол көбінесе жеткілікті энтропия жиналғанға дейін жүктелу кезінде бұғатталады, содан кейін тұрақты түрде ашылады. Құрылғы әдетте бұғатталатын құрылғы болған емес, тіпті псевдокездейсоқ сан генераторының бастамасы жүктелуден бастап энтропиямен толыққанды инициализацияланбаған болса да. Бұл арнайы файл 1994 жылы Linux жүйесінде пайда болды және Unix-қа ұқсас басқа операциялық жүйелерде жылдам қабылданып алынды. 2016 жылдың қазан айында Linux ядросының 4.8 нұсқасы шығарылғанда, ядроның псевдокездейсоқ сан генераторы Теодор Цоның ChaCha20 негізіндегі криптографиялық псевдокездейсоқ сан генераторына (CPRNG) ауыстырылды, бұл Bernstein-нің жоғары бағаланған ChaCha20 ағынды шифріне негіделген. Linux ядросының 5.17 нұсқасынан бастап, кездейсоқ сан генераторы энтропия жинағышында SHA 1 криптографиялық хэш функциясын пайдаланудан BLAKE2s-қа, жаңа, жылдам және қауіпсіз хэш функциясына ауысты.

Бастапқы іске асыру

Ядро кеңістігінде кездейсоқ сандарды генерациялау алғаш рет 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 сынақ бағдарламалары , және осы кездейсоқ сан генераторларын сынауға болады.

Энтропия инъекциясының сын-тегесі

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-ті үнемі жаңа тұқыммен жаңартады.

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 негізінде қолданған. Олардың арасында ешқандай айырмашылық жоқ, екеуі де бірдей жұмыс істейді.