Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Структура [ править ]

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

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

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

b ^ = (a + d) <<< 7;c ^ = (b + a) <<< 9;d ^ = (c + b) <<< 13;a ^ = (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 РАУНДЫ 20 void  salsa20_block ( uint32_t  out [ 16 ],  uint32_t  const  in [ 16 ]) { int  i ; uint32_t  x [ 16 ];для  ( я  =  0 ;  я  <  16 ;  ++ я ) х [ я ]  =  в [ я ]; // 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 ;  i  <  16 ;  ++ i ) out [ i ]  =  x [ i ]  +  in [ i ]; }

В последней строке смешанный массив слово за словом добавляется к исходному массиву, чтобы получить его 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] 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. проект 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 с расчетной временной сложностью 2 177 и об атаке связанных ключей на Salsa20 / 7 с расчетной временной сложностью 2 217 . [13]

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

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

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

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

Вариант ЧаЧа [ править ]

В 2008 году Бернштейн опубликовал тесно связанное семейство шифров ChaCha , целью которого является увеличение распространения за раунд при достижении той же или немного лучшей производительности. [17] The Aumasson et al. Документ также атакует ChaCha, достижение одного раунда меньше: на 256 битов с ChaCha6 сложности 2 139 и ChaCha7 со сложностью 2 248 . 128 бит ChaCha6 в пределах 2 107 , но утверждает, что атака не может сломать 128 бит ChaCha7. [3]

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

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

а + = Ь; d ^ = a; d <<< = 16;c + = d; Ь ^ = с; b <<< = 12;а + = Ь; 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

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

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

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

XChaCha [ править ]

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

Принятие ChaCha20 [ править ]

Google выбрал ChaCha20 вместе с кодом аутентификации сообщений Poly1305 Бернштейна в качестве замены RC4 в TLS , который используется для обеспечения безопасности в Интернете. [21] Реализация Google защищает трафик HTTPS ( TLS / SSL ) между браузером Chrome на телефонах 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, составляет 2 32 блока по 64 байта (256  ГиБ).). Для приложений, где этого недостаточно, например для шифрования файлов или дисков, RFC 7539 предлагает использовать исходный алгоритм с 64-битным одноразовым кодом. 

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

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

В 2018 году RFC 7539 был заменен RFC 8439 . [38] 

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

См. Также [ править ]

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

Заметки [ править ]

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

Ссылки [ править ]

  1. ^ a b Дэниел Дж. Бернштейн (2007-12-24). «Семейство поточных шифров Salsa20» (PDF) . Cite journal requires |journal= (help)
  2. ^ Дэниел Дж. Бернштейн (2013-05-16). «Скорость Salsa 20; программное обеспечение Salsa20» .
  3. ^ a b c d Жан-Филипп Аумассон, Саймон Фишер, Шахрам Хазаи, Вилли Мейер и Кристиан Рехбергер (2008-03-14). «Новые возможности латинских танцев» (PDF) . Cite journal requires |journal= (help)CS1 maint: uses authors parameter (link)
  4. ^ a b c d Бернштейн, Даниэль (28 января 2008 г.), ChaCha, вариант Salsa20 (PDF) , получено 3 июня 2018 г.
  5. ^ Дэниел Дж. Бернштейн (2013-05-16). «Snuffle 2005: функция шифрования Salsa20» .
  6. ^ «Salsa20: Скорость программного обеспечения» . 2007-05-11.
  7. ^ Дэниел Дж. Бернштейн. «Расширение одноразового использования Salsa20» (PDF) . Проверено 22 августа 2017 .
  8. ^ "Страница Salsa20 / 12 ECRYPT II" . Проверено 22 августа 2017 .
  9. ^ «Проект eSTREAM: конец фазы 2» . eSTREAM . 2008-04-29.
  10. ^ Хунцзюнь Wu (2007-03-30). «eSTREAM ФАЗА 3: Конец Фазы 1» . eSTREAM.
  11. ^ «eSTREAM: Краткий отчет о конце второй фазы» (PDF) . eSTREAM. 2007-03-26.
  12. ^ Пол Кроули (2006-02-09). «Усеченный дифференциальный криптоанализ пяти раундов Salsa20» .
  13. ^ Саймон Фишер, Вилли Мейер, Ком Бербен, Жан-Франсуа Биасс, MJB Робшоу (2006). «Неслучайность в кандидатах eSTREAM Salsa20 и TSC-4». Прогресс в криптологии - INDOCRYPT 2006 . Indocrypt 2006 . Конспект лекций по информатике. 4329 . С. 2–16. CiteSeerX 10.1.1.121.7248 . DOI : 10.1007 / 11941378_2 . ISBN  978-3-540-49767-7.CS1 maint: uses authors parameter (link)
  14. ^ Yukiyasu Tsunoo, Теий Сайт, Hiroyasu Кубы, Tomoyasu Suzaki и Хирок Накашим (2007-01-02). «Дифференциальный криптоанализ Salsa20 / 8» (PDF) . Cite journal requires |journal= (help)CS1 maint: uses authors parameter (link)
  15. ^ Zhenqing Ши, Бен Чжан, Dengguo Feng, Вэньлинская Wu (2012). «Улучшенные атаки восстановления ключа на Salsa20 и ChaCha с уменьшенным количеством раундов». Информационная безопасность и криптология - ICISC 2012 . ICISC'12 Труды 15-й Международной конференции по информационной безопасности и криптологии . Конспект лекций по информатике. 7839 . С. 337–351. DOI : 10.1007 / 978-3-642-37682-5_24 . ISBN 978-3-642-37681-8.CS1 maint: uses authors parameter (link)
  16. ^ Ники Муха; Барт Пренил (2013). «На пути к поиску оптимальных дифференциальных характеристик для ARX: приложение к Salsa20» (PDF) . Cite journal requires |journal= (help)
  17. ^ Дэниел Дж. Бернштейн (2008-04-25). «Семейство потоковых шифров ChaCha» .
  18. ^ Невес, Самуэль (07.10.2009), Более быстрые реализации ChaCha для процессоров Intel , получено 07.09.2016 , две из этих констант кратны 8; это позволяет выполнять ротацию 1 инструкции в процессорах Core2 и более поздних версиях Intel с использованием инструкции pshufb
  19. Y. Nir (Check Point), A. Langley (Google Inc.) (май 2015 г.). «ChaCha20 и Poly1305 для протоколов IETF: RFC 7539» .CS1 maint: uses authors parameter (link)
  20. ^ Арцишевский, Скотт. «XChaCha: расширенный одноразовый ChaCha и AEAD_XChaCha20_Poly1305» . tools.ietf.org .
  21. ^ А. Лэнгли, В. Чанг, Н. Mavrogiannopoulos, Дж Strombergson, С. Йозефссон (2015-12-16). «ChaCha20-Poly1305 Наборы шифров для безопасности транспортного уровня (TLS)» . Интернет-проект .CS1 maint: uses authors parameter (link)
  22. ^ "Google заменяет криптографические шифры в OpenSSL" . Инфобезопасность. 2014-04-25. Архивировано из оригинала на 2018-11-07.
  23. ^ Миллер, Дэмиен (2016-05-03). "ssh / PROTOCOL.chacha20poly1305" . Перекрестная ссылка BSD суперпользователя: PROTOCOL.chacha20poly1305 . Проверено 7 сентября 2016 .
  24. ^ Муренин, Константин А. (2013-12-11). Неизвестный Ламер (ред.). "OpenSSH имеет новый шифр - Chacha20-poly1305 - от DJ Bernstein" . Slashdot . Проверено 7 сентября 2016 .
  25. ^ Муренин, Константин А. (2014-04-30). Soulskill (ред.). «OpenSSH больше не должен зависеть от OpenSSL» . Slashdot . Проверено 7 сентября 2016 .
  26. ^ "Редакция 317015" . 2017-04-16 . Проверено 16 марта 2018 . Замените алгоритм RC4 для генерации безопасных случайных чисел в ядре на Chacha20
  27. ^ Гюнтер (Филип Гюнтер), изд. (2015-09-13). "libc / crypt / arc4random.c" . Перекрестная ссылка BSD суперпользователя: arc4random.c . Проверено 7 сентября 2016 . Генератор случайных чисел на основе ChaCha для OpenBSD.
  28. ^ Риастрад (Тейлор Кэмпбелл), изд. (2016-03-25). "libc / gen / arc4random.c" . Перекрестная ссылка BSD суперпользователя: arc4random.c . Проверено 7 сентября 2016 . Устаревший API arc4random (3) от OpenBSD, переопределенный с использованием ChaCha20 PRF, с состоянием для каждого потока.
  29. ^ "kern / subr_csprng.c" . Перекрестная ссылка BSD суперпользователя: subr_csprng.c . 2015-11-04 . Проверено 7 сентября 2016 .chacha_encrypt_bytes
  30. ^ «Использование и развертывание ChaCha» . 2016-09-07 . Проверено 7 сентября 2016 .
  31. ^ "arc4random (3)" . Страницы руководства NetBSD . 2014-11-16 . Проверено 7 сентября 2016 .
  32. Корбет, Джонатан. «Замена / dev / urandom» . Еженедельные новости Linux . Проверено 20 сентября 2016 .
  33. ^ "Слить тег 'random_for_linus' из git.kernel.org/pub/scm/linux/kernel/git/tytso/random" . Дерево исходных текстов ядра Linux . Проверено 20 сентября 2016 . random: заменить неблокирующий пул CRNG на основе Chacha20
  34. ^ Майкл Ларабель (2016-07-25). «/ dev / random: улучшения для Linux 4.8» . Фороникс . Проверено 3 октября 2016 .
  35. ^ «ChaCha20 и Poly1305 для протоколов IETF» (PDF) . Проверено 7 августа 2017 . Отличия от обычного 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 года .

Внешние ссылки [ править ]

  • Snuffle 2005: функция шифрования Salsa20
  • Спецификация Salsa20 ( PDF )
  • Сальса 20/8 и Сальса 20/12 (PDF)
  • Проект eSTREAM: Salsa20
  • Семейство потоковых шифров ChaCha
  • Salsa20 Использование и развертывание