Jump to content

Сальса20

(Перенаправлено с XSalsa20 )
Сальса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 ]

Оба шифра построены на псевдослучайной функции, основанной на операциях сложения-поворота-исключающее ИЛИ (ARX) — 32-битного сложения, побитового сложения (XOR) и операций вращения . Основная функция отображает 256-битный ключ , 64-битный nonce и 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 (по сути, дополнительные биты позиции потока) (  ) и четыре фиксированных слова (  ):

Исходное состояние Сальсы20
"экспа" Ключ Ключ Ключ
Ключ "№ 3" одноразовый одноразовый
Поз. Поз. "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, а четные раунды применяют его к каждой из четырех строк. Два последовательных раунда (столбец и ряд) вместе называются двойным раундом:

// Odd round
QR( 0,  4,  8, 12) // column 1
QR( 5,  9, 13,  1) // column 2
QR(10, 14,  2,  6) // column 3
QR(15,  3,  7, 11) // column 4
// Even round
QR( 0,  1,  2,  3) // row 1
QR( 5,  6,  7,  4) // row 2
QR(10, 11,  8,  9) // row 3
QR(15, 12, 13, 14) // row 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 loops × 2 rounds/loop = 20 rounds
	for (i = 0; i < ROUNDS; i += 2) {
		// Odd round
		QR(x[ 0], x[ 4], x[ 8], x[12]); // column 1
		QR(x[ 5], x[ 9], x[13], x[ 1]); // column 2
		QR(x[10], x[14], x[ 2], x[ 6]); // column 3
		QR(x[15], x[ 3], x[ 7], x[11]); // column 4
		// Even round
		QR(x[ 0], x[ 1], x[ 2], x[ 3]); // row 1
		QR(x[ 5], x[ 6], x[ 7], x[ 4]); // row 2
		QR(x[10], x[11], x[ 8], x[ 9]); // row 3
		QR(x[15], x[12], x[13], x[14]); // row 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 ] [ 9 ] XSalsa20 доказуемо безопасен, если Salsa20 безопасен, но он больше подходит для приложений, где желательны более длинные одноразовые номера. XSalsa20 подает ключ и первые 128 бит nonce в один блок Salsa20 (без последнего сложения, которое может быть опущено или вычтено после стандартного блока Salsa20) и использует 256 бит вывода в качестве ключа для стандартного блока Salsa20. Salsa20 использует последние 64 бита nonce и позицию потока. В частности, используемые 256 бит вывода соответствуют несекретным частям ввода: индексам 0, 5, 10, 15, 6, 7, 8 и 9.

Выбор eSTREAM Salsa20

[ редактировать ]

Salsa20/12 был выбран в качестве проекта Фазы 3 для Профиля 1 (программное обеспечение) проектом eSTREAM , получив наивысший взвешенный балл голосования среди всех алгоритмов Профиля 1 в конце Фазы 2. [ 10 ] Salsa20 ранее был выбран проектом eSTREAM в качестве основного проекта Фазы 2 для Профиля 1 (программное обеспечение) и в качестве проекта Фазы 2 для Профиля 2 (аппаратное обеспечение). [ 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 году атака Аумассона и др. был улучшен Shi et al. против 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 ] Аумассон и др. paper также атакует ChaCha, добиваясь на один раунд меньше (для 256-битной ChaCha6 со сложностью 2 139 , ЧаЧа7 со сложностью 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-по" "те к"
Ключ Ключ Ключ Ключ
Ключ Ключ Ключ Ключ
Прилавок Прилавок одноразовый одноразовый

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

a += b; d ^= a; d <<<= 16;
c += d; b ^= c; b <<<= 12;
a += b; d ^= a; d <<<=  8;
c += d; b ^= c; b <<<=  7;

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

Четвертьраунд ChaCha имеет такое же количество добавлений, операций xor и поворотов битов, что и четвертьраунд Salsa20, но тот факт, что два из циклов кратны 8, позволяет провести небольшую оптимизацию на некоторых архитектурах, включая x86. [ 20 ] Кроме того, форматирование входных данных было изменено для поддержки эффективной оптимизации реализации 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

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

// Odd round
QR(0, 4,  8, 12) // column 1
QR(1, 5,  9, 13) // column 2
QR(2, 6, 10, 14) // column 3
QR(3, 7, 11, 15) // column 4
// Even round
QR(0, 5, 10, 15) // diagonal 1 (main diagonal)
QR(1, 6, 11, 12) // diagonal 2
QR(2, 7,  8, 13) // diagonal 3
QR(3, 4,  9, 14) // diagonal 4

ChaCha20 использует 10 итераций двойного раунда. [ 21 ] Ниже представлена ​​реализация на 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];

	for (i = 0; i < 16; ++i)
		x[i] = in[i];
	// 10 loops × 2 rounds/loop = 20 rounds
	for (i = 0; i < ROUNDS; i += 2) {
		// Odd round
		QR(x[0], x[4], x[ 8], x[12]); // column 1
		QR(x[1], x[5], x[ 9], x[13]); // column 2
		QR(x[2], x[6], x[10], x[14]); // column 3
		QR(x[3], x[7], x[11], x[15]); // column 4
		// Even round
		QR(x[0], x[5], x[10], x[15]); // diagonal 1 (main diagonal)
		QR(x[1], x[6], x[11], x[12]); // diagonal 2
		QR(x[2], x[7], x[ 8], x[13]); // diagonal 3
		QR(x[3], x[4], x[ 9], x[14]); // diagonal 4
	}
	for (i = 0; i < 16; ++i)
		out[i] = x[i] + in[i];
}

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

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

ЧаЧа с сокращенным раундом

[ редактировать ]

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

Принятие ЧаЧа20

[ редактировать ]

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

Вскоре после принятия Google на TLS алгоритмы ChaCha20 и Poly1305 также использовались для нового протокола. [email protected] шифровать в 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 опубликован в РФК   7539 . Реализация IETF . изменила опубликованный алгоритм Бернштейна, изменив 64-битный одноразовый номер и 64-битный счетчик блоков на 96-битный одноразовый номер и 32-битный счетчик блоков [ 46 ] Имя не было изменено при изменении алгоритма, поскольку оно не имеет криптографического значения (оба образуют то, что криптограф распознает как 128-битный одноразовый номер), но изменение интерфейса может стать источником путаницы для разработчиков. Из-за уменьшенного счетчика блоков максимальная длина сообщения, которое можно безопасно зашифровать по варианту IETF, равна 2. 32 блоки по 64 байта (256 ГиБ ). Для приложений, где этого недостаточно, например для шифрования файлов или дисков, RFC   7539 предлагает использовать оригинальный алгоритм с 64-битным одноразовым номером.

Исходное состояние ChaCha20 (RFC 7539) [ 46 ]
"экспа" "№ 3" "2-по" "те к"
Ключ Ключ Ключ Ключ
Ключ Ключ Ключ Ключ
Прилавок одноразовый одноразовый одноразовый

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

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

См. также

[ редактировать ]
  • Speck - шифр «сложение-поворот-исключающее или», разработанный АНБ.
  • ChaCha20-Poly1305 - схема AEAD, сочетающая ChaCha20 с Poly1305 MAC.

Примечания

[ редактировать ]
  1. ^ Поскольку большая часть работы состоит из выполнения повторяющихся раундов, количество раундов обратно пропорционально производительности. То есть уменьшение количества раундов вдвое увеличивает производительность примерно вдвое. Таким образом, варианты с уменьшенным количеством раундов работают значительно быстрее.
  1. ^ Перейти обратно: а б Дэниел Дж. Бернштейн (24 декабря 2007 г.). «Семейство потоковых шифров Salsa20» (PDF) . cr.yp.to .
  2. ^ Дэниел Дж. Бернштейн (16 мая 2013 г.). «Скорость Salsa 20; программное обеспечение Salsa20» .
  3. ^ Перейти обратно: а б с д Жан-Филипп Омассон; Саймон Фишер; Шахрам Хазаи; Вилли Мейер; Кристиан Рехбергер (14 марта 2008 г.). «Новые особенности латиноамериканских танцев» (PDF) . Международная ассоциация криптологических исследований .
  4. ^ Перейти обратно: а б с д Бернштейн, Дэниел (28 января 2008 г.), ChaCha, вариант Salsa20 (PDF) , получено 3 июня 2018 г.
  5. ^ Дэниел Дж. Бернштейн (16 мая 2013 г.). «Snuffle 2005: функция шифрования Salsa20» .
  6. ^ «Salsa20: Скорость программного обеспечения» . 11 мая 2007 г.
  7. ^ Дэниел Дж. Бернштейн. «Расширение nonce Salsa20 (обновлено в 2011 г.)» (PDF) . cr.yp.to . Проверено 18 августа 2022 г.
  8. ^ Дэниел Дж. Бернштейн. «Расширение nonce Salsa20 (исходная версия)» (PDF) . cr.yp.to . Проверено 18 августа 2022 г.
  9. ^ «Сальса20/12» . ЭКРИПТ II . Проверено 22 августа 2017 г.
  10. ^ «Проект eSTREAM: завершение фазы 2» . еСТРИМ . 29 апреля 2008 г.
  11. ^ Хунцзюнь Ву (30 марта 2007 г.). «eSTREAM ФАЗА 3: Конец фазы 1» . еСТРИМ.
  12. ^ «eSTREAM: Краткий отчет об окончании второго этапа» (PDF) . еСТРИМ. 26 марта 2007 г.
  13. ^ «Сальса20/12, Страница портфолио eSTREAM» . www.ecrypt.eu.org .
  14. ^ Пол Кроули (9 февраля 2006 г.). «Усеченный дифференциальный криптоанализ пяти раундов Salsa20» .
  15. ^ Саймон Фишер; Вилли Мейер; Ком Бербен; Жан-Франсуа Биас; MJB Робшоу (2006). «Неслучайность в кандидатах eSTREAM Salsa20 и TSC-4». Прогресс в криптологии - INDOCRYPT 2006: 7-я Международная конференция по криптологии в Индии, Калькутта, Индия, 11-13 декабря 2006 г., Текущие материалы . Конспекты лекций по информатике. Том. 4329. стр. 2–16. CiteSeerX   10.1.1.121.7248 . дои : 10.1007/11941378_2 . ISBN  978-3-540-49767-7 .
  16. ^ Кубо; Томоясу Сузаки (02 января 2007 г.) Дифференциальный криптоанализ Salsa20/8» (PDF) . « Юкиясу Цуноо; Теруо
  17. ^ Чжэньцин Ши; Бинь Чжан; Дэнго Фэн; Вэньлин Ву (2012). «Улучшенные атаки с восстановлением ключей на Salsa20 и ChaCha с сокращенным числом раундов». Информационная безопасность и криптология – ICISC 2012 . Конспекты лекций по информатике. Том. 7839. стр. 337–351. дои : 10.1007/978-3-642-37682-5_24 . ISBN  978-3-642-37681-8 .
  18. ^ Ники Муха; Барт Пренил (2013). «На пути к поиску оптимальных дифференциальных характеристик для ARX: применение к Salsa20» (PDF) . Международная ассоциация криптологических исследований .
  19. ^ Перейти обратно: а б с Дэниел Дж. Бернштейн (25 апреля 2008 г.). «Семейство потоковых шифров ChaCha» .
  20. ^ Невес, Сэмюэл (07 октября 2009 г.), Быстрые реализации ChaCha для процессоров Intel , заархивировано из оригинала 28 марта 2017 г. , получено 7 сентября 2016 г. , две из этих констант кратны 8; это позволяет выполнять ротацию на 1 инструкцию в процессорах Intel Core2 и более поздних версиях с использованием pshufb . инструкции
  21. ^ Ю. Нир; А. Лэнгли (май 2015 г.). «ChaCha20 и Poly1305 для протоколов IETF: RFC 7539» .
  22. ^ Арчишевски, Скотт (10 января 2020 г.). «XChaCha: ChaCha с расширенным одноразовым номером и AEAD_XChaCha20_Poly1305 (интернет-проект с истекшим сроком действия)» . Ietf Datatracker .
  23. ^ Омассон, Жан-Филипп (2020). Слишком много криптовалют (PDF) . Крипто-симпозиум реального мира.
  24. ^ Перейти обратно: а б «rand_chacha: рассмотрите ChaCha12 (или, возможно, ChaCha8) вместо ChaCha20 · Проблема № 932 · ржавчина-рандом/ранд» . Гитхаб .
  25. ^ «ЧаЧа» . Букварь по криптографии .
  26. ^ «Сделайте ChaCha: лучшая производительность мобильных устройств с помощью криптографии» . Блог Cloudflare . 23 февраля 2015 г. Проверено 13 июля 2021 г.
  27. ^ Томсон, Мартин; Тернер, Шон (май 2021 г.). «РФК 9001» . datatracker.ietf.org . Проверено 13 июля 2021 г.
  28. ^ Бишоп, Майк (2 февраля 2021 г.). «проект: IETF QUIC HTTP» . datatracker.ietf.org . Проверено 13 июля 2021 г.
  29. ^ Миллер, Дэмиен (3 мая 2016 г.). "ssh/ПРОТОКОЛ.chacha20poly1305" . Перекрестная ссылка BSD суперпользователя: PROTOCOL.chacha20poly1305 . Проверено 7 сентября 2016 г.
  30. ^ Муренин, Константин А. (11 декабря 2013 г.). Неизвестный Ламер (ред.). «В OpenSSH появился новый шифр — Chacha20-poly1305 — от DJ Bernstein» . Слэшдот . Проверено 7 сентября 2016 г.
  31. ^ Муренин, Константин А. (30 апреля 2014 г.). Соулскилл (ред.). «OpenSSH больше не зависит от OpenSSL» . Слэшдот . Проверено 7 сентября 2016 г.
  32. ^ «Редакция 317015» . 16 апреля 2017 г. Проверено 16 марта 2018 г. Замените алгоритм RC4 для генерации безопасных случайных чисел в ядре на Chacha20.
  33. ^ Гюнтер (Филип Гюнтер), изд. (13 сентября 2015 г.). "libc/crypt/arc4random.c" . Перекрестная ссылка BSD суперпользователя: arc4random.c . Проверено 7 сентября 2016 г. Генератор случайных чисел на основе ChaCha для OpenBSD.
  34. ^ Риастрад (Тейлор Кэмпбелл), изд. (25 марта 2016 г.). "libc/gen/arc4random.c" . Перекрестная ссылка BSD суперпользователя: arc4random.c . Проверено 7 сентября 2016 г. Устаревший API arc4random(3) из OpenBSD, перереализованный с использованием ChaCha20 PRF, с состоянием каждого потока.
  35. ^ "kern/subr_csprng.c" . Перекрестная ссылка BSD суперпользователя: subr_csprng.c . 04.11.2015 . Проверено 7 сентября 2016 г. chacha_encrypt_bytes
  36. ^ «Использование и развертывание ChaCha» . 07.09.2016 . Проверено 7 сентября 2016 г.
  37. ^ "arc4random(3)" . Страницы руководства NetBSD . 16 ноября 2014 г. Архивировано из оригинала 06 июля 2020 г. Проверено 7 сентября 2016 г.
  38. ^ Корбет, Джонатан. «Замена /dev/urandom» . Еженедельные новости Linux . Проверено 20 сентября 2016 г.
  39. ^ «Объединить тег «random_for_linus» из git.kernel.org/pub/scm/linux/kernel/git/tytso/random» . Дерево исходного кода ядра Linux . Проверено 20 сентября 2016 г. случайный: заменить неблокирующий пул на CRNG на основе Chacha20.
  40. ^ Майкл Ларабель (25 июля 2016 г.). «/dev/random вижу улучшения в Linux 4.8» . Фороникс . Проверено 3 октября 2016 г.
  41. ^ Кокс, Расс; Вальсорда, Филиппо. «Безопасная случайность в Go 1.22 — языке программирования Go» . go.dev .
  42. ^ «В чем привлекательность использования ChaCha20 вместо AES?» . криптографии Обмен стеками . 12 апреля 2016 г.
  43. ^ «Исследование производительности SSL AES-NI @ Calomel.org» .
  44. ^ Пфау, Йоханнес; Рейтер, Максимилиан; Харбаум, Таня; Хофманн, Клаус; Беккер, Юрген (сентябрь 2019 г.). «Аппаратный взгляд на шифры ChaCha: масштабируемые реализации Chacha8/12/20 от 476 срезов до битрейта 175 Гбит/с». 2019 32-я Международная конференция IEEE «Системы на кристалле» (SOCC) . стр. 294–299. дои : 10.1109/SOCC46988.2019.1570548289 . ISBN  978-1-7281-3483-3 .
  45. ^ «Протокол и криптография» . WireGuard . Джейсон А. Доненфельд . Проверено 4 июля 2018 г.
  46. ^ Перейти обратно: а б «ChaCha20 и Poly1305 для протоколов IETF» (PDF) . Проверено 7 августа 2017 г. Отличия от обычной ЧаЧа. Разделение порядкового номера блока nonce: было изменено с 64:64 на 96:32 [...] Состояние ChaCha20 инициализируется следующим образом:
  47. ^ Заголовок RFC 7539.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b44260594599ceff519c01fafd3dea7b__1721775420
URL1:https://arc.ask3.ru/arc/aa/b4/7b/b44260594599ceff519c01fafd3dea7b.html
Заголовок, (Title) документа по адресу, URL1:
Salsa20 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)