Сальса20 - Salsa20

Сальса20
Сальса раунд function.svg
Функция сальсы на четверть круга. Четыре параллельных копии образуют раунд.
Общий
ДизайнеровДэниел Дж. Бернштейн
Впервые опубликовано2007 г. (разработан на 2005 г.)[1]
ПреемникиЧаЧа
Относится кРумба20
СертификацияeSTREAM портфолио
Деталь шифра
Ключевые размеры128 или 256 бит
Размер штата512 бит
СтруктураARX
Раундов20
Скорость3.91 cpb на Intel Core 2 Duo[2]
Лучшая публика криптоанализ
Криптоанализ 2008 разбивает 8 раундов из 20, чтобы восстановить 256-битный секретный ключ за 2251 операций, используя 231 пары ключевых потоков.[3]

Сальса20 и тесно связанные ЧаЧа находятся потоковые шифры разработан Дэниел Дж. Бернштейн. Salsa20, оригинальный шифр, был разработан в 2005 году, а затем передан в eSTREAM пользователя Bernstein. ChaCha - это модификация Salsa20, опубликованная в 2008 году. Она использует новую функцию раунда, которая увеличивает распространение и повышает производительность на некоторых архитектурах.[4]

Оба шифра построены на псевдослучайная функция на основе добавить-повернуть-XOR (ARX) операции - 32-битное сложение, побитовое сложение (XOR) и вращение операции. Основная функция отображает 256-кусочек ключ, 64-битный nonce и 64-битный счетчик для 512-битного блока ключевого потока (также существует версия Salsa с 128-битным ключом). Это дает Salsa20 и ChaCha необычное преимущество, заключающееся в том, что пользователь может эффективно искать любую позицию в ключевом потоке за постоянное время. Salsa20 предлагает скорости около 4–14 циклов на байт в программном обеспечении на современных x86 процессоры,[5] и разумная производительность оборудования. Он не запатентован, и Бернштейн написал несколько всеобщее достояние реализации, оптимизированные для общих архитектур.[6]

Структура

Внутри шифр использует поразрядное сложение ⊕ (Эксклюзивный или ), 32-битное сложение мод 232 ⊞ и операции вращения с постоянным расстоянием (<<<) для внутреннего состояния шестнадцати 32-битных слов. Использование только операции add-rotate-xor избегает возможности время атаки в программных реализациях. Внутреннее состояние состоит из шестнадцати 32-битных слов, расположенных в виде матрицы 4 × 4.

0123
4567
891011
12131415

Начальное состояние состоит из   восемь ключевых слов,   два слова позиции потока,   два слова nonce (по существу, дополнительные биты позиции потока) и   четыре фиксированных слова:

Исходное состояние сальсы20
"экспа"КлючКлючКлюч
Ключ"nd 3"NonceNonce
Поз.Поз."2-к"Ключ
КлючКлючКлюч"тэ к"

Постоянные слова означают «расширить 32-байтовый k» в ASCII (т. Е. 4 слова - «expa», «nd 3», «2-by» и «te k»). Это пример номер "ничего в рукаве". Основная операция в Salsa20 - это четверть раунда. QR (а, б, в, г) который принимает ввод из четырех слов и производит вывод из четырех слов:

b ^ = (a + d) <<< 7; c ^ = (b + a) <<< 9; d ^ = (c + b) <<< 13; a ^ = (d + c) <<< 18;

Применяются раунды с нечетными номерами QR (а, б, в, г) к каждому из четырех столбцов в матрице 4 × 4, и раунды с четными номерами применяют его к каждой из четырех строк. Два последовательных раунда (столбец и ряд) вместе называются двойным раундом:

// Нечетный roundQR (0, 4, 8, 12) // столбец 1QR (5, 9, 13, 1) // столбец 2QR (10, 14, 2, 6) // столбец 3QR (15, 3, 7, 11) // столбец 4 // четный roundQR (0, 1, 2, 3) // строка 1QR (5, 6, 7, 4) // строка 2QR (10, 11, 8, 9) // строка 3QR ( 15, 12, 13, 14) // ряд 4

Ниже представлена ​​реализация на C / C ++.

#включают <stdint.h>#define ROTL (a, b) (((a) << (b)) | ((a) >> (32 - (b))))#define QR (a, b, c, d) (b ^ = ROTL (a + d, 7), c ^ = ROTL (b + a, 9), d ^ = ROTL (c + b, 13), а ^ = ROTL (d + c, 18))#define РАУНДОВ 20 пустота salsa20_block(uint32_t из[16], uint32_t const в[16]){	int я;	uint32_t Икс[16];	за (я = 0; я < 16; ++я)		Икс[я] = в[я];	// 10 петель × 2 круга / петля = 20 кругов	за (я = 0; я < РАУНДЫ; я += 2) {		// Нечетный раунд		QR(Икс[ 0], Икс[ 4], Икс[ 8], Икс[12]);	// столбец 1		QR(Икс[ 5], Икс[ 9], Икс[13], Икс[ 1]);	// столбец 2		QR(Икс[10], Икс[14], Икс[ 2], Икс[ 6]);	// столбец 3		QR(Икс[15], Икс[ 3], Икс[ 7], Икс[11]);	// столбец 4		// Четный круг		QR(Икс[ 0], Икс[ 1], Икс[ 2], Икс[ 3]);	// строка 1		QR(Икс[ 5], Икс[ 6], Икс[ 7], Икс[ 4]);	// строка 2		QR(Икс[10], Икс[11], Икс[ 8], Икс[ 9]);	// строка 3		QR(Икс[15], Икс[12], Икс[13], Икс[14]);	// строка 4	}	за (я = 0; я < 16; ++я)		из[я] = Икс[я] + в[я];}

В последней строке смешанный массив слово за словом добавляется к исходному массиву, чтобы получить его 64-байтовый блок потока ключей. Это важно, потому что раунды смешивания сами по себе обратимый. Другими словами, применение обратных операций даст исходную матрицу 4 × 4, включая ключ. Добавление смешанного массива к исходному делает невозможным восстановление ввода. (Этот же метод широко используется в хэш-функциях из MD4 через SHA-2.)

Salsa20 выполняет 20 циклов микширования на входе.[1] Тем не менее, были также представлены варианты с уменьшенным количеством раундов Salsa20 / 8 и Salsa20 / 12 с использованием 8 и 12 раундов соответственно. Эти варианты были введены для дополнения оригинального Salsa20, а не для его замены и повышения производительности.[примечание 1] в тестах eSTREAM, чем Salsa20, хотя и с соответственно меньшим запасом прочности.

XSalsa20 со 192-битным nonce

В 2008 году Бернштейн предложил вариант Salsa20 со 192-битными одноразовыми номерами под названием XSalsa20.[7][8] XSalsa20 доказуемо безопасен, если Salsa20 безопасен, но больше подходит для приложений, где требуются более длинные одноразовые номера. XSalsa20 подает ключ и первые 128 бит одноразового номера в один блок Salsa20 (без окончательного добавления, которое может быть опущено или вычтено после стандартного блока Salsa20) и использует 256 битов вывода в качестве ключа для стандартного Salsa20 с использованием последних 64 бита одноразового номера и позиции потока. В частности, используемые 256 битов вывода соответствуют несекретным частям ввода: индексам 0, 5, 10, 15, 6, 7, 8 и 9.

eSTREAM выбор Salsa20

Salsa20 была выбрана в качестве дизайна фазы 3 для профиля 1 (программное обеспечение) eSTREAM проект, получивший наивысший взвешенный балл голосования по любому алгоритму профиля 1 в конце фазы 2.[9] Salsa20 ранее была выбрана в качестве дизайна Фазы 2 для профиля 1 (программное обеспечение) и в качестве дизайна Фазы 2 для профиля 2 (аппаратное обеспечение) проектом eSTREAM,[10] но не был переведен на этап 3 для профиля 2, потому что eSTREAM считал, что он, вероятно, не подходит для аппаратных сред с крайне ограниченными ресурсами.[11]

Криптоанализ Salsa20

По состоянию на 2015 год, нет опубликованных атак на Salsa20 / 12 или полную Salsa20 / 20; лучшая известная атака[3] разбивает 8 из 12 или 20 раундов.

В 2005 году Пол Кроули сообщил об атаке на Salsa20 / 5 с расчетной временной сложностью 2165, и выиграл приз Бернштейна в 1000 долларов за «самый интересный криптоанализ Salsa20».[12] Эта атака и все последующие атаки основаны на усеченный дифференциальный криптоанализ. В 2006 году Фишер, Мейер, Бербейн, Биасс и Робшоу сообщили об атаке на Salsa20 / 6 с расчетной временной сложностью 2177, и атака связанных ключей на Salsa20 / 7 с расчетной временной сложностью 2217.[13]

В 2007 году Цуну и другие. объявила о криптоанализе Salsa20, который разбивает 8 раундов из 20 для восстановления 256-битного секретного ключа за 2255 операций, используя 211.37 пары ключевых потоков.[14] Однако эта атака не кажется конкурентоспособной с атакой грубой силы.

В 2008 году Аумассон, Фишер, Хазаеи, Мейер и Рехбергер сообщили о криптоаналитической атаке на Salsa20 / 7 с временной сложностью 2153, и они сообщили о первой атаке на Salsa20 / 8 с расчетной временной сложностью 2251. Эта атака использует новую концепцию вероятностных нейтральных ключевых битов для вероятностного обнаружения усеченного дифференциала. Атака может быть адаптирована для взлома Salsa20 / 7 со 128-битным ключом.[3]

В 2012 году атака Aumasson et al. был улучшен Shi et al. против Salsa20 / 7 (128-битный ключ) с временной сложностью 2109 и Salsa20 / 8 (256-битный ключ) на 2250.[15]

В 2013 году Муха и Пренил опубликовали доказательство[16] что 15 раундов Salsa20 были 128-битными, защищенными от дифференциального криптоанализа. (В частности, он не имеет дифференциальной характеристики с большей вероятностью, чем 2−130, поэтому дифференциальный криптоанализ будет сложнее, чем исчерпание 128-битного ключа.)

Вариант чаЧа

ЧаЧа
ChaCha Cipher Quarter Round Function.svg
Функция ЧаЧа на четверть круга. Четыре параллельных копии образуют раунд.
Общий
ДизайнеровДэниел Дж. Бернштейн
Впервые опубликовано2008
Происходит отСальса20
Относится кРумба20
Деталь шифра
Ключевые размеры128 или 256 бит
Размер штата512 бит
СтруктураARX
Раундов20
Скорость3.95 cpb на Intel Core 2 Duo[4]:2

В 2008 году Бернштейн опубликовал тесно связанный ЧаЧа семейство шифров, которые стремятся увеличить распространение за раунд при достижении той же или немного лучшей производительности.[17] The Aumasson et al. paper также атакует ChaCha, достигая на один раунд меньше: для 256-битного ChaCha6 со сложностью 2139 и ChaCha7 со сложностью 2248. 128 бит ChaCha6 в пределах 2107, но утверждает, что атака не может сломать 128-битный ChaCha7.[3]

Как и Salsa20, начальное состояние ChaCha включает в себя 128-битную константу, 256-битный ключ, 64-битный счетчик и 64-битный одноразовый номер, организованный как матрица 4 × 4 из 32-битных слов. Но ChaCha переставляет некоторые слова в исходное состояние:

Исходное состояние ЧаЧа
"экспа""nd 3""2-к""тэ к"
КлючКлючКлючКлюч
КлючКлючКлючКлюч
Поз.Поз.NonceNonce

Константа такая же, как у Salsa20 («расширить 32-байтовый k»). ЧаЧа заменяет Сальсу20 четверть-раундом QR (а, б, в, г) с

а + = Ь; d ^ = a; d <<< = 16; c + = d; б ^ = с; b <<< = 12; a + = b; d ^ = a; d <<< = 8; c + = d; Ь ^ = с; b <<< = 7;

Обратите внимание, что в этой версии каждое слово обновляется дважды, в то время как четверть круга Salsa20 обновляет каждое слово только один раз. Кроме того, четверть-раундовый ChaCha распространяет изменения быстрее. В среднем, после изменения 1 входного бита четверть-раундовый Salsa20 изменит 8 выходных битов, а ChaCha изменит 12,5 выходных битов.[4]

Четверть-раунд ChaCha имеет такое же количество добавлений, xors и поворотов битов, что и четверть-раунд Salsa20, но тот факт, что два поворота кратны 8, позволяет провести небольшую оптимизацию на некоторых архитектурах, включая x86.[18] Кроме того, форматирование ввода было изменено для поддержки эффективного SSE Оптимизация реализации обнаружена для Salsa20. Вместо чередования округлений вниз по столбцам и по строкам, они выполняются по столбцам и по диагоналям.[4]:4 Как и Salsa20, ChaCha упорядочивает шестнадцать 32-битных слов в матрицу 4 × 4. Если проиндексировать элементы матрицы от 0 до 15

0123
4567
891011
12131415

Тогда двойной раунд в ЧаЧа:

// Нечетный roundQR (0, 4, 8, 12) // 1-й столбец QR (1, 5, 9, 13) // 2-й столбец QR (2, 6, 10, 14) // 3-й столбец QR (3, 7, 11, 15) // 4-й столбец // Четный roundQR (0, 5, 10, 15) // диагональ 1 (главная диагональ) QR (1, 6, 11, 12) // диагональ 2QR (2, 7, 8, 13) // диагональ 3QR (3, 4, 9, 14) // диагональ 4

ChaCha20 использует 10 повторений двойного раунда.[19] Ниже представлена ​​реализация на C / C ++.

#define ROTL (a, b) (((a) << (b)) | ((a) >> (32 - (b))))#define QR (a, b, c, d) (a + = b, d ^ = a, d = ROTL (d, 16), c + = d, b ^ = c, b = ROTL (b, 12), a + = b, d ^ = a, d = ROTL (d, 8), c + = d, b ^ = c, b = ROTL (b, 7))#define РАУНДОВ 20 пустота chacha_block(uint32_t из[16], uint32_t const в[16]){	int я;	uint32_t Икс[16];	за (я = 0; я < 16; ++я)			Икс[я] = в[я];	// 10 петель × 2 круга / петля = 20 кругов	за (я = 0; я < РАУНДЫ; я += 2) {		// Нечетный раунд		QR(Икс[0], Икс[4], Икс[ 8], Икс[12]); // столбец 0		QR(Икс[1], Икс[5], Икс[ 9], Икс[13]); // столбец 1		QR(Икс[2], Икс[6], Икс[10], Икс[14]); // столбец 2		QR(Икс[3], Икс[7], Икс[11], Икс[15]); // столбец 3		// Четный круг		QR(Икс[0], Икс[5], Икс[10], Икс[15]); // диагональ 1 (главная диагональ)		QR(Икс[1], Икс[6], Икс[11], Икс[12]); // диагональ 2		QR(Икс[2], Икс[7], Икс[ 8], Икс[13]); // диагональ 3		QR(Икс[3], Икс[4], Икс[ 9], Икс[14]); // диагональ 4	}	за (я = 0; я < 16; ++я)		из[я] = Икс[я] + в[я];}

ЧаЧа - основа BLAKE хэш-функция, финалист Конкурс хеш-функций NIST, а преемники BLAKE2 / 3 настроены на еще более высокую скорость. Он также определяет вариант с использованием шестнадцати 64-битных слов (1024 бита состояния) с соответствующим образом настроенными константами вращения.

XChaCha

Хотя Бернштейн не объявил, что доказательство безопасности XSalsa20 напрямую распространяется на аналогичный XChaCha шифр. Используйте ключ и первые 128 бит одноразового номера (во входных словах с 12 по 15), чтобы сформировать входной блок ChaCha, затем выполните операцию блока (пропуская последнее добавление). Выходные слова 0–3 и 12–15 (те слова, которые соответствуют неключевым словам ввода) затем образуют ключ, используемый для обычного ChaCha (с последними 64 битами одноразового номера и 64 битами счетчика блоков).[20]

Принятие ChaCha20

Google выбрал ChaCha20 вместе с Bernstein's Поли1305 код аутентификации сообщения в качестве замены RC4 в TLS, который используется для обеспечения безопасности в Интернете.[21] Внедрение Google обеспечивает HTTPS (TLS / SSL ) трафик между Хром браузер на Android телефоны и веб-сайты Google.[22]

Вскоре после принятия Google для TLS алгоритмы ChaCha20 и Poly1305 также использовались для нового [email protected] зашифровать OpenSSH.[23][24] Впоследствии это позволило OpenSSH избежать любой зависимости от OpenSSL через параметр времени компиляции.[25]

ChaCha20 также используется для arc4random генератор случайных чисел в FreeBSD[26], OpenBSD[27], и NetBSD[28] операционные системы вместо сломанных RC4, И в DragonFly BSD[29] для CSPRNG подпрограмма ядра.[30][31] Начиная с версии 4.8, ядро ​​Linux использует алгоритм ChaCha20 для генерации данных для неблокирующего / dev / urandom устройство.[32][33][34]

Ссылка на реализацию ChaCha20 опубликована в RFC  7539. В IETF реализация модифицировала опубликованный алгоритм Бернштейна, изменив 64-разрядный одноразовый номер и 64-разрядный счетчик блоков на 96-разрядный одноразовый идентификатор и 32-разрядный счетчик блоков,[35] Имя не было изменено, когда алгоритм был изменен, так как он криптографически незначим (оба образуют то, что криптограф распознал бы как 128-битный одноразовый номер), но изменение интерфейса могло стать источником путаницы для разработчиков. Из-за уменьшенного счетчика блоков максимальная длина сообщения, которое может быть безопасно зашифровано вариантом IETF, составляет 232 блоки по 64 байта (256ГиБ ). Для приложений, где этого недостаточно, например для шифрования файлов или дисков, RFC  7539 предлагает использовать оригинальный алгоритм с 64-битным nonce.

Использование ChaCha20 в АЙК и IPsec были предложены для стандартизации в RFC  7634. Предлагаемая стандартизация его использования в TLS опубликована как RFC  7905.

ChaCha20 обычно предлагает лучшую производительность, чем более распространенные Расширенный стандарт шифрования (AES) в системах, в которых ЦП не поддерживает ускорение AES (например, Набор инструкций AES для процессоров x86) или там, где программное обеспечение не поддерживает его. В результате ChaCha20 иногда предпочтительнее AES в определенных случаях использования, связанных с мобильные устройства, которые в основном используют РУКА на базе процессоров.[36][37]

В 2018 г. RFC 7539 устарел RFC  8439.[38]

ChaCha20 - это алгоритм, используемый исключительно WireGuard Система VPN, начиная с версии протокола 1.[39]

Смотрите также

  • Speck - шифр add-rotate-xor, разработанный NSA

Примечания

  1. ^ Поскольку большая часть работы состоит из выполнения повторных раундов, количество раундов обратно пропорционально производительности. То есть уменьшение количества раундов примерно вдвое увеличивает производительность. Таким образом, варианты с уменьшенным радиусом действия значительно быстрее.

Рекомендации

  1. ^ а б Дэниел Дж. Бернштейн (24 декабря 2007 г.). "Семейство поточных шифров Salsa20" (PDF). Цитировать журнал требует | журнал = (помощь)
  2. ^ Дэниел Дж. Бернштейн (16 мая 2013 г.). «Salsa 20 speed; программное обеспечение Salsa20».
  3. ^ а б c d Жан-Филипп Аумассон, Саймон Фишер, Шахрам Хазаи, Вилли Мейер и Кристиан Рехбергер (14 марта 2008 г.). «Новые возможности латинских танцев» (PDF). Цитировать журнал требует | журнал = (помощь)CS1 maint: использует параметр авторов (связь)
  4. ^ а б c d Бернштейн, Даниэль (28 января 2008 г.), ChaCha, вариант Salsa20 (PDF), получено 2018-06-03
  5. ^ Дэниел Дж. Бернштейн (16 мая 2013 г.). «Snuffle 2005: функция шифрования Salsa20».
  6. ^ "Salsa20: Скорость программного обеспечения". 2007-05-11.
  7. ^ Дэниел Дж. Бернштейн. "Расширение одноразового использования Salsa20" (PDF). Получено 2017-08-22.
  8. ^ "Salsa20 / 12 ECRYPT II Страница". Получено 2017-08-22.
  9. ^ "Проект eSTREAM: конец фазы 2". eSTREAM. 2008-04-29.
  10. ^ Хунцзюнь Ву (30 марта 2007 г.). "eSTREAM PHASE 3: End of Phase 1". eSTREAM.
  11. ^ «eSTREAM: Краткий отчет об окончании второй фазы» (PDF). eSTREAM. 2007-03-26.
  12. ^ Пол Кроули (09.02.2006). «Усеченный дифференциальный криптоанализ пяти раундов Salsa20».
  13. ^ Саймон Фишер, Вилли Мейер, Ком Бербен, Жан-Франсуа Биасс, М. Дж. Б. Робшоу (2006). «Неслучайность в кандидатах eSTREAM Salsa20 и TSC-4». Прогресс в криптологии - INDOCRYPT 2006. Индокрипт 2006 г.. Конспект лекций по информатике. 4329. С. 2–16. CiteSeerX  10.1.1.121.7248. Дои:10.1007/11941378_2. ISBN  978-3-540-49767-7.CS1 maint: использует параметр авторов (связь)
  14. ^ Юкиясу Цуно, Теруо Сайто, Хироясу Кубо, Томоясу Сузаки и Хироки Накашима (2007-01-02). «Дифференциальный криптоанализ Salsa20 / 8» (PDF). Цитировать журнал требует | журнал = (помощь)CS1 maint: использует параметр авторов (связь)
  15. ^ Чжэньцин Ши, Бинь Чжан, Дэнго Фэн, Вэньлин Ву (2012). «Улучшенные атаки восстановления ключа на Salsa20 и ChaCha с уменьшенным количеством раундов». Информационная безопасность и криптология - ICISC 2012. ICISC'12 Труды 15-й Международной конференции по информационной безопасности и криптологии. Конспект лекций по информатике. 7839. С. 337–351. Дои:10.1007/978-3-642-37682-5_24. ISBN  978-3-642-37681-8.CS1 maint: использует параметр авторов (связь)
  16. ^ Ники Муха; Барт Пренил (2013). «На пути к поиску оптимальных дифференциальных характеристик для ARX: приложение к Salsa20» (PDF). Цитировать журнал требует | журнал = (помощь)
  17. ^ Дэниел Дж. Бернштейн (25 апреля 2008 г.). "Семейство потоковых шифров ChaCha".
  18. ^ Невес, Сэмюэл (2009-10-07), Более быстрая реализация ChaCha для процессоров Intel, получено 2016-09-07, две из этих констант кратны 8; это позволяет выполнять ротацию 1 инструкции в процессорах Core2 и более поздних версиях Intel с использованием пшуфб инструкция
  19. ^ Я. Нир (Check Point), А. Лэнгли (Google Inc.) (май 2015 г.). «ChaCha20 и Poly1305 для протоколов IETF: RFC 7539».CS1 maint: использует параметр авторов (связь)
  20. ^ Арцишевский, Скотт. «XChaCha: eXtended-nonce ChaCha и AEAD_XChaCha20_Poly1305». tools.ietf.org.
  21. ^ А. Лэнгли, В. Чанг, Н. Мавроджаннопулос, Дж. Стромбергсон, С. Йозефссон (2015-12-16). «ChaCha20-Poly1305 Cipher Suites для безопасности транспортного уровня (TLS)». Интернет-проект.CS1 maint: использует параметр авторов (связь)
  22. ^ "Google заменяет криптографические шифры в OpenSSL". InfoSecurity. 2014-04-25. Архивировано из оригинал на 2018-11-07.
  23. ^ Миллер, Дэмиен (2016-05-03). "ssh / PROTOCOL.chacha20poly1305". Перекрестная ссылка BSD суперпользователя: PROTOCOL.chacha20poly1305. Получено 2016-09-07.
  24. ^ Муренин, Константин А. (11.12.2013). Неизвестный Ламер (ред.). "OpenSSH имеет новый шифр - Chacha20-poly1305 - от Д.Дж. Бернштейна". Slashdot. Получено 2016-09-07.
  25. ^ Муренин, Константин А. (30.04.2014). Soulskill (ред.). «OpenSSH больше не должен зависеть от OpenSSL». Slashdot. Получено 2016-09-07.
  26. ^ «Редакция 317015». 2017-04-16. Получено 2018-03-16. Замените алгоритм RC4 для генерации безопасных случайных чисел внутри ядра на Chacha20
  27. ^ Гюнтер (Филип Гюнтер), изд. (2015-09-13). "libc / crypt / arc4random.c". Перекрестная ссылка BSD суперпользователя: arc4random.c. Получено 2016-09-07. Генератор случайных чисел на основе ChaCha для OpenBSD.
  28. ^ риастрад (Тейлор Кэмпбелл), изд. (2016-03-25). "libc / gen / arc4random.c". Перекрестная ссылка BSD суперпользователя: arc4random.c. Получено 2016-09-07. Устаревший API arc4random (3) из OpenBSD, переопределенный с использованием ChaCha20 PRF, с состоянием для каждого потока.
  29. ^ "kern / subr_csprng.c". Перекрестная ссылка BSD суперпользователя: subr_csprng.c. 2015-11-04. Получено 2016-09-07. chacha_encrypt_bytes
  30. ^ «Использование и развертывание ChaCha». 2016-09-07. Получено 2016-09-07.
  31. ^ "arc4random (3)". Страницы руководства NetBSD. 2014-11-16. Получено 2016-09-07.
  32. ^ Корбет, Джонатан. "Замена / dev / urandom". Еженедельные новости Linux. Получено 2016-09-20.
  33. ^ «Слить тег 'random_for_linus' из git.kernel.org/pub/scm/linux/kernel/git/tytso/random». Дерево исходных текстов ядра Linux. Получено 2016-09-20. random: заменить неблокирующий пул CRNG на основе Chacha20
  34. ^ Майкл Ларабель (2016-07-25). "/ dev / random: улучшения для Linux 4.8". Фороникс. Получено 2016-10-03.
  35. ^ «ChaCha20 и Poly1305 для протоколов IETF» (PDF). Получено 2017-08-07. Отличия от обычного ChaCha. Разделение порядкового номера nonce: block изменено с 64:64 на 96:32.
  36. ^ "В чем привлекательность использования ChaCha20 вместо AES?". Криптография Обмен стеком. 2016-04-12.
  37. ^ "Исследование производительности SSL AES-NI @ Calomel.org".
  38. ^ Заголовок RFC 7539.
  39. ^ «Протокол и криптография». WireGuard. Джейсон А. Доненфельд. Получено 4 июля 2018.

внешняя ссылка