Сальса20

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

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

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

Структура

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

0123
4567
891011
12131415

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

Начальное состояние Salsa20
"экспа"КлючКлючКлюч
Ключ"й 3"СлучайноСлучайно
Поз.Поз."2-by"Ключ
КлючКлючКлюч"тэк"

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

б ^= (а + г) <<< 7;с ^= (б + а) <<< 9;г ^= (с + б) <<< 13;а ^= (d + c) <<< 18;

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

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

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

#include <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), \ a ^= ROTL(d + c,18)) #define ROUNDS 20 void salsa20_block ( uint32_t out [ 16 ], uint32_t const in [ 16 ]) { int i ; uint32_t x [ 16 ];       for ( i = 0 ; i < 16 ; ++ i ) x [ i ] = in [ i ]; // 10 циклов × 2 цикла/цикл = 20 циклов for ( i = 0 ; i < ROUNDS ; i += 2 ) { // Нечетный цикл QR ( x [ 0 ], x [ 4 ], x [ 8 ], x [ 12 ]); // столбец 1 QR ( x [ 5 ], x [ 9 ], x [ 13 ], x [ 1 ]); // столбец 2 QR ( x [ 10 ], x [ 14 ], x [ 2 ], x [ 6 ]); // столбец 3 QR ( x [ 15 ], x [ 3 ], x [ 7 ], x [ 11 ]); // столбец 4 // Четный раунд QR ( x [ 0 ], x [ 1 ], x [ 2 ], x [ 3 ]); // строка 1 QR ( x [ 5 ], x [ 6 ], x [ 7 ], x [ 4 ]); // строка 2 QR ( x [ 10 ], x [ 11 ], x [ 8 ], x [ 9 ]); // строка 3 QR ( x [ 15 ], x [ 12 ], x [ 13 ], x [ 14 ]); // строка 4 } for ( i = 0 ;                                                                           я < 16 ; ++ я ) вых [ я ] = х [ я ] + вх [ я ]; }       

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

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

XSalsa20 с 192-битным одноразовым кодом

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

eSTREAM выбор Salsa20

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

Комитет eSTREAM рекомендует использовать Salsa20/12, 12-раундовый вариант, «сочетающий очень хорошую производительность с комфортным запасом безопасности». [13]

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

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

В 2005 году Пол Кроули сообщил об атаке на Salsa20/5 с оценочной временной сложностью 2 165 и выиграл премию Бернстайна в размере 1000 долларов США за «самый интересный криптоанализ Salsa20». [14] Эта атака и все последующие атаки основаны на усеченном дифференциальном криптоанализе . В 2006 году Фишер, Мейер, Бербейн, Биасс и Робшоу сообщили об атаке на Salsa20/6 с оценочной временной сложностью 2 177 и атаке с использованием связанного ключа на Salsa20/7 с оценочной временной сложностью 2 217. [15 ]

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

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

В 2012 году атака Аумассона и др. была улучшена Ши и др. против Salsa20/7 (128-битный ключ) до временной сложности 2 109 и Salsa20/8 (256-битный ключ) до 2 250. [17 ]

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

Вариант ЧаЧа

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

В 2008 году Бернстайн опубликовал близкородственное семейство шифров ChaCha , целью которого является увеличение диффузии за раунд при достижении той же или немного лучшей производительности. [19] Статья Аумассона и др. также атакует ChaCha, добиваясь на один раунд меньше (для 256-битного ChaCha6 со сложностью 2 139 , ChaCha7 со сложностью 2 248 и 128-битного ChaCha6 в пределах 2 107 ), но утверждает, что атака не может взломать 128-битный ChaCha7. [3]

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

Начальное состояние ЧаЧа
"экспа""й 3""2-by""тэк"
КлючКлючКлючКлюч
КлючКлючКлючКлюч
ПрилавокПрилавокСлучайноСлучайно

Константа та же, что и у Salsa20 («расширить 32-байтовый k»). ChaCha заменяет четверть круга Salsa20 QR(a, b, c, d)на:

а += б; д ^= а; д <<<= 16;с += д; б ^= с; б <<<= 12;а += б; д ^= а; д <<<= 8;с += д; б ^= с; б <<<= 7;

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

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

0123
4567
891011
12131415

тогда двойной раунд в ChaCha это:

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

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

#include <stdint.h> #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 ROUNDS 20 void chacha_block ( uint32_t out [ 16 ], uint32_t const in [ 16 ]) { int i ; uint32_t x [ 16 ];       for ( i = 0 ; i < 16 ; ++ i ) x [ i ] = in [ i ]; // 10 циклов × 2 цикла/цикл = 20 циклов for ( i = 0 ; i < ROUNDS ; i += 2 ) { // Нечетный цикл QR ( x [ 0 ], x [ 4 ], x [ 8 ], x [ 12 ]); // столбец 1 QR ( x [ 1 ], x [ 5 ], x [ 9 ], x [ 13 ]); // столбец 2 QR ( x [ 2 ], x [ 6 ], x [ 10 ], x [ 14 ]); // столбец 3 QR ( x [ 3 ], x [ 7 ], x [ 11 ], x [ 15 ]); // столбец 4 // Четный раунд QR ( x [ 0 ], x [ 5 ], x [ 10 ], x [ 15 ]); // диагональ 1 (главная диагональ) QR ( x [ 1 ], x [ 6 ], x [ 11 ], x [ 12 ]); // диагональ 2 QR ( x [ 2 ], x [ 7 ], x [ 8 ], x [ 13 ]); // диагональ 3 QR ( x [ 3 ], x [ 4 ], x [ 9 ], x [ 14 ]); // диагональ 4 } for ( i =                                                          0 ; я < 16 ; ++ я ) вых [ я ] = х [ я ] + вх [ я ]; }        

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

XChaCha

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

Ча-Ча с уменьшенным раундом

В 2020 году Аумассон утверждал, что 8 раундов ChaCha (ChaCha8), вероятно, обеспечивают достаточную устойчивость к будущему криптоанализу для того же уровня безопасности , что дает ускорение в 2,5 раза. [23] Компромиссный ChaCha12 (основанный на рекомендации eSTREAM 12-раундового Salsa) [24] также находит некоторое применение. [25] Набор для бенчмаркинга eSTREAM включает ChaCha8 и ChaCha12. [19]

принятие ChaCha20

Google выбрал ChaCha20 вместе с кодом аутентификации сообщений Poly1305 Бернстайна в SPDY , который был задуман как замена TLS через TCP . [26] В процессе они предложили новую конструкцию аутентифицированного шифрования , объединяющую оба алгоритма, которая называется ChaCha20-Poly1305 . ChaCha20 и Poly1305 теперь используются в протоколе QUIC , который заменяет SPDY и используется HTTP/3 . [27] [28]

Вскоре после принятия Google TLS, алгоритмы ChaCha20 и Poly1305 также использовались для нового chacha20-poly1305@openssh.comшифра в OpenSSH . [29] [30] Впоследствии это позволило OpenSSH избежать любой зависимости от OpenSSL с помощью опции времени компиляции. [31]

ChaCha20 также используется для arc4randomгенератора случайных чисел в операционных системах FreeBSD [32] , OpenBSD [33] и NetBSD [ 34] вместо сломанного RC4 , а также в DragonFly BSD [35] для подпрограммы CSPRNG ядра. [36] [37] Начиная с версии 4.8, ядро ​​Linux использует алгоритм ChaCha20 для генерации данных для неблокируемого устройства /dev/urandom . [38] [39] [40] ChaCha8 используется для PRNG по умолчанию в Golang . [41] CSPRNG Rust использует ChaCha12. [24]

ChaCha20 обычно обеспечивает лучшую производительность, чем более распространенный алгоритм Advanced Encryption Standard (AES) в системах, где ЦП не поддерживает ускорение AES (например, набор инструкций AES для процессоров x86). В результате ChaCha20 иногда предпочтительнее AES в определенных случаях использования, связанных с мобильными устройствами , которые в основном используют процессоры на базе ARM . [42] [43] Специализированные аппаратные ускорители для ChaCha20 также менее сложны по сравнению с ускорителями AES. [44]

ChaCha20-Poly1305 (версия IETF; см. ниже) — эксклюзивный алгоритм, используемый системой WireGuard VPN, начиная с версии протокола 1. [45]

стандарты Интернета

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

Начальное состояние ChaCha20 (RFC 7539) [46]
"экспа""й 3""2-by""тэк"
КлючКлючКлючКлюч
КлючКлючКлючКлюч
ПрилавокСлучайноСлучайноСлучайно

Использование ChaCha20 в IKE и IPsec стандартизировано в RFC  7634. ​​Стандартизация его использования в TLS опубликована в RFC  7905.

В 2018 году RFC 7539 был заменен RFC  8439. RFC 8439 объединяет некоторые исправления и добавляет дополнительные соображения по безопасности. [47]

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

  • Speck — шифр сложения-поворота-исключающего-или, разработанный АНБ
  • ChaCha20-Poly1305 – схема AEAD, объединяющая ChaCha20 с Poly1305 MAC

Примечания

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

Ссылки

  1. ^ ab Daniel J. Bernstein (2007-12-24). "Семейство потоковых шифров Salsa20" (PDF) . cr.yp.to .
  2. ^ Дэниел Дж. Бернстайн (16.05.2013). «Скорость Salsa 20; программное обеспечение Salsa20».
  3. ^ abcd Жан-Филипп Омассон; Саймон Фишер; Шахрам Хазаи; Вилли Майер; Кристиан Рехбергер (2008-03-14). "Новые черты латинских танцев" (PDF) . Международная ассоциация криптологических исследований .
  4. ^ abcd Бернстайн, Дэниел (28 января 2008 г.), ChaCha, вариант Salsa20 (PDF) , получено 03.06.2018
  5. ^ Дэниел Дж. Бернстайн (16.05.2013). «Snuffle 2005: функция шифрования Salsa20».
  6. ^ "Salsa20: Скорость программного обеспечения". 2007-05-11.
  7. ^ Дэниел Дж. Бернстайн. «Расширение одноразового номера Salsa20 (обновлено в 2011 г.)» (PDF) . cr.yp.to . Получено 18.08.2022 .
  8. ^ Дэниел Дж. Бернстайн. «Расширение одноразового номера Salsa20 (исходная версия)» (PDF) . cr.yp.to . Получено 18.08.2022 .
  9. ^ "Salsa20/12". ECRYPT II . Получено 22-08-2017 .
  10. ^ "Проект eSTREAM: Конец фазы 2". eSTREAM . 2008-04-29.
  11. ^ Хонгджун Ву (30.03.2007). "eSTREAM ФАЗА 3: Конец Фазы 1". eSTREAM.
  12. ^ "eSTREAM: Краткий отчет о завершении второй фазы" (PDF) . eSTREAM. 2007-03-26.
  13. ^ «Salsa20/12, Страница портфолио eSTREAM» . www.ecrypt.eu.org .
  14. ^ Пол Кроули (2006-02-09). «Усеченный дифференциальный криптоанализ пяти раундов Salsa20».
  15. ^ Simon Fischer; Willi Meier; Côme Berbain; Jean-François Biasse; MJB Robshaw (2006). "Non-randomness in eSTREAM Candidates Salsa20 and TSC-4". Прогресс в криптологии - INDOCRYPT 2006: 7-я Международная конференция по криптологии в Индии, Калькутта, Индия, 11-13 декабря 2006 г., Труды . Заметки лекций по информатике. Том 4329. стр. 2–16. CiteSeerX 10.1.1.121.7248 . doi :10.1007/11941378_2. ISBN  978-3-540-49767-7.
  16. ^ Юкиясу Цуноо; Теруо Сайто; Хироясу Кубо; Томоясу Сузаки; Хироки Накашима (2 января 2007 г.). «Дифференциальный криптоанализ Salsa20/8» (PDF) . ЭКРИПТ .
  17. ^ Zhenqing Shi; Bin Zhang; Dengguo Feng; Wenling Wu (2012). «Улучшенные атаки восстановления ключей на сокращенный раунд Salsa20 и ChaCha». Информационная безопасность и криптология – ICISC 2012. Конспект лекций по информатике. Том 7839. С. 337–351. doi :10.1007/978-3-642-37682-5_24. ISBN 978-3-642-37681-8.
  18. ^ Ники Муха; Барт Пренил (2013). "На пути к поиску оптимальных дифференциальных характеристик для ARX: применение к Salsa20" (PDF) . Международная ассоциация криптологических исследований .
  19. ^ abc Дэниел Дж. Бернстайн (2008-04-25). «Семейство потоковых шифров ChaCha».
  20. ^ Neves, Samuel (2009-10-07), Более быстрые реализации ChaCha для процессоров Intel, архивировано из оригинала 2017-03-28 , извлечено 2016-09-07 , две из этих констант кратны 8; это позволяет выполнять ротацию инструкций на 1 в процессорах Core2 и более поздних процессорах Intel с помощью инструкции pshufb
  21. ^ Y. Nir; A. Langley (май 2015 г.). «ChaCha20 и Poly1305 для протоколов IETF: RFC 7539».
  22. ^ Арцишевски, Скотт (10 января 2020 г.). "XChaCha: eXtended-nonce ChaCha и AEAD_XChaCha20_Poly1305 (просроченный интернет-черновик)". Ietf Datatracker .
  23. ^ Омассон, Жан-Филипп (2020). Слишком много криптографии (PDF) . Симпозиум Real World Crypto.
  24. ^ ab "rand_chacha: рассмотрите ChaCha12 (или, возможно, ChaCha8) вместо ChaCha20 · Проблема № 932 · rust-random/rand". GitHub .
  25. ^ "ChaCha". Учебник криптографии .
  26. ^ "Do the ChaCha: лучшая производительность мобильных устройств с помощью криптографии". Блог Cloudflare . 2015-02-23 . Получено 2021-07-13 .
  27. ^ Томсон, Мартин; Тернер, Шон (май 2021 г.). "RFC 9001". datatracker.ietf.org . Получено 13 июля 2021 г. .
  28. ^ Бишоп, Майк (2 февраля 2021 г.). "черновик: IETF QUIC HTTP". datatracker.ietf.org . Получено 13 июля 2021 г. .
  29. ^ Миллер, Дэмиен (2016-05-03). "ssh/PROTOCOL.chacha20poly1305". Перекрестная ссылка BSD суперпользователя: PROTOCOL.chacha20poly1305 . Получено 2016-09-07 .
  30. ^ Муренин, Константин А. (11.12.2013). Неизвестный ламер (ред.). «OpenSSH имеет новый шифр — Chacha20-poly1305 — от DJ Bernstein». Slashdot . Получено 07.09.2016 .
  31. ^ Муренин, Константин А. (2014-04-30). Soulskill (ред.). "OpenSSH больше не зависит от OpenSSL". Slashdot . Получено 2016-09-07 .
  32. ^ "Ревизия 317015". 2017-04-16 . Получено 2018-03-16 . Заменить алгоритм RC4 для генерации безопасных случайных чисел в ядре на Chacha20
  33. ^ guenther (Philip Guenther), ред. (2015-09-13). "libc/crypt/arc4random.c". BSD Cross Reference суперпользователя: arc4random.c . Получено 2016-09-07 . Генератор случайных чисел на основе ChaCha для OpenBSD.
  34. ^ riastradh (Taylor Campbell), ред. (2016-03-25). "libc/gen/arc4random.c". BSD Cross Reference суперпользователя: arc4random.c . Получено 2016-09-07 . Устаревший API arc4random(3) из OpenBSD, переписанный с использованием ChaCha20 PRF, с состоянием каждого потока.
  35. ^ "kern/subr_csprng.c". Перекрестная ссылка BSD суперпользователя: subr_csprng.c . 2015-11-04 . Получено 2016-09-07 .chacha_encrypt_bytes
  36. ^ "Использование и развертывание ChaCha". 2016-09-07 . Получено 2016-09-07 .
  37. ^ "arc4random(3)". Страницы руководства NetBSD . 2014-11-16. Архивировано из оригинала 2020-07-06 . Получено 2016-09-07 .
  38. ^ Корбет, Джонатан. "Замена /dev/urandom". Linux Weekly News . Получено 20-09-2016 .
  39. ^ "Merge tag 'random_for_linus' of git.kernel.org/pub/scm/linux/kernel/git/tytso/random". Исходное дерево ядра Linux . Получено 20.09.2016 . random: заменить неблокирующий пул на CRNG на основе Chacha20
  40. ^ Майкл Ларабель (25.07.2016). "/dev/random Seeing Improvements For Linux 4.8". Phoronix . Получено 03.10.2016 .
  41. ^ Кокс, Расс; Вальсорда, Филиппо. «Безопасная случайность в Go 1.22 — язык программирования Go». go.dev .
  42. ^ «В чем привлекательность использования ChaCha20 вместо AES?». Cryptography Stack Exchange . 2016-04-12.
  43. ^ «Исследование производительности SSL AES-NI на Calomel.org».
  44. ^ Пфау, Йоханнес; Рейтер, Максимилиан; Харбаум, Таня; Хофманн, Клаус; Беккер, Юрген (сентябрь 2019 г.). «Аппаратный взгляд на шифры ChaCha: масштабируемые реализации Chacha8/12/20 в диапазоне от 476 фрагментов до битрейтов 175 Гбит/с». 32-я Международная конференция IEEE по системам на кристалле (SOCC) 2019 г. стр. 294–299. doi :10.1109/SOCC46988.2019.1570548289. ISBN 978-1-7281-3483-3.
  45. ^ "Протокол и криптография". WireGuard . Джейсон А. Доненфельд . Получено 4 июля 2018 г. .
  46. ^ ab "ChaCha20 и Poly1305 для протоколов IETF" (PDF) . Получено 2017-08-07 . Отличия от обычного ChaCha. Разделение порядкового номера блока nonce было изменено с 64:64 на 96:32 [...] Состояние ChaCha20 инициализируется следующим образом:
  47. ^ Заголовок RFC 7539.
  • Snuffle 2005: функция шифрования Salsa20
  • Спецификация Salsa20 ( PDF )
  • Сальса20/8 и Сальса20/12 (PDF)
  • Проект eSTREAM: Salsa20
  • Семейство потоковых шифров ChaCha
  • Использование и развертывание Salsa20
  • Реализация и дидактическая визуализация семейства шифров ChaCha в CrypTool 2
Взято с "https://en.wikipedia.org/w/index.php?title=Salsa20&oldid=1253195606#ChaCha_variant"