Тип функций, разработанных так, чтобы их нельзя было решить с помощью алгоритмов поиска корней
Криптографически безопасный генератор псевдослучайных чисел ( CSPRNG ) или криптографический генератор псевдослучайных чисел ( CPRNG ) — это генератор псевдослучайных чисел (PRNG) со свойствами, которые делают его пригодным для использования в криптографии . Его также называют криптографическим генератором случайных чисел ( CRNG ).
Фон
Большинству криптографических приложений требуются случайные числа, например:
«Качество» случайности, требуемое для этих приложений, варьируется. Например, создание одноразового номера в некоторых протоколах требует только уникальности. С другой стороны, генерация главного ключа требует более высокого качества, например, большей энтропии . А в случае одноразовых блокнотов информационно -теоретическая гарантия идеальной секретности сохраняется только в том случае, если ключевой материал поступает из истинно случайного источника с высокой энтропией, и, таким образом, любой генератор псевдослучайных чисел недостаточен.
В идеале генерация случайных чисел в CSPRNG использует энтропию, полученную из высококачественного источника, как правило, API случайности операционной системы . Однако неожиданные корреляции были обнаружены в нескольких таких якобы независимых процессах. С точки зрения теории информации, количество случайности, энтропия, которая может быть сгенерирована, равна энтропии, предоставляемой системой. Но иногда, в практических ситуациях, требуются числа с большей случайностью, чем может обеспечить доступная энтропия. Кроме того, процессы извлечения случайности из работающей системы на практике медленные. В таких случаях иногда можно использовать CSPRNG. CSPRNG может «растянуть» доступную энтропию на большее количество бит.
Требования
Требования обычного PRNG также удовлетворяются криптографически безопасным PRNG, но обратное неверно. Требования CSPRNG делятся на две группы:
- Они проходят статистические тесты на случайность :
- Каждый CSPRNG должен удовлетворять тесту на следующий бит . То есть, если даны первые k бит случайной последовательности, не существует алгоритма с полиномиальным временем , который может предсказать ( k +1)-й бит с вероятностью успеха, не пренебрежимо лучшей, чем 50%. [1] Эндрю Яо доказал в 1982 году, что генератор, прошедший тест на следующий бит, пройдет все другие статистические тесты на случайность с полиномиальным временем. [2]
- Они хорошо выдерживают серьезные атаки, даже когда часть их начального или рабочего состояния становится доступной злоумышленнику: [3]
- Каждый CSPRNG должен выдерживать «атаки расширения компромисса состояния». [3] : 4 В случае, если часть или все его состояние было раскрыто (или правильно угадано), должно быть невозможно восстановить поток случайных чисел до раскрытия. Кроме того, если во время работы есть вход энтропии, должно быть невозможно использовать знание состояния входа для прогнозирования будущих условий состояния CSPRNG.
Например, если рассматриваемый PRNG производит вывод путем вычисления битов числа pi последовательно, начиная с некоторой неизвестной точки в двоичном расширении, он вполне может удовлетворять тесту следующего бита и, таким образом, быть статистически случайным, поскольку предполагается, что pi является обычным числом . Однако этот алгоритм не является криптографически безопасным; злоумышленник, который определяет, какой бит числа pi используется в данный момент (т. е. состояние алгоритма), сможет вычислить также все предыдущие биты.
Большинство PRNG не подходят для использования в качестве CSPRNG и потерпят неудачу по обоим пунктам. Во-первых, хотя выходные данные большинства PRNG кажутся случайными для различных статистических тестов, они не сопротивляются определенному обратному проектированию. Можно найти специализированные статистические тесты, специально настроенные на такой PRNG, который показывает, что случайные числа не являются действительно случайными. Во-вторых, для большинства PRNG, когда их состояние раскрыто, все прошлые случайные числа могут быть ретродиктованы, что позволяет злоумышленнику читать все прошлые сообщения, а также будущие.
CSPRNG специально разработаны для сопротивления этому типу криптоанализа .
Определения
В асимптотической постановке семейство детерминированных функций, вычислимых за полиномиальное время для некоторого полинома p , является генератором псевдослучайных чисел (ГПСЧ или ГПСЧ в некоторых источниках), если он растягивает длину своего входа ( для любого k ), и если его выход вычислительно неотличим от истинной случайности, то есть для любого вероятностного алгоритма полиномиального времени A , который выводит 1 или 0 в качестве отличительного признака,
для некоторой пренебрежимо малой функции . [4] (Обозначение означает, что x выбирается равномерно случайным образом из множества X .)
Существует эквивалентная характеристика: для любого семейства функций G является PRNG тогда и только тогда, когда следующий выходной бит G не может быть предсказан полиномиальным алгоритмом. [5]
Прямо -защищенный PRNG с длиной блока — это PRNG , где входная строка с длиной k — это текущее состояние в период i , а выход ( , ) состоит из следующего состояния и псевдослучайного выходного блока периода i , который выдерживает расширения компромисса состояния в следующем смысле. Если начальное состояние выбирается равномерно случайным образом из , то для любого i последовательность должна быть вычислительно неотличима от , в котором выбираются равномерно случайным образом из . [6]
Любой PRNG может быть превращен в прямой защищенный PRNG с длиной блока путем разделения его вывода на следующее состояние и фактический вывод. Это делается путем установки , в котором и ; тогда G является прямым защищенным PRNG с как следующим состоянием и как псевдослучайным выходным блоком текущего периода.
Извлечение энтропии
Санта и Вазирани доказали, что несколько потоков битов со слабой случайностью можно объединить для создания более качественного квазислучайного потока битов. [7]
Еще раньше Джон фон Нейман доказал, что простой алгоритм может удалить значительную часть смещения в любом потоке битов, [8] который следует применять к каждому потоку битов перед использованием любой вариации дизайна Санта–Вазирани.
Дизайны
Конструкции CSPRNG делятся на два класса:
- Конструкции, основанные на криптографических примитивах, таких как шифры и криптографические хэши
- Проекты, основанные на математических задачах, которые считаются сложными
Конструкции на основе криптографических примитивов
- Защищенный блочный шифр можно преобразовать в CSPRNG, запустив его в режиме счетчика , например, с помощью специальной конструкции, которую NIST в SP 800-90A называет CTR_DRBG . CTR_DBRG обычно использует Advanced Encryption Standard (AES).
- AES- CTR _DRBG часто используется как генератор случайных чисел в системах, использующих шифрование AES. [9] [10]
- Схема NIST CTR_DRBG стирает ключ после того, как запрошенная случайность выводится путем запуска дополнительных циклов. Это расточительно с точки зрения производительности, но не сразу вызывает проблемы с прямой секретностью. Однако, понимая последствия для производительности, NIST рекомендует «расширенный интерфейс AES-CTR-DRBG» для своих заявок на проект Post-Quantum Cryptography . Этот интерфейс позволяет генерировать несколько наборов случайности без промежуточного стирания, стирая только тогда, когда пользователь явно сигнализирует об окончании запросов. В результате ключ может оставаться в памяти в течение длительного времени, если «расширенный интерфейс» используется неправильно. Более новые ГСЧ «быстрого стирания ключа» стирают ключ со случайностью, как только запрашивается случайность. [11]
- Поточный шифр можно преобразовать в CSPRNG. Это было сделано с RC4, ISAAC и ChaCha20 , и это лишь некоторые из них.
- Криптографически безопасный хеш также может быть основой хорошего CSPRNG, используя, например, конструкцию, которую NIST называет Hash_DRBG .
- Примитив HMAC может использоваться в качестве основы CSPRNG, например, как часть конструкции, которую NIST называет HMAC_DRBG .
Теоретико-числовые конструкции
- Алгоритм Блюма-Блюма-Шуба имеет доказательство безопасности, основанное на сложности проблемы квадратичного остатка . Поскольку единственный известный способ решения этой проблемы — факторизация модуля, обычно считается, что сложность факторизации целых чисел обеспечивает условное доказательство безопасности для алгоритма Блюма-Блюма-Шуба. Однако алгоритм очень неэффективен и, следовательно, непрактичен, если только не требуется экстремальная безопасность.
- Алгоритм Блюма–Микали имеет доказательство безопасности, основанное на сложности задачи дискретного логарифмирования , но при этом он крайне неэффективен.
- Дэниел Браун из Certicom написал доказательство безопасности 2006 года для Dual EC DRBG , основанное на предполагаемой сложности предположения о решающем алгоритме Диффи–Хеллмана , задаче x-логарифма и задаче усеченной точки . Доказательство 2006 года явно предполагает меньшую величину outlen (количество бит, предоставляемых на итерацию), чем в стандарте Dual_EC_DRBG, и что P и Q в стандарте Dual_EC_DRBG (которые, как было обнаружено в 2013 году АНБ, вероятно, были замаскированы) заменены на значения без замаскированных значений.
Практические схемы
«Практические» схемы CSPRNG включают не только алгоритм CSPRNG, но и способ его инициализации (« семя »), сохраняя при этом семя в секрете. Определен ряд таких схем, в том числе:
- Реализации /dev/random в Unix-подобных системах.
- Yarrow , который пытается оценить энтропийное качество своих входных данных и использует SHA-1 и 3DES внутри. Yarrow использовался в macOS и других ОС Apple примерно до декабря 2019 года, после чего перешел на Fortuna.
- Fortuna , преемник Yarrow, который не пытается оценить энтропийное качество своих входных данных; он использует SHA-256 и «любой хороший блочный шифр». Fortuna используется в FreeBSD. Apple изменила название на Fortuna для большинства или всех ОС Apple, начиная примерно с декабря 2019 года.
- Ядро Linux CSPRNG, которое использует ChaCha20 для генерации данных [12] и BLAKE2s для поглощения энтропии. [13]
- arc4random , CSPRNG в Unix-подобных системах, который загружается из /dev/random . Первоначально он основан на RC4 , но все основные реализации теперь используют ChaCha20 . [14] [15] [16]
- CryptGenRandom , часть Microsoft CryptoAPI, предлагаемая в Windows. Различные версии Windows используют разные реализации .
- Стандарт ANSI X9.17 ( Управление ключами финансовых учреждений (оптовая торговля) ), который также был принят в качестве стандарта FIPS . Он принимает в качестве входных данных связку ключей TDEA ( вариант 2 ) k и (начальное значение) 64-битного случайного начального числа s . [17] Каждый раз, когда требуется случайное число, он выполняет следующие шаги:
- Получите текущую дату/время D с максимально возможным разрешением.
- Вычислить временное значение t = TDEA k ( D ) .
- Вычислить случайное значение x = TDEA k ( s ⊕ t ) , где ⊕ обозначает побитовое исключающее ИЛИ .
- Обновить начальное число s = TDEA k ( x ⊕ t ) .
Очевидно, что этот метод легко обобщается на любой блочный шифр; был предложен AES . [18] Если ключ k утечет, весь поток X9.17 может быть предсказан; эта слабость упоминается как причина создания Yarrow. [19]
Все эти вышеупомянутые схемы, за исключением X9.17, также смешивают состояние CSPRNG с дополнительным источником энтропии. Поэтому они не являются «чистыми» генераторами псевдослучайных чисел, в том смысле, что выход не полностью определяется их начальным состоянием. Это дополнение направлено на предотвращение атак, даже если начальное состояние скомпрометировано. [a]
Стандарты
Несколько CSPRNG были стандартизированы. Например:
Этот отозванный стандарт имеет четыре PRNG. Два из них не вызывают споров и проверены: CSPRNG, названные Hash_DRBG
[22] и HMAC_DRBG.
[23]Третий PRNG в этом стандарте, CTR_DRBG , основан на блочном шифре , работающем в режиме счетчика . Он имеет не вызывающую споров конструкцию, но, как было доказано, слабее с точки зрения различения атак, чем уровень безопасности базового блочного шифра, когда количество битов, выводимых из этого PRNG, больше двух в степени размера блока базового блочного шифра в битах. [24]
Когда максимальное количество битов, выводимых из этого PRNG, равно 2 размерам блока , результирующий вывод обеспечивает математически ожидаемый уровень безопасности, который, как ожидается, будет генерировать размер ключа, но показано, что вывод неотличим от истинного генератора случайных чисел. [24] Когда максимальное количество битов, выводимых из этого PRNG, меньше его, обеспечивается ожидаемый уровень безопасности, и вывод оказывается неотличимым от истинного генератора случайных чисел. [24]
В следующей редакции отмечается, что заявленная степень безопасности CTR_DRBG зависит от ограничения общего количества запросов на генерацию и битов, предоставляемых на один запрос на генерацию.
Четвертый и последний PRNG в этом стандарте называется Dual EC DRBG . Было показано, что он не является криптографически безопасным и, как полагают, имеет клептографический бэкдор АНБ. [25]
По сути, это NIST SP 800-90A с удаленным Dual_EC_DRBG, и это замена отмененного стандарта.
- ANSI X9.17-1985 Приложение C
- ANSI X9.31-1998 Приложение A.2.4
- ANSI X9.62-1998 Приложение A.4, устарело с ANSI X9.62-2005, Приложение D (HMAC_DRBG)
Хороший справочник поддерживается NIST . [26]
Существуют также стандарты статистического тестирования новых конструкций CSPRNG:
- Статистический набор тестов для генераторов случайных и псевдослучайных чисел , специальная публикация NIST 800-22. [27]
Уязвимости безопасности
Клептографический бэкдор АНБ в Dual_EC_DRBG PRNG
The Guardian и The New York Times сообщили в 2013 году, что Агентство национальной безопасности (АНБ) вставило бэкдор в генератор псевдослучайных чисел (PRNG) NIST SP 800-90A , что позволяет АНБ легко расшифровывать материалы, зашифрованные с помощью Dual EC DRBG . Обе статьи сообщали [28] [29] , что, как давно подозревали независимые эксперты по безопасности, [30] АНБ вносило уязвимости в стандарт CSPRNG 800-90; это было впервые подтверждено одним из сверхсекретных документов, переданных The Guardian Эдвардом Сноуденом . АНБ тайно работало над тем, чтобы получить собственную версию проекта стандарта безопасности NIST, одобренного для использования во всем мире в 2006 году. В просочившемся документе говорится, что «в конечном итоге АНБ стало единственным редактором». Несмотря на известную возможность использования клептографического бэкдора и другие известные существенные недостатки Dual_EC_DRBG, несколько компаний, таких как RSA Security, продолжали использовать Dual_EC_DRBG до тех пор, пока наличие бэкдора не было подтверждено в 2013 году. [31] RSA Security получила от АНБ за это 10 миллионов долларов. [32]
Атака DUHK
23 октября 2017 года Шаанан Кохни, Мэтью Грин и Надя Хенингер , криптографы из Университета Пенсильвании и Университета Джонса Хопкинса , опубликовали подробности атаки DUHK (Don't Use Hard-coded Keys) на WPA2 , в которой поставщики оборудования используют жестко закодированный начальный ключ для алгоритма ANSI X9.31 RNG, заявив, что «злоумышленник может перебрать зашифрованные данные, чтобы обнаружить остальные параметры шифрования и вывести главный ключ шифрования, используемый для шифрования веб-сеансов или подключений к виртуальной частной сети (VPN)». [33] [34]
Японская шифровальная машина PURPLE
Во время Второй мировой войны Япония использовала шифровальную машину для дипломатической связи; Соединенным Штатам удалось взломать ее и прочитать ее сообщения , в основном потому, что используемые «ключевые значения» были недостаточно случайными.
Ссылки
- ^ Использование энтропийного смешивания после инициализации CSPRNG было подвергнуто сомнению Дэниелом Дж. Бернстайном . [20]
- ^ Кац, Джонатан; Линделл, Йехуда (2008). Введение в современную криптографию. CRC press. стр. 70. ISBN 978-1584885511.
- ^ Эндрю Чи-Чи Яо . Теория и применение функций-лазеек. В трудах 23-го симпозиума IEEE по основам компьютерной науки, 1982.
- ^ ab Kelsey, John; Schneier, Bruce; Wagner, David; Hall, Chris (1998). "Криптоаналитические атаки на генераторы псевдослучайных чисел". Fast Software Encryption (PDF) . Берлин, Гейдельберг: Springer Berlin Heidelberg. doi :10.1007/3-540-69710-1_12. ISBN 978-3-540-64265-7. ISSN 0302-9743.
- ^ Голдрайх, Одед (2001), Основы криптографии I: Базовые инструменты , Кембридж: Издательство Кембриджского университета, ISBN 978-0-511-54689-1, определение 3.3.1.
- ^ Голдрайх, Одед (2001), Основы криптографии I: Базовые инструменты , Кембридж: Издательство Кембриджского университета, ISBN 978-0-511-54689-1, Теорема 3.3.7.
- ^ Додис, Евгений, Заметки к лекции 5 «Введение в криптографию» (PDF) , получено 3 января 2016 г., определение 4.
- ^ Миклош Санта, Умеш В. Вазирани (1984-10-24). "Генерирование квазислучайных последовательностей из слегка случайных источников" (PDF) . Труды 25-го симпозиума IEEE по основам компьютерной науки . Калифорнийский университет . стр. 434–440. ISBN 0-8186-0591-X. Получено 29.11.2006 .
- ^ Джон фон Нейман (1963-03-01). «Различные методы для использования в связи со случайными цифрами». Собрание сочинений Джона фон Неймана . Pergamon Press . С. 768–770. ISBN 0-08-009566-6.
- ^ Клейдермахер, Дэвид; Клейдермахер, Майк (2012). Безопасность встроенных систем: практические методы безопасной и надежной разработки программного обеспечения и систем. Эльзевир. п. 256. ИСБН 9780123868862.
- ^ Кокс, Джордж; Дайк, Чарльз; Джонстон, DJ (2011). «Цифровой генератор случайных чисел Intel (DRNG)» (PDF) .
- ^ Бернстайн, Дэниел Дж. «2017.07.23: Генераторы случайных чисел с быстрым стиранием ключей: попытка одновременно устранить несколько ошибок. #rng #forwardsecrecy #urandom #cascade #hmac #rekeying #proofs».
- ^ "Github commit of random.c". Github. 2 июля 2016 г.
- ^ "Генератор случайных чисел Linux 5.17 ускоряется, переход с SHA1 на BLAKE2s - Phoronix". www.phoronix.com .
- ^ "Журнал CVS arc4random.c". CVS. 1 октября 2013 г.
- ^ "Журнал CVS arc4random.c". CVS. 16 ноября 2014 г.
- ^ "FreeBSD 12.0-RELEASE Release Notes: Runtime Libraries and API". FreeBSD.org . 5 марта 2019 . Получено 24 августа 2019 .
- ^ Менезес, Альфред ; ван Ооршот, Пол ; Ванстоун, Скотт (1996). "Глава 5: Псевдослучайные биты и последовательности" (PDF) . Справочник по прикладной криптографии. CRC Press.
- ^ Янг, Адам; Юнг, Моти (2004-02-01). Вредоносная криптография: разоблачение криптовирусологии. John Wiley & Sons . раздел 3.5.1. ISBN 978-0-7645-4975-5.
- ^ Келси, Джон; Шнайер, Брюс; Фергюсон, Нильс (август 1999 г.). "Yarrow-160: заметки о разработке и анализе криптографического генератора псевдослучайных чисел Yarrow" (PDF) . Шестой ежегодный семинар по избранным областям криптографии . Конспект лекций по информатике. Том 1758. стр. 13–33. doi :10.1007/3-540-46513-8_2. ISBN 978-3-540-67185-5.
- ^ Daniel J. Bernstein (2014-02-05). "cr.yp.to: 2014.02.05: Entropy Attacks!".
Есть ли какой-либо серьезный аргумент в пользу того, что постоянное добавление новой энтропии — это хорошо? На странице руководства Linux /dev/urandom утверждается, что без новой энтропии пользователь "теоретически уязвим для криптографической атаки", но (как я уже упоминал в разных местах) это смехотворный аргумент
- ^ "ФИПС 186-4" (PDF) .
- ^ Кан, Уилсон (4 сентября 2007 г.). «Анализ базовых предположений в DRBG NIST» (PDF) . Получено 19 ноября 2016 г.
- ^ Ye, Katherine Qinru (апрель 2016 г.). "The Notorious PRG: Formal verification of the HMAC-DRBG pseudorandom number generator" (PDF) . Получено 19 ноября 2016 г. .
- ^ abc Campagna, Matthew J. (1 ноября 2006 г.). "Границы безопасности для детерминированного генератора случайных битов на основе кодовой книги NIST" (PDF) . Получено 19 ноября 2016 г. .
- ^ Перлрот, Николь (10 сентября 2013 г.). «Правительство объявляет о шагах по восстановлению доверия к стандартам шифрования» . The New York Times . Получено 19 ноября 2016 г.
- ↑ Отдел компьютерной безопасности, Лаборатория информационных технологий (24 мая 2016 г.). «Случайное число». CSRC | NIST .
- ^ Рукхин, Эндрю; Сото, Хуан; Нечватал, Джеймс; Смид, Майлз; Баркер, Элейн; Ли, Стефан; Левенсон, Марк; Вангел, Марк; Бэнкс, Дэвид; Хекерт, Н.; Дрей, Джеймс; Во, Сан; Бассам, Лоуренс (30 апреля 2010 г.). "Статистический набор тестов для генераторов случайных и псевдослучайных чисел для криптографических приложений". NIST . doi : 10.6028/NIST.SP.800-22r1a – через csrc.nist.gov.
- ^ Джеймс Боргер; Гленн Гринвальд (6 сентября 2013 г.). «Раскрыто: как разведывательные агентства США и Великобритании побеждают конфиденциальность и безопасность в Интернете». The Guardian . Получено 7 сентября 2013 г.
- ^ Николь Перлрот (5 сентября 2013 г.). «АНБ способно нарушить основные гарантии конфиденциальности в Интернете». The New York Times . Получено 7 сентября 2013 г.
- ↑ Брюс Шнайер (15 ноября 2007 г.). «АНБ вставило секретный бэкдор в новый стандарт шифрования?». Wired . Получено 7 сентября 2013 г.
- ↑ Мэтью Грин (20 сентября 2013 г.). «RSA предупреждает разработчиков не использовать продукты RSA».
- ↑ Джозеф Менн (20 декабря 2013 г.). «Эксклюзив: Секретный контракт связал АНБ и пионера индустрии безопасности». Reuters .
- ^ Шаанан Кохни; Мэтью Д. Грин ; Надя Хенингер . «Практические атаки восстановления состояния против устаревших реализаций ГСЧ» (PDF) . duhkattack.com .
- ^ «Атака DUHK Crypto восстанавливает ключи шифрования и раскрывает VPN-подключения». slashdot.org . 25 октября 2017 г. . Получено 25 октября 2017 г. .
Внешние ссылки
В Wikibook Cryptography есть страница на тему: Генерация случайных чисел.
- RFC 4086, Требования к случайности для безопасности
- Java "энтропийный пул" для криптографически безопасных непредсказуемых случайных чисел. Архивировано 2008-12-02 на Wayback Machine
- Стандартный класс Java, предоставляющий криптографически стойкий генератор псевдослучайных чисел (PRNG).
- Криптографически безопасное случайное число в Windows без использования CryptoAPI
- Предполагаемая безопасность генератора случайных чисел на основе эллиптических кривых ANSI-NIST, Дэниел Р.Л. Браун, IACR ePrint 2006/117.
- Анализ безопасности генератора случайных чисел на эллиптической кривой NIST SP 800-90, Дэниел Р. Л. Браун и Кристиан Джостин, IACR ePrint 2007/048. Опубликовано в CRYPTO 2007.
- Криптоанализ псевдослучайного генератора на основе двойной эллиптической кривой, Берри Шенмейкерс и Андрей Сидоренко, IACR ePrint 2006/190.
- Эффективные псевдослучайные генераторы, основанные на предположении DDH, Реза Резаян Фарашахи, Берри Шенмейкерс и Андрей Сидоренко, IACR ePrint 2006/321.
- Анализ генератора случайных чисел Linux, Цви Гуттерман, Бенни Пинкас и Цахи Рейнман.
- Загрузка документации и программного обеспечения для набора статистических тестов NIST.