Кіріспе

Яроу алгоритмі – Джон Келси, Брюс Шнайер және Нильс Фергюсон жасаған, 1999 жылы жарияланған криптографиялық псевдокездейі сан генераторларының (CSPRNG) отбасы. Яроу алгоритмі патенттелмеген, роялти төлеусіз және ашық кодты; оны пайдалану үшін лицензия қажет емес. Фергюсон мен Шнайердің жетілдірілген нұсқасы – Fortuna, олардың «Практикалық криптография» кітабында сипатталған. Яроу FreeBSD жүйесінде қолданылған, бірақ қазір Fortuna онымен алмастырылған. Яроу сонымен қатар iOS және macOS жүйелерінде /dev/random құрылғылары үшін пайдаланылған, бірақ Apple 2020 жылғы 1-тоқсаннан бастап Fortuna-ға көшкен.

Атауы

"Яроу" атауы И Цзин жорамалдауының кездейсоқ процесінде яроу шөбін қолдануға сілтеме жасайды. Шамамен 2070-1600 жылдар аралығындағы Ся әулетінен бері қытайлар жорамалдау үшін яроу сабақтарын пайдаланып келген. Жол болжаушылар 50 яроу сабағын топтарға бөліп, модульдік арифметиканы рекурсивті түрде қолданып, біркелкі емес үлестірілімі бар екі бит кездейсоқ ақпаратты жасайды.

Негізгі қағидалар

Yarrow-тың негізгі жобалау принциптері: шабуылдарға төзімділік, криптография саласында білімі жоқ бағдарламашылар үшін қолданудың қарапайымдығы және қазіргі қолданыстағы құрылыс блоктарын қайта пайдалану мүмкіндігі. ANSI X9.17 және RSAREF 2.0 PRNG сияқты бұрын кеңінен қолданылған жобаларда, кейбір жағдайларда шабуылға мүмкіндік беретін кемшіліктер кездеседі. Олардың кейбіреулері нақты шабуылдарды ескере отырып жасалмаған. Yarrow сонымен қатар, PRNG функционалдығы туралы аз білетін жүйе дизайнерлеріне оңай интеграцияны қамтамасыз етуді мақсат етеді.

Құралымдары

Яроудың құрылымы төрт негізгі компоненттен тұрады: энтропиялық аккумулятор, қайта себу механизмі, генерация механизмі және қайта себуді басқару. Yarrow энтропияны екі топқа жинақтайды: жылдам топ, кілтті жиі қайта себуді қамтамасыз етеді, кілттің компрометациясының ұзақтығын ең қысқа мүмкіндікке дейін азайту үшін; баяу топ, кілтті сирек, бірақ консервативті қайта себуді қамтамасыз етеді. Бұл энтропия бағалаулары өте оптимистік болған кезде де қайта себудің қауіпсіздігін қамтамасыз етеді. Қайта себу механизмі энтропия аккумуляторын генерациялау механизмімен байланыстырады. Жылдам топтан қайта себу, бастапқыдан бері жылдам топқа енгізілген барлық деректердің хэшін және ағымдағы кілтті пайдаланып жаңа кілтті жасайды; баяу топтан қайта себу да ұқсас жұмыс істейді, бірақ жаңа кілтті жасау үшін баяу топқа енгізілген барлық деректердің хэшін де пайдаланады. Екі қайта себу де жылдам топтың энтропия бағалауын нөлге қайтарады, бірақ соңғысы баяу топтың бағалауын да нөлге келтіреді. Қайта себу механизмі кілтті үнемі жаңартады, сондықтан егер кілт туралы ақпарат шабуылшыға қайта себу алдында белгілі болса да, қайта себуден кейін ол шабуылшыға белгісіз болады. Қайта себуді басқару компоненті жиі қайта себудің, бұл қалаулы болғамен, қайталамалы болжау шабуылдарына мүмкіндік беруі және кілті бар шабуылшы үшін көбірек ақпаратты компрометтеуі мүмкін сирек қайта себу арасындағы тепе-теңдікті қамтамасыз етеді. Yarrow жылдам топты көздер белгілі бір шекті мәндерден өткен кезде қайта себу үшін пайдаланады, ал баяу топты кем дегенде екі көз басқа шекті мәндерден өткен кезде қайта себу үшін пайдаланады. Нақты шекті мәндер Yarrow 160 бөлімінде келтірілген.

Құрылыс философиясы

Яроу жеткілікті энтропия жинақталып, PRNG-нің болжауға келмейтін күйде болуын қамтамасыз етуге болатынын болжайды. Жобалаушылар кілт бұзылған жағдайда да PRNG-ді қайта қалпына келтіру қабілетін сақтау мақсатында энтропия жинайды. RSAREF, DSA және ANSI X9.17 PRNG-лерінде де ұқсас дизайндық принцип қолданылады.

Ұрпақ

Yarrow 160 шығару үшін үштік DES-тің үш кілтін санаушы режімде қолданады. C – n биттік санаушы мәні; K – кілт. Келесі шығыс блогын жасау үшін Yarrow осында көрсетілген функцияларды орындайды. Yarrow шығыс блогын есептеп отырады, себебі кілт бұзылған жағдайда, бұзылған шығысқа дейінгі бұрынғы шығыстардың ақпары тоқтатылуы мүмкін. Pg жүйелік қауіпсіздік параметріне жеткеннен кейін, алгоритм k бит PRNG шығысын жасап, оны жаңа кілт ретінде пайдаланады. Yarrow 160-та жүйелік қауіпсіздік параметрі 10-ға орнатылған, яғни параметр қасақана кері жолмен іздеуге болатын шығыстар санын азайту үшін төмендетілген.

Қайта себу

Yarrow 160 қайта орналастыру механизмі хэш функциясы және блок шифрі ретінде SHA 1 және Triple DES қолданады. Толық қадамдар түпнұсқа мақалада келтірілген.

Yarrow-160-ны іске асыру

Yarrow 160 Java тілінде және FreeBSD жүйесі үшін іске асырылды. Мысалдар Марк Р. В. Мюррейдің "FreeBSD үшін Yarrow PRNG-нің іске асырылуы" атты еңбегінде келтірілген.

Артықшылықтары

Yarrow қолданыстағы құрылыс блоктарын қайта пайдаланады. Бұрынғы PRNG-мен салыстырғанда, Yarrow тиімді. Yarrow-ды криптография білімі жоқ бағдарламашылар қауіпсіз түрде пайдалана алады. Yarrow портативті және дәл анықталған. Интерфейс қарапайым және түсінікті. Бұл мүмкіндіктер іске асыру қателіктерінің ықтималдығын азайтады. Yarrow шабуылға бағытталған жобалау процесін пайдаланып құрылды. Yarrow энтропиясының бағасы өте консервативті, осылайша жан-жақты іздеу шабуылдарын болдырмайды. PRNG-тердің нақты қолданбаларда энтропияны асыра бағалау және болжамды бастапқы мәндері салдарынан сәтсіздікке ұшырауы жиі кездеседі. Yarrow-дың қайта орналастыру процесі есептеу жағынан қымбат, сондықтан PRNG кілтін болжауға тырысудың құны жоғары. Yarrow тұқым файлдарын басқаруды жеңілдету үшін функцияларды қолданады, сондықтан файлдар үнемі жаңартылады. Криптоаналитикалық шабуылдарды басқару үшін Yarrow қауіпсіз блок шифрын негізге алады. Генерация механизмінің қауіпсіздік деңгейі блок шифрына байланысты. Yarrow деректерге тәуелді орындалу жолдарын болдырмауға тырысады. Бұл уақыт шабуылдары мен қуатты талдау сияқты жанама арна шабуылдарын болдырмау үшін жасалады. Бұл бұрынғы PRNG-термен салыстырғанда жақсару, мысалы RSAREF 2.0 PRNG, ол ішкі операциялар туралы қосымша ақпарат құпиялылығын жойса, толығымен бұзылады. Yarrow кіріс үлгілерін өңдеу үшін криптографиялық хэш-функцияларды қолданады, содан кейін үлгілерді қолданыстағы кілтпен біріктіру үшін қауіпсіз жаңарту функциясын қолданады. Бұл шабуылшының кіріс үлгілерін оңай өзгерте алмайтынына кепілдік береді. RSAREF 2.0 PRNG сияқты PRNG-терде осы типтегі таңдалған кіріс шабуылдарына қарсы тұру мүмкіндігі жоқ. ANSI X9.17 PRNG-ден айырмашылығы, Yarrow кілттің бұзылуынан қалпына келтіруге қабілетті. Бұл кілт бұзылса да, шабуылшы болашақ нәтижелерді мәңгілікке болжап бере алмайды дегенді білдіреді. Бұл Yarrow-дың қайта орналастыру механизміне байланысты. Алайда, Yarrow кездейсоқтығын бұзу үшін SHA 1 соқтығысуларын пайдаланатын жарияланған шабуыл жоқ. Yarrow нәтижелері криптографиялық түрде туындағандықтан, осы нәтижелерді пайдаланатын жүйелер генерация механизмі сияқты ғана қауіпсіз болуы мүмкін. Яғни, генерация механизмін бұза алатын шабуылшы, Yarrow нәтижелеріне тәуелді жүйені оңай бұза алады. Бұл мәселені энтропияның жинақталуын арттыру арқылы шешуге болмайды. Yarrow энтропияны бағалауды қажет етеді, бұл іске асыру үшін үлкен қиындық. PRNG-ді қайта орналастыру үшін қанша энтропияны жинауға болатынын анықтау қиын. Бұл мәселені Фортуна, Yarrow-дың жетілдірілген нұсқасы шешеді. Фортунада энтропияны жинау үшін 32 бассейн бар және энтропия бағалаушысы толығымен алынып тасталған. Yarrow-тың күші кілттің мөлшерімен шектеледі. Мысалы, Yarrow 160-тың тиімді кілт мөлшері 160 бит. Егер қауіпсіздік 256 бит талап етілсе, Yarrow 160 бұл жұмысты орындай алмайды.