Salsa20 и тесно связанный с ним ChaCha - это поточные шифры, разработанные Дэниелом Дж. Бернстайном . Salsa20, оригинальный шифр, был разработан в 2005 году, а затем передан Бернштейну на процесс криптографической проверки Европейского Союза eSTREAM . ChaCha - это модификация Salsa20, опубликованная в 2008 году. Она использует новую функцию раунда, которая увеличивает распространение и увеличивает производительность на некоторых архитектурах. [4]
Общий | |
---|---|
Дизайнеров | Дэниел Дж. Бернштейн |
Впервые опубликовано | 2007 г. (рассчитан на 2005 г.) [1] |
Преемники | ЧаЧа |
Относится к | Румба20 |
Сертификация | портфолио eSTREAM |
Детали шифра | |
Ключевые размеры | 128 или 256 бит |
Размер штата | 512 бит |
Состав | ARX |
Раундов | 20 |
Скорость | 3,91 ц / бит на Intel Core 2 Duo [2] |
Лучший публичный криптоанализ | |
Криптоанализ 2008 разбивает 8 раундов из 20 для восстановления 256-битного секретного ключа за 2 251 операцию с использованием 2 31 пары потоков ключей. [3] |
Оба шифра построены на псевдослучайной функции, основанной на операциях сложения-поворота-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.
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |
Начальное состояние состоит из восемь ключевых слов, два слова позиции потока, два слова nonce (по существу, дополнительные биты позиции потока) и четыре фиксированных слова:
"экспа" | Ключ | Ключ | Ключ |
Ключ | "nd 3" | Nonce | Nonce |
Поз. | Поз. | "2-к" | Ключ |
Ключ | Ключ | Ключ | "тэ к" |
Постоянные слова означают «расширить 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 #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-битным 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. проект 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 г. |
Полученный из | Сальса20 |
Относится к | Румба20 |
Детали шифра | |
Ключевые размеры | 128 или 256 бит |
Размер штата | 512 бит |
Состав | ARX |
Раундов | 20 |
Скорость | 3,95 ц / бит на Intel Core 2 Duo [4] : 2 |
В 2008 году Бернштейн опубликовал тесно связанное семейство шифров ChaCha , целью которого является увеличение распространения за раунд при достижении той же или немного лучшей производительности. [17] The Aumasson et al. Документ также атакует ChaCha, достижение одного раунда меньше: на 256 битов с ChaCha6 сложности 2 139 и ChaCha7 со сложностью 2 248 . 128 бит ChaCha6 в пределах 2 107 , но утверждает, что атака не может сломать 128 бит ChaCha7. [3]
Начальное состояние ChaCha аналогично начальному состоянию Salsa20, однако есть некоторые отличия. Начальное состояние ChaCha включает 128-битную константу, 256-битный ключ, 32-битный счетчик и 96-битный одноразовый номер, организованный как матрица 4 × 4 из 32-битных слов. [18] ChaCha также переставляет некоторые слова в исходном состоянии:
"экспа" | "nd 3" | "2-к" | "тэ к" |
---|---|---|---|
Ключ | Ключ | Ключ | Ключ |
Ключ | Ключ | Ключ | Ключ |
Прилавок | Nonce | Nonce | Nonce |
Константа такая же, как у 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. [19] Кроме того, форматирование ввода было изменено для поддержки эффективной оптимизации реализации SSE, обнаруженной для Salsa20. Вместо чередования округлений вниз по столбцам и по строкам, они выполняются по столбцам и по диагоналям. [4] : 4 Как и Salsa20, ChaCha упорядочивает шестнадцать 32-битных слов в матрицу 4 × 4. Если проиндексировать элементы матрицы от 0 до 15
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 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 ) // диагональ 2 QR ( 2 , 7 , 8 , 13 ) // диагональ 3 QR ( 3 , 4 , 9 , 14 ) // диагональ 4
ChaCha20 использует 10 повторений двойного раунда. [20] Реализация на 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 ], x [ 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 битами счетчика блоков). [21]
Принятие ChaCha20
Google выбрал ChaCha20 вместе с кодом аутентификации сообщений Poly1305 Бернштейна в качестве замены RC4 в TLS , который используется для обеспечения безопасности в Интернете. [22] Реализация Google защищает трафик HTTPS ( TLS / SSL ) между браузером Chrome на телефонах Android и веб-сайтами Google. [23]
Вскоре после принятия компанией Google TLS алгоритмы ChaCha20 и Poly1305 также использовались для нового шифра [email protected] в OpenSSH . [24] [25] Впоследствии это позволило OpenSSH избежать любой зависимости от OpenSSL с помощью параметра времени компиляции. [26]
ChaCha20 также используется для генератора случайных чисел arc4random в операционных системах FreeBSD , [27] OpenBSD , [28] и NetBSD [29] вместо сломанного RC4 и в DragonFly BSD [30] для подпрограммы ядра CSPRNG . [31] [32] Начиная с версии 4.8, ядро Linux использует алгоритм ChaCha20 для генерации данных для неблокирующего устройства / dev / urandom . [33] [34] [35]
Ссылка на реализацию ChaCha20 опубликована в RFC 7539 . Реализация IETF модифицировала опубликованный алгоритм Бернштейна, изменив 64-разрядный одноразовый номер и 64-разрядный счетчик блоков на 96-разрядный одноразовый номер и 32-разрядный счетчик блоков [36] . Имя не было изменено, когда алгоритм был изменен, поскольку он криптографически незначим (оба образуют то, что криптограф распознал бы как 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 . [37] [38]
В 2018 году RFC 7539 был отменен RFC 8439 . [39]
ChaCha20 - это эксклюзивный алгоритм, используемый системой WireGuard VPN, начиная с версии протокола 1. [40]
Смотрите также
- Speck - шифр add-rotate-xor, разработанный АНБ
Заметки
- ^ Поскольку большая часть работы состоит из выполнения повторных раундов, количество раундов обратно пропорционально производительности. То есть уменьшение количества раундов примерно вдвое увеличивает производительность. Таким образом, варианты с уменьшенным радиусом действия значительно быстрее.
Рекомендации
- ^ а б Дэниел Дж. Бернштейн (24 декабря 2007 г.). «Семейство поточных шифров Salsa20» (PDF) . Цитировать журнал требует
|journal=
( помощь ) - ^ Дэниел Дж. Бернштейн (16 мая 2013 г.). «Скорость Salsa 20; программное обеспечение Salsa20» .
- ^ а б в г Жан-Филипп Аумассон, Саймон Фишер, Шахрам Хазаеи, Вилли Мейер и Кристиан Рехбергер (14 марта 2008 г.). «Новые возможности латинских танцев» (PDF) . Цитировать журнал требует
|journal=
( помощь )CS1 maint: использует параметр авторов ( ссылка ) - ^ а б в г Бернштейн, Даниэль (28 января 2008 г.), ChaCha, вариант Salsa20 (PDF) , получено 3 июня 2018 г.
- ^ Дэниел Дж. Бернштейн (16 мая 2013 г.). «Snuffle 2005: функция шифрования Salsa20» .
- ^ «Salsa20: Программная скорость» . 2007-05-11.
- ^ Дэниел Дж. Бернштейн. «Расширение одноразового использования Salsa20» (PDF) . Проверено 22 августа 2017 .
- ^ "Salsa20 / 12 ECRYPT II Страница" . Проверено 22 августа 2017 .
- ^ «Проект eSTREAM: конец фазы 2» . eSTREAM . 2008-04-29.
- ^ Хунцзюнь Ву (30 марта 2007 г.). «eSTREAM ФАЗА 3: Конец Фазы 1» . eSTREAM.
- ^ «eSTREAM: Краткий отчет о завершении второй фазы» (PDF) . eSTREAM. 2007-03-26.
- ^ Пол Кроули (09.02.2006). «Усеченный дифференциальный криптоанализ пяти раундов Salsa20» .
- ^ Саймон Фишер, Вилли Мейер, Ком Бербен, Жан-Франсуа Биасс, MJB Robshaw (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: использует параметр авторов ( ссылка )
- ^ Юкиясу Цуно, Теруо Сайто, Хироясу Кубо, Томоясу Сузаки и Хироки Накашима (2007-01-02). «Дифференциальный криптоанализ Salsa20 / 8» (PDF) . Цитировать журнал требует
|journal=
( помощь )CS1 maint: использует параметр авторов ( ссылка ) - ^ Чжэньцин Ши, Бинь Чжан, Дэнго Фэн, Вэньлин Ву (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: использует параметр авторов ( ссылка )
- ^ Ники Муха; Барт Пренил (2013). «На пути к поиску оптимальных дифференциальных характеристик для ARX: приложение к Salsa20» (PDF) . Цитировать журнал требует
|journal=
( помощь ) - ^ Дэниел Дж. Бернштейн (25 апреля 2008 г.). «Семейство потоковых шифров ChaCha» .
- ^ «ChaCha20 и Poly1305 для протоколов IETF» . Инженерная группа Интернета . 2 мая 2021 года. Архивировано 2 мая 2021 года . Проверено 2 мая 2021 года .
- ^ Невес, Самуэль (07.10.2009), Реализации Faster ChaCha для процессоров Intel , получено 07.09.2016 ,
две из этих констант кратны 8; это позволяет выполнять ротацию 1 инструкции в процессорах Core2 и более поздних версиях Intel с использованием инструкции pshufb
- ^ Я. Нир (Check Point), А. Лэнгли (Google Inc.) (май 2015 г.). «ChaCha20 и Poly1305 для протоколов IETF: RFC 7539» .CS1 maint: использует параметр авторов ( ссылка )
- ^ Арцишевский, Скотт. «XChaCha: расширенный одноразовый ChaCha и AEAD_XChaCha20_Poly1305» . tools.ietf.org .
- ^ А. Лэнгли, В. Чанг, Н. Мавроджианнопулос, Дж. Стромбергсон, С. Йозефссон (2015-12-16). «ChaCha20-Poly1305 Наборы шифров для безопасности транспортного уровня (TLS)» . Интернет-проект .CS1 maint: использует параметр авторов ( ссылка )
- ^ «Google заменяет криптографические шифры в OpenSSL» . Инфобезопасность. 2014-04-25. Архивировано из оригинала на 2018-11-07.
- ^ Миллер, Дэмиен (2016-05-03). "ssh / PROTOCOL.chacha20poly1305" . Перекрестная ссылка BSD суперпользователя: PROTOCOL.chacha20poly1305 . Проверено 7 сентября 2016 .
- ^ Муренин, Константин А. (11.12.2013). Неизвестный Ламер (ред.). "OpenSSH имеет новый шифр - Chacha20-poly1305 - от DJ Bernstein" . Slashdot . Проверено 7 сентября 2016 .
- ^ Муренин, Константин А. (30.04.2014). Soulskill (ред.). «OpenSSH больше не должен зависеть от OpenSSL» . Slashdot . Проверено 7 сентября 2016 .
- ^ «Ревизия 317015» . 2017-04-16 . Проверено 16 марта 2018 .
Замените алгоритм RC4 для генерации безопасных случайных чисел в ядре на Chacha20
- ^ Гюнтер (Филип Гюнтер), изд. (2015-09-13). "libc / crypt / arc4random.c" . Перекрестная ссылка BSD суперпользователя: arc4random.c . Проверено 7 сентября 2016 .
Генератор случайных чисел на основе ChaCha для OpenBSD.
- ^ риастрад (Тейлор Кэмпбелл), изд. (2016-03-25). "libc / gen / arc4random.c" . Перекрестная ссылка BSD суперпользователя: arc4random.c . Проверено 7 сентября 2016 .
Устаревший API arc4random (3) от OpenBSD, переопределенный с использованием ChaCha20 PRF, с состоянием для каждого потока.
- ^ "kern / subr_csprng.c" . Перекрестная ссылка BSD суперпользователя: subr_csprng.c . 2015-11-04 . Проверено 7 сентября 2016 .
chacha_encrypt_bytes
- ^ «Использование и развертывание ChaCha» . 2016-09-07 . Проверено 7 сентября 2016 .
- ^ "arc4random (3)" . Страницы руководства NetBSD . 2014-11-16 . Проверено 7 сентября 2016 .
- ^ Корбет, Джонатан. «Замена / dev / urandom» . Еженедельные новости Linux . Проверено 20 сентября 2016 .
- ^ «Слить тег 'random_for_linus' из git.kernel.org/pub/scm/linux/kernel/git/tytso/random» . Дерево исходных текстов ядра Linux . Проверено 20 сентября 2016 .
random: заменить неблокирующий пул CRNG на основе Chacha20
- ^ Майкл Ларабель (25.07.2016). «/ dev / random: улучшения для Linux 4.8» . Фороникс . Проверено 3 октября 2016 .
- ^ «ChaCha20 и Poly1305 для протоколов IETF» (PDF) . Проверено 7 августа 2017 .
Отличия от обычного ChaCha. Разделение порядкового номера nonce: block изменено с 64:64 на 96:32.
- ^ "В чем привлекательность использования ChaCha20 вместо AES?" . Обмен криптографическим стеком . 2016-04-12.
- ^ «Исследование производительности SSL AES-NI @ Calomel.org» .
- ^ Заголовок RFC 7539.
- ^ «Протокол и криптография» . WireGuard . Джейсон А. Доненфельд . Проверено 4 июля 2018 года .
Внешние ссылки
- Snuffle 2005: функция шифрования Salsa20
- Спецификация Salsa20 ( PDF )
- Сальса 20/8 и Сальса 20/12 (PDF)
- Проект eSTREAM: Salsa20
- Семейство потоковых шифров ChaCha
- Salsa20 Использование и развертывание