Разработан алгоритм Ярроу, семейство генераторов криптографических псевдослучайных чисел (CPRNG) Авторы Джон Келси, Брюс Шнайер и Нильс Фергюсон, опубликовано в 1999 году. Алгоритм Ярроу явно не запатентован, не требует лицензионных отчислений и имеет открытый исходный код; для его использования не требуется лицензии. Ярроу включен в iOS и macOS для их устройств / dev / random и был в FreeBSD (где он заменен на Fortuna ).
Усовершенствованный дизайн от Фергюсона и Шнайера, Fortuna, описан в их книге «Практическая криптография», и FreeBSD теперь использует его.
Имя тысячелистник намекает на использование тысячелистник в случайном процессе генерации гадания И Цзин. Начиная с династии Ся (ок. 2070 - ок. 1600 г. до н.э.), китайцы использовали тысячелистник стебли для гадания. Гадалки делят набор из 50 стеблей тысячелистника на стопки и рекурсивно используют модульную арифметику для генерации двух битов случайной информации. которые имеют не- равномерное распределение.
Основными принципами дизайна Ярроу являются: устойчивость к атакам, простота использования программистами, не имеющими опыта криптографии, и возможность повторного использования существующих строительных блоков. Первые широко используемые конструкции, такие как и, имеют лазейки, которые дают возможность атаковать при определенных обстоятельствах. Некоторые из них не предназначены для реальных атак. Yarrow также стремится обеспечить легкую интеграцию, чтобы позволить разработчикам систем с небольшим знанием функциональности ГПСЧ.
Конструкция Ярроу состоит из четырех основных компонентов: энтропийного аккумулятора, механизма повторной засечки, механизм генерации и контроль повторного заполнения.
Тысячелистник накапливает энтропию в два пула: быстрый пул, который обеспечивает частые повторные посылки ключа для минимизации продолжительности взлома ключей; медленный пул, который обеспечивает редкие, но консервативные повторные выборки ключа. Это гарантирует, что повторное заполнение защищено, даже если оценки энтропии очень оптимистичны.
Механизм повторного заполнения соединяет аккумулятор энтропии с механизмом генерации. При повторной загрузке из быстрого пула используется текущий ключ и хэш всех входов в быстрый пул с момента запуска для генерации нового ключа; повторное заполнение из медленного пула ведет себя аналогичным образом, за исключением того, что оно также использует хэш всех входных данных в медленный пул для генерации нового ключа. Обе повторной загрузки сбрасывают оценку энтропии быстрого пула до нуля, но последнее также устанавливает оценку медленного пула на ноль. Механизм повторного заполнения обновляет ключ постоянно, так что даже если информация о ключе пула известна злоумышленнику до повторного заполнения, они не будут известны злоумышленнику после повторного заполнения.
Компонент управления повторным заполнением использует между частым повторным заполнением, что желательно, но может допускать итеративные атаки с предположением, и нечастым повторным заполнением, которое компрометирует больше информации для злоумышленника, у которого есть ключ. Ярроу использует быстрый пул для повторного заполнения всякий раз, когда источник достигает некоторых пороговых значений, и использует медленный пул для повторного заполнения всякий раз, когда по крайней мере два из его источников проходят какое-либо другое пороговое значение. Конкретные пороговые значения указаны в разделе Ярроу-160.
Ярроу предполагает, что может быть накоплено достаточно энтропии, чтобы гарантировать, что ГПСЧ находится в непредсказуемом состоянии. Разработчики накапливают энтропию, чтобы сохранить возможность восстановления ГПСЧ, даже если ключ скомпрометирован. Аналогичная философия проектирования используется в PRNG RSAREF, DSA и ANSI X9.17.
Ярроу использует два важных алгоритма: одностороннюю хэш-функцию и блочный шифр. Конкретное описание и свойства перечислены в таблице ниже.
Алгоритмы | Свойства | Что использует Yarrow-160 |
---|---|---|
Хеш-функция h (x) |
Для входных значений M| M | выборки выходных значений равномерно распределены по m-битовым значениям. | SHA-1 хэш-функция |
Блочный шифр E () |
Высокая статистическая производительность выходных данных при наличии сильно структурированных входных данных. | Трехклавишный Triple DES |
Ярроу-160 использует трехклавишный Triple DES в режиме счетчика для генерации выходных данных. C - n-битное значение счетчика; K - это ключ. Чтобы сгенерировать следующий выходной блок, Ярроу следует функциям, показанным здесь.
Тысячелистник ведет счет выходного блока, потому что, как только ключ будет скомпрометирован, утечка старого выхода до взломанного может быть немедленно остановлена. Как только достигается некоторый системный параметр безопасности P g, алгоритм генерирует k битов вывода PRNG и использует их в качестве нового ключа. В Yarrow-160 для параметра безопасности системы установлено значение 10, что означает P g = 10. Параметр намеренно установлен на низкий уровень, чтобы минимизировать количество выходов, для которых может быть выполнено обратное отслеживание.
Механизм повторной загрузки Yarrow-160 использует SHA-1 и Triple DES в качестве хэш-функции и блочного шифра. Подробные инструкции приведены в исходном документе.
Yarrow-160 была реализована в Java и для FreeBSD. Примеры можно найти в «Реализации Yarrow PRNG для FreeBSD» Марка Р. В. Мюррея.