Yarrow алгоритмі – ашық бастау коды бар криптографиялық кездейсоқ сандар генераторы. Fortuna-мен алмастырылды, iOS, macOS-та қолданылды. Қауіпсіздік, шифрлау.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Яроу алгоритмі – Джон Келси, Брюс Шнайер және Нильс Фергюсон жасаған, 1999 жылы жарияланған криптографиялық псевдокездейі сан генераторларының (CSPRNG) отбасы. Яроу алгоритмі патенттелмеген, роялти төлеусіз және ашық кодты; оны пайдалану үшін лицензия қажет емес. Фергюсон мен Шнайердің жетілдірілген нұсқасы – Fortuna, олардың «Практикалық криптография» кітабында сипатталған. Яроу FreeBSD жүйесінде қолданылған, бірақ қазір Fortuna онымен алмастырылған. Яроу сонымен қатар iOS және macOS жүйелерінде /dev/random құрылғылары үшін пайдаланылған, бірақ Apple 2020 жылғы 1-тоқсаннан бастап Fortuna-ға көшкен.
The Yarrow algorithm is a family of cryptographic pseudorandom number generators (CSPRNG) devised by John Kelsey, Bruce Schneier, and Niels Ferguson and published in 1999. The Yarrow algorithm is explicitly unpatented, royalty free, and open source; no license is required to use it. An improved design from Ferguson and Schneier, Fortuna, is described in their book, Practical Cryptography
Yarrow was used in FreeBSD, but is now superseded by Fortuna. Yarrow was also incorporated in iOS and macOS for their /dev/random devices, but Apple has switched to Fortuna since 2020 Q1.
Атауы
"Яроу" атауы И Цзин жорамалдауының кездейсоқ процесінде яроу шөбін қолдануға сілтеме жасайды. Шамамен 2070-1600 жылдар аралығындағы Ся әулетінен бері қытайлар жорамалдау үшін яроу сабақтарын пайдаланып келген. Жол болжаушылар 50 яроу сабағын топтарға бөліп, модульдік арифметиканы рекурсивті түрде қолданып, біркелкі емес үлестірілімі бар екі бит кездейсоқ ақпаратты жасайды.
The name Yarrow alludes to the use of the yarrow plant in the random generating process of I Ching divination. Since the Xia dynasty (c. 2070 to c. 1600 BCE), Chinese have used yarrow stalks for divination. Fortunetellers divide a set of 50 yarrow stalks into piles and use modular arithmetic recursively to generate two bits of random information
that have a non uniform distribution.
Негізгі қағидалар
Yarrow-тың негізгі жобалау принциптері: шабуылдарға төзімділік, криптография саласында білімі жоқ бағдарламашылар үшін қолданудың қарапайымдығы және қазіргі қолданыстағы құрылыс блоктарын қайта пайдалану мүмкіндігі. ANSI X9.17 және RSAREF 2.0 PRNG сияқты бұрын кеңінен қолданылған жобаларда, кейбір жағдайларда шабуылға мүмкіндік беретін кемшіліктер кездеседі. Олардың кейбіреулері нақты шабуылдарды ескере отырып жасалмаған. Yarrow сонымен қатар, PRNG функционалдығы туралы аз білетін жүйе дизайнерлеріне оңай интеграцияны қамтамасыз етуді мақсат етеді.
Yarrow's main design principles are: resistance to attacks, easy use by programmers with no cryptography background, and reusability of existing building blocks. The former widely used designs such as ANSI X9.17 and RSAREF 2.0 PRNG have loopholes that provide attack opportunities under some circumstances. Some of them are not designed with real world attacks in mind. Yarrow also aims to provide easy integration, to enable system designers with little knowledge of PRNG functionality.
Құралымдары
Яроудың құрылымы төрт негізгі компоненттен тұрады: энтропиялық аккумулятор, қайта себу механизмі, генерация механизмі және қайта себуді басқару. Yarrow энтропияны екі топқа жинақтайды: жылдам топ, кілтті жиі қайта себуді қамтамасыз етеді, кілттің компрометациясының ұзақтығын ең қысқа мүмкіндікке дейін азайту үшін; баяу топ, кілтті сирек, бірақ консервативті қайта себуді қамтамасыз етеді. Бұл энтропия бағалаулары өте оптимистік болған кезде де қайта себудің қауіпсіздігін қамтамасыз етеді. Қайта себу механизмі энтропия аккумуляторын генерациялау механизмімен байланыстырады. Жылдам топтан қайта себу, бастапқыдан бері жылдам топқа енгізілген барлық деректердің хэшін және ағымдағы кілтті пайдаланып жаңа кілтті жасайды; баяу топтан қайта себу да ұқсас жұмыс істейді, бірақ жаңа кілтті жасау үшін баяу топқа енгізілген барлық деректердің хэшін де пайдаланады. Екі қайта себу де жылдам топтың энтропия бағалауын нөлге қайтарады, бірақ соңғысы баяу топтың бағалауын да нөлге келтіреді. Қайта себу механизмі кілтті үнемі жаңартады, сондықтан егер кілт туралы ақпарат шабуылшыға қайта себу алдында белгілі болса да, қайта себуден кейін ол шабуылшыға белгісіз болады. Қайта себуді басқару компоненті жиі қайта себудің, бұл қалаулы болғамен, қайталамалы болжау шабуылдарына мүмкіндік беруі және кілті бар шабуылшы үшін көбірек ақпаратты компрометтеуі мүмкін сирек қайта себу арасындағы тепе-теңдікті қамтамасыз етеді. Yarrow жылдам топты көздер белгілі бір шекті мәндерден өткен кезде қайта себу үшін пайдаланады, ал баяу топты кем дегенде екі көз басқа шекті мәндерден өткен кезде қайта себу үшін пайдаланады. Нақты шекті мәндер Yarrow 160 бөлімінде келтірілген.
The design of Yarrow consists of four major components: an entropy accumulator, a reseed mechanism, a generation mechanism, and reseed control. Yarrow accumulates entropy into two pools: the fast pool, which provides frequent reseeds of the key to keep the duration of key compromises as short as possible; the slow pool, which provides rare but conservative reseeds of the key. This makes sure that the reseed is secured even when the entropy estimates are very optimistic. The reseed mechanism connects the entropy accumulator to the generating mechanism. Reseeding from the fast pool uses the current key and the hash of all inputs to the fast pool since startup to generate a new key; reseeding from the slow pool behaves similarly, except it also uses the hash of all inputs to the slow pool to generate a new key. Both of the reseedings reset the entropy estimation of the fast pool to zero, but the last one also sets the estimation of the slow pool to zero. The reseeding mechanism updates the key constantly, so that even if the key of pool information is known to the attacker before the reseed, they will be unknown to the attacker after the reseed. The reseed control component is leveraging between frequent reseeding, which is desirable but might allow iterative guessing attacks, and infrequent reseeding, which compromises more information for an attacker who has the key. Yarrow uses the fast pool to reseed whenever the source passes some threshold values, and uses the slow pool to reseed whenever at least two of its sources pass some other threshold value. The specific threshold values are mentioned in the Yarrow 160 section.
Құрылыс философиясы
Яроу жеткілікті энтропия жинақталып, PRNG-нің болжауға келмейтін күйде болуын қамтамасыз етуге болатынын болжайды. Жобалаушылар кілт бұзылған жағдайда да PRNG-ді қайта қалпына келтіру қабілетін сақтау мақсатында энтропия жинайды. RSAREF, DSA және ANSI X9.17 PRNG-лерінде де ұқсас дизайндық принцип қолданылады.
Yarrow assumes that enough entropy can be accumulated to ensure that the PRNG is in an unpredictable state. The designers accumulate entropy in the purpose of keeping the ability to recover the PRNG even when the key is compromised. Similar design philosophy is taken by RSAREF, DSA and ANSI X9.17 PRNGs.
Ұрпақ
Yarrow 160 шығару үшін үштік DES-тің үш кілтін санаушы режімде қолданады. C – n биттік санаушы мәні; K – кілт. Келесі шығыс блогын жасау үшін Yarrow осында көрсетілген функцияларды орындайды. Yarrow шығыс блогын есептеп отырады, себебі кілт бұзылған жағдайда, бұзылған шығысқа дейінгі бұрынғы шығыстардың ақпары тоқтатылуы мүмкін. Pg жүйелік қауіпсіздік параметріне жеткеннен кейін, алгоритм k бит PRNG шығысын жасап, оны жаңа кілт ретінде пайдаланады. Yarrow 160-та жүйелік қауіпсіздік параметрі 10-ға орнатылған, яғни параметр қасақана кері жолмен іздеуге болатын шығыстар санын азайту үшін төмендетілген.
Yarrow 160 uses three key Triple DES in counter mode to generate outputs. C is an n bit counter value; K is the key. In order to generate the next output block, Yarrow follows the functions shown here. Yarrow keeps count of the output block, because once the key is compromised, the leak of the old output before the compromised one can be stopped immediately. Once some system security parameter Pg is reached, the algorithm will generate k bits of PRNG output and use them as the new key. In Yarrow 160, the system security parameter is set to be 10, which means The parameter is intentionally set to be low to minimize the number of outputs that can be backtracked.
Қайта себу
Yarrow 160 қайта орналастыру механизмі хэш функциясы және блок шифрі ретінде SHA 1 және Triple DES қолданады. Толық қадамдар түпнұсқа мақалада келтірілген.
The reseed mechanism of Yarrow 160 uses SHA 1 and Triple DES as the hash function and block cipher. The details steps are in the original paper.
Yarrow-160-ны іске асыру
Yarrow 160 Java тілінде және FreeBSD жүйесі үшін іске асырылды. Мысалдар Марк Р. В. Мюррейдің "FreeBSD үшін Yarrow PRNG-нің іске асырылуы" атты еңбегінде келтірілген.
Yarrow 160 has been implemented in Java, and for FreeBSD. The examples can be found in "An implementation of the Yarrow PRNG for FreeBSD" by Mark R. V. Murray.
Артықшылықтары
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 бұл жұмысты орындай алмайды.
Yarrow reuses existing building blocks. Compared to previous PRNGs, Yarrow is reasonably efficient. Yarrow can be used by programmers with no cryptography background in a reasonably secure way. Yarrow is portable and precisely defined. The interface is simple and clear. These features somewhat decrease the chances of implementation errors. Yarrow was created using an attack oriented design process. The entropy estimation of Yarrow is very conservative, thus preventing exhaustive search attacks. It is very common that PRNGs fail in real world applications due to entropy overestimation and guessable starting points. The reseeding process of Yarrow is relatively computationally expensive, thus the cost of attempting to guess the PRNG's key is higher. Yarrow uses functions to simplify the management of seed files, thus the files are constantly updated. To handle cryptanalytic attacks, Yarrow is designed to be based on a block cipher that is secured. The level of security of the generation mechanism depends on the block cipher. Yarrow tries to avoid data dependent execution paths. This is done to prevent side channel attacks such as timing attacks and power analysis. This is an improvement compared to earlier PRNGs, for example RSAREF 2.0 PRNG, that will completely fall apart once additional information about the internal operations are no longer secured. Yarrow uses cryptographic hash functions to process input samples, and then uses a secure update function to combine the samples with the existing key. This makes sure that the attacker cannot easily manipulate the input samples. PRNGs such as RSAREF 2.0 PRNG do not have the ability to resist this kind of chosen input attack. Unlike ANSI X9.17 PRNG, Yarrow has the ability to recover from a key compromise. This means that even when the key is compromised, the attacker will not be able to predict future outputs forever. This is due to the reseeding mechanism of Yarrow. However, there is no published attack that uses SHA 1 collisions to undermine Yarrow's randomness. Since the outputs of Yarrow are cryptographically derived, the systems that use those outputs can only be as secure as the generation mechanism itself. That means the attacker who can break the generation mechanism will easily break a system that depends on Yarrow's outputs. This problem cannot be solved by increasing entropy accumulation. Yarrow requires entropy estimation, which is a very big challenge for implementations. It is hard to be sure how much entropy to collect before using it to reseed the PRNG. This problem is solved by Fortuna, an improvement of Yarrow. Fortuna has 32 pools to collect entropy and removed the entropy estimator completely. Yarrow's strength is limited by the size of the key. For example, Yarrow 160 has an effective key size of 160 bits. If the security requires 256 bits, Yarrow 160 is not capable of doing the job.