살사20

Salsa20
살사20
Salsa round function.svg
Salsa 쿼터 라운드 기능.네 개의 평행 복사가 한 바퀴를 이룬다.
일반
디자이너대니얼 번스타인
초판2007년 (2005년 [1]설계)
후계자차차
관련 정보룸바20
인정.eSTREAM 포트폴리오
암호 상세
키 사이즈128비트 또는 256비트
상태 크기512 비트
구조.ARX
라운드20
속도인텔 Core 2 Duo에서는[2] 3.91 cpb
최고의 퍼블릭 암호 분석
2008년 암호 분석은 2개의 키 스트림 [3]쌍을 사용하여31 2개의 작업으로251 256비트 개인 키를 복구하기 위해 20라운드 중 8라운드를 중단합니다.

Salsa20과 밀접하게 관련된 ChaCha는 Daniel J. Bernstein이 개발스트림 암호입니다.원래 암호인 Salsa20은 2005년에 설계되었으며 이후 Bernstein에 의해 eSTREAM European Union 암호화 검증 프로세스에 제출되었습니다.ChaCha는 2008년에 출판된 Salsa20의 수정판입니다.일부 [4]아키텍처에서 확산을 증가시키고 성능을 향상시키는 새로운 라운드 함수를 사용합니다.

양쪽 암호는 Add-Rotate-XOR(ARX) 조작에 근거한 의사 난수 함수(32비트 Addition, Bitwise Addition(XOR; 추가 비트 추가) 및 회전 조작)에 근거해 구축됩니다.핵심 함수는 256비트 키, 64비트 난스 및 64비트 카운터를 키 스트림의 512비트 블록에 매핑합니다(128비트 키를 가진 Salsa 버전도 있음).이를 통해 Salsa20 및 ChaCha는 사용자가 키 스트림의 모든 위치를 일정 시간 내에 효율적으로 찾을 수 있는 특별한 이점을 얻을 수 있습니다.Salsa20은 최신 x86 [5]프로세서의 소프트웨어에서 바이트당4-14 사이클의 속도와 합리적인 하드웨어 성능을 제공합니다.Bernstein은 특허를 취득하지 않았으며, [6]공통 아키텍처에 최적화된 여러 퍼블릭 도메인 구현을 작성했습니다.

구조.

내부적으로 암호는 16개의 32비트 워드의 내부 상태에서 비트 부가 ((배타적 논리합), 32비트 부가 mod32 2 , 및 등거리 회전 연산 << 를 사용합니다.add-rotate-xor 조작만을 사용하면 소프트웨어 구현에서 타이밍 공격의 가능성을 피할 수 있습니다.내부 상태는 4×4 매트릭스로 배열된 16개의 32비트 워드로 구성됩니다.

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

초기 상태는 다음과 같이 구성됩니다. 키 8단어, 스트림 위치 2단어, 난스 2단어(기본적으로 스트림 위치 비트 추가), 고정 4단어:

Salsa 20의 초기 상태
"expa" 열쇠 열쇠 열쇠
열쇠 'nd 3' 난스 난스
Pos. Pos. '2바이' 열쇠
열쇠 열쇠 열쇠 "tek"

상수 단어는 ASCII에서 "expand 32-byte k"로 표기됩니다(즉, 4개의 단어는 "expa", "nd 3", "2-by", "te k"입니다).이것은 소매가 없는 숫자의 예입니다.Salsa20의 핵심 운영은 4분의 1 라운드입니다.QR(a, b, c, d)4단어 입력을 받아 4단어 출력을 생성합니다.

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

홀수 라운드 적용QR(a, b, c, d)4×4 행렬의 4개 열 각각과 짝수 반올림에서는 4개 행 각각에 적용됩니다.연속된 두 라운드(컬럼 라운드와 행 라운드)를 함께 더블 라운드라고 합니다.

// 홀수 라운드 QR(0, 4, 8, 12) // 열 1 QR(5, 9, 13, 1) // 열 2 QR(10, 14, 2, 6) // 열 3 QR(15, 3, 7, 11) // 열 4 // 짝수 라운드 QR(0, 1, 7, 4) // 열 1 QR(5, 6, 12) // 열 8, 10

C/C++에서의 실장은 다음과 같습니다.

#실패하다 < stdint >h> #control ROTL(a, b)((a) < (b) (a) >> (32 - (b)))) #정의 QR(a, b, c, d)(\) b ^= ROTL(a + d, 7), \ c ^= ROTL(b + a, 9), \ d ^ OTL R = (c + b,13), \ a ^ OTL R = (d + c,18) #ROUND 20의 정의   무효 salsa20_블록(uint32_t 나가.[16], uint32_t 컨스턴트 [16]) {  인트 i;  uint32_t x[16];   위해서 (i = 0; i < > 16; ++i)   x[i] = [i];  // 10루프 × 2라운드/루프 = 20라운드  위해서 (i = 0; i < > 라운드; 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행  }  위해서 (i = 0; i < > 16; ++i)   나가.[i] = x[i] + [i]; } 

마지막 줄에서는 혼합 어레이를 원래 어레이에 한 단어씩 추가하여 64바이트 키 스트림 블록을 얻는다.혼합 라운드는 그 자체로 반전 가능하기 때문에 이것은 중요합니다.즉, 역연산을 적용하면 키를 포함한 원래의 4×4 매트릭스가 생성됩니다.혼합 어레이를 원본에 추가하면 입력을 복구할 수 없습니다.(이 기술은 MD4에서 SHA-2까지 해시 함수에서 널리 사용됩니다.)

Salsa20은 [1]입력으로 20라운드의 혼합을 수행합니다.그러나 각각 8라운드와 12라운드를 사용하는 축소 라운드형 Salsa20/8 및 Salsa20/12도 도입되었습니다.이러한 변형은 원래 Salsa20을 대체하기 위해 도입된 것이 아니라 기존 Salsa20을 보완하기 위해 도입된 것이며, 보안 마진도 상대적으로 낮지만 eSTREAM 벤치마크에서 훨씬 더 뛰어난[note 1] 성능을 발휘합니다.

192비트 난스 탑재 XSalsa20

2011년 Bernstein은 192비트 난스를 사용하는 XSalsa20이라는 변종 Salsa20을 [7][8]제안했습니다.XSalsa20은 Salsa20이 안전할 경우 안전할 수 있지만 더 긴 난스를 필요로 하는 애플리케이션에 더 적합합니다.XSalsa20은 키와 난스의 처음 128비트를 Salsa20의 1개 블록(최종 추가 없이 표준 Salsa20 블록 뒤에 생략 또는 감산 가능)에 공급하고 출력의 256비트를 난스의 마지막 64비트와 스트림 위치를 사용하여 표준 Salsa20의 키로 사용합니다.특히 사용되는 출력의 256비트는 입력의 비비밀 부분인 인덱스 0, 5, 10, 15, 6, 7, 8 및 9에 대응하는 것입니다.

eSTREAM의 Salsa20 선택

Salsa20은 eSTREAM 프로젝트에서 Profile 1(소프트웨어)의 3단계 설계로 선정되었으며,[9] 2단계 종료 시 Profile 1 알고리즘 중 가장 높은 가중 투표 점수를 받았습니다.Salsa20은 이전에 eSTREAM [10]프로젝트에서 프로파일 1(소프트웨어)에 대한 단계 2 Focus 설계 및 프로파일 2(하드웨어)에 대한 단계 2 설계로 선정되었지만, eSTREAM에서 리소스가 극도로 제한된 하드웨어 [11]환경에 적합하지 않다고 판단했기 때문에 프로파일 2에 대한 단계 3으로 발전되지 않았습니다.

Salsa20 암호화 분석

2015년 현재 Salsa20/12 또는 전체 Salsa20/20에 대한 공격은 공개되지 않았습니다. 가장 잘 알려진 공격은[3] 12 또는 20라운드 중 8라운드입니다.

2005년에 Paul Crowley는 Salsa20/5에 대한 공격을 보고했으며, 추정 시간 복잡도는 2이며165, Bernstein의 "가장 흥미로운 Salsa20 암호화 분석"[12]으로 US$1000 상을 수상했습니다.이 공격 및 이후의 모든 공격은 잘린 차분 암호 분석에 기초합니다.2006년에 Fischer, Meier, Berbain, Biasse 및 Robshaw는 Salsa20/6에 대한 공격(추정 시간 복잡도177 2)과 Salsa20/7에 대한 관련 키 공격(추정 시간 복잡도217 2)[13]을 보고했습니다.

2007년, Tunoo 등에서는, 2개의 [14]키 스트림11.37 페어를 사용해 2개의 조작으로255 256비트 비밀 키를 복구하기 위해서, 20 라운드 중 8 라운드를 해제하는 Salsa20의 암호 분석을 발표했습니다.그러나 이 공격은 무차별적인 공격과는 경쟁적이지 않은 것으로 보인다.

2008년에 Aumasson, Fischer, Khazaei, Meier 및 Rechberger는 Salsa20/7에 대한 암호화 공격을 시간 복잡도 2로153 보고했으며, Salsa20/8에 대한 첫 번째 공격은 시간 복잡도 2로251 추정했습니다.이 공격은 잘린 차분의 확률론적 검출을 위해 새로운 개념의 확률론적 중립 키 비트를 이용한다.공격은 128비트 [3]키를 사용하여 Salsa20/7을 차단하도록 조정할 수 있습니다.

2012년에 Salsa20/7(128비트 키)에 대한 Aumasson 등의 공격은 Salsa20/7에 의한109 시간 복잡도 2, Salsa20/8(256비트 키)에250 대한 Salsa20/[15]8에 의한 공격을 2로 개선했다.

2013년 Mouha와 Prenel은 15라운드의 Salsa20이 차등 암호화 분석에 대해 128비트 안전하다는 증거를[16] 발표했습니다.(구체적으로는 2보다 높은−130 확률의 차분 특성이 없기 때문에 차분 암호해석은 128비트키 소진보다 어렵습니다).

ChaCha 변종

차차
ChaCha Cipher Quarter Round Function.svg
ChaCha 쿼터라운드 함수.네 개의 평행 복사가 한 바퀴를 이룬다.
일반
디자이너대니얼 번스타인
초판2008
유래살사20
관련 정보룸바20
암호 상세
키 사이즈128비트 또는 256비트
상태 크기512 비트
구조.ARX
라운드20
스피드인텔 Core 2 Duo의[4]: 2 경우 3.95 cpb

2008년에 Bernstein은 ChaCha 계열의 암호를 발표했는데, 이 암호는 라운드당 확산률을 높이면서 동등하거나 약간 더 나은 [17]성능을 달성하는 것을 목표로 하고 있습니다.또한 Aumasson 등의 논문은 ChaCha를 공격하여 복잡도139 2의 ChaCha6와 복잡도 2의248 ChaCha7의 256비트에 대해 ChaCha6를 1라운드 적게 달성하지만 공격이 128비트의107 ChaCha7을 [3]파괴하지 못한다고 주장한다.

ChaCha의 초기 상태는 Salsa20의 초기 상태와 비슷하지만 몇 가지 차이가 있습니다.ChaCha의 초기 상태는 128비트 상수, 256비트 키, 32비트 카운터 및 96비트 난스를 포함하며 32비트 워드의 4×[18]4 매트릭스로 배열됩니다.ChaCha는 또한 일부 단어를 초기 상태로 다시 배열합니다.

ChaCha의 초기 상태
"expa" 'nd 3' '2바이' "tek"
열쇠 열쇠 열쇠 열쇠
열쇠 열쇠 열쇠 열쇠
계산대 난스 난스 난스

상수는 Salsa20('확장 32바이트 k')과 동일합니다.ChaCha가 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의 분기 라운드는 각 단어를 한 번만 업데이트합니다.또한 ChaCha 쿼터 라운드는 더 빠르게 변화합니다.평균적으로 입력 비트 1개를 변경한 후 Salsa20 쿼터 라운드는 8개의 출력 비트를 변경하고 ChaCha는 12.5개의 출력 [4]비트를 변경합니다.

ChaCha 쿼터 라운드는 Salsa20 쿼터 라운드와 동일한 수의 추가, xor 및 비트가 회전하지만 회전 중 2개가 8의 배수이기 때문에 x86을 [19]비롯한 일부 아키텍처에서 약간의 최적화가 가능합니다.또한 입력 포맷은 Salsa20에 대해 발견된 효율적인 SSE 구현 최적화를 지원하도록 재배치되었습니다.열과 행 사이를 번갈아가며 반올림하는 대신 열과 [4]: 4 대각선을 따라 수행됩니다.Salsa20과 마찬가지로 ChaCha는 16개의 32비트 단어를 4×4 매트릭스로 배열합니다.매트릭스 요소를 0에서 15까지 색인화하면

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

그리고 ChaCha의 더블 라운드는 다음과 같습니다.

 // 홀수 라운드  QR(0, 4,  8, 12) // 첫 번째 열  QR(1, 5,  9, 13) // 두 번째 열  QR(2, 6, 10, 14) // 세 번째 열  QR(3, 7, 11, 15) // 네 번째 열  // 짝수 라운드  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은 더블 [20]라운드를 10회 반복합니다.C/C++에서의 실장은 다음과 같습니다.

#control ROTL(a, b)((a) < (b) (a) >> (32 - (b)))) #정의 QR(a, b, c, d) (\) a += b, d ^= a, d = R = (d,16), \ c += d, b ^= c, b = R = (b,12), \ a += b, d ^= a, d = R = (d, 8), \ c += d, b ^= c, b = R = (b, 7) #ROUND 20의 정의   무효 차차_블록(uint32_t 나가.[16], uint32_t 컨스턴트 [16]) {  인트 i;  uint32_t x[16];   위해서 (i = 0; i < > 16; ++i)    x[i] = [i];  // 10루프 × 2라운드/루프 = 20라운드  위해서 (i = 0; i < > 라운드; 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  }  위해서 (i = 0; i < > 16; ++i)   나가.[i] = x[i] + [i]; } 

ChaCha는 BLAKE 해시 함수의 기초이며, 더 빠른 후속 BLAKE2 및 BLAKE3이며, NIST 해시 함수 경쟁사의 최종 후보입니다.또한 16개의 64비트 워드(1024비트 상태)와 그에 따라 조정된 회전 상수를 사용하여 배리언트를 정의합니다.

XChaCha

Bernstein에 의해 발표되지는 않았지만 Xsalsa20의 보안 증명은 바로 유사한 XChaCha 암호로 확장됩니다.키와 난스의 처음 128비트(입력 워드 12~15)를 사용하여 ChaCha 입력 블록을 형성한 다음 블록 연산(최종 덧셈 제외)을 수행합니다.출력 워드 0 ~ 3 및 12 ~ 15(입력 키 이외의 워드에 대응하는 워드)는 일반 ChaCha(난스의 마지막 64비트 및 블록카운터의 [21]64비트 포함)에 사용되는 키를 형성합니다.

ChaCha20 도입

구글은 번스타인의 Poly1305 메시지 인증 코드와 함께 ChaCha20을 SPDY로 선택했으며,[22] 이는 TLS over TCP를 대체하기 위한 것이었다.이 과정에서 두 알고리즘을 결합한 새로운 인증 암호화 구성인 ChaCha20-Poly1305를 제안했다.ChaCha20 및 Poly1305는 현재 SPDY를 대체하고 HTTP/[23][24]3에서 사용됩니다.

구글이 TLS를 채택한 직후, ChaCha20 알고리즘과 Poly1305 알고리즘 모두 새로운 용도로 사용되었습니다.chacha20-poly1305@openssh.com이후 OpenSSH는 [25][26]컴파일 시간 [27]옵션을 통해 OpenSSL에 대한 의존을 피할 수 있게 되었습니다.

ChaCha20은 또한,arc4random 고장난 RC4 대신 FreeBSD,[28] OpenBSD [29]NetBSD[30] 운영체제에서는 난수 생성기를, [32][33]커널의 CSPRNG 서브루틴에서는 DragonFly BSD에서[31] 난수 생성기를 사용합니다.버전 4.8 이후 Linux 커널은 ChaCha20 알고리즘을 사용하여 논블로킹 /dev/urandom [34][35][36]디바이스용 데이터를 생성합니다.

ChaCha20 구현 레퍼런스는 다음에서 공개되었습니다. RFC7539.IETF의 구현처럼/그것이 암호로 보잘 것 없는(둘 다 cryptographer는 128비트 nonce로 볼 수 있었던 목록),지만 인터페이스96-bit nonce및 32비트 블록은 알고리즘 수정되는 이름이 바뀌지 않죠 counter,[37]에 64비트 nonce및 64비트 블록 계수기를 변경하여 번스타인의 발행된 알고리즘 수정했다. change는 개발자들에게 혼란의 원인이 될 수 있습니다.블록 카운터가 감소하기 때문에 IETF의 배리언트에 의해 안전하게 암호화할 수 있는 최대 메시지32 길이는 64바이트(256 GiB)의 2블록입니다.RFC7539에서는 파일이나 디스크 암호화 등 이 기능이 충분하지 않은 어플리케이션에 대해 64비트 난스를 사용하는 원래의 알고리즘을 사용할 것을 제안하고 있습니다.

IKE 및 IPsec에서의 ChaCha20 사용은 RFC 7634에서 표준화를 위해 제안되고 있습니다.TLS에서의 사용 표준화에 관한 제안서는 RFC 7905에 게재되어 있습니다.

ChaCha20은 일반적으로 CPU에 AES 액셀러레이션 기능이 없는 시스템(x86 프로세서용 AES 명령 세트 등)에서 보다 일반적인 AES(Advanced Encryption Standard) 알고리즘보다 뛰어난 성능을 제공합니다.그 결과, ARM 기반 CPU를 [38][39]주로 사용하는 모바일 장치와 관련된 특정 사용 사례에서 ChaCha20이 AES보다 선호될 수 있습니다.

2018년에 RFC 7539는 RFC 8439[40]의해 폐지되었습니다.

ChaCha20은 프로토콜 버전 [41]1에서 WireGuard VPN 시스템에서 사용되는 전용 알고리즘입니다.

「 」를 참조해 주세요.

  • Spec – NSA가 개발한 애드 로테이트 xor 암호
  • ChaCha20-Poly1305 – ChaCha20과 Poly1305 MAC을 조합한AED 스킴

메모들

  1. ^ 작업의 대부분이 반복적인 라운드로 이루어지기 때문에 라운드의 수는 퍼포먼스에 반비례합니다.즉, 라운드 수를 절반으로 줄이면 성능이 약 2배 향상됩니다.따라서 축소된 원형 변형은 상당히 빠릅니다.

레퍼런스

  1. ^ a b Daniel J. Bernstein (2007-12-24). "The Salsa20 family of stream ciphers" (PDF). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  2. ^ Daniel J. Bernstein (2013-05-16). "Salsa 20 speed; Salsa20 software".
  3. ^ a b c d Jean-Philippe Aumasson, Simon Fischer, Shahram Khazaei, Willi Meier, and Christian Rechberger (2008-03-14). "New Features of Latin Dances" (PDF). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)CS1 maint: 작성자 파라미터 사용(링크)
  4. ^ a b c d Bernstein, Daniel (28 January 2008), ChaCha, a variant of Salsa20 (PDF), retrieved 2018-06-03
  5. ^ Daniel J. Bernstein (2013-05-16). "Snuffle 2005: the Salsa20 encryption function".
  6. ^ "Salsa20: Software speed". 2007-05-11.
  7. ^ Daniel J. Bernstein. "Extending the Salsa20 nonce" (PDF). Retrieved 2017-08-22.
  8. ^ "Salsa20/12 ECRYPT II Page". Retrieved 2017-08-22.
  9. ^ "The eSTREAM Project: End of Phase 2". eSTREAM. 2008-04-29.
  10. ^ Hongjun Wu (2007-03-30). "eSTREAM PHASE 3: End of Phase 1". eSTREAM.
  11. ^ "eSTREAM: Short Report on the End of the Second Phase" (PDF). eSTREAM. 2007-03-26.
  12. ^ Paul Crowley (2006-02-09). "Truncated differential cryptanalysis of five rounds of Salsa20".
  13. ^ Simon Fischer, Willi Meier, Côme Berbain, Jean-François Biasse , M. J. B. Robshaw (2006). "Non-randomness in eSTREAM Candidates Salsa20 and TSC-4". Progress in Cryptology - INDOCRYPT 2006. Indocrypt 2006. Lecture Notes in Computer Science. Vol. 4329. pp. 2–16. CiteSeerX 10.1.1.121.7248. doi:10.1007/11941378_2. ISBN 978-3-540-49767-7.{{cite book}}: CS1 maint: 작성자 파라미터 사용(링크)
  14. ^ Yukiyasu Tsunoo, Teruo Saito, Hiroyasu Kubo, Tomoyasu Suzaki and Hiroki Nakashima (2007-01-02). "Differential Cryptanalysis of Salsa20/8" (PDF). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)CS1 maint: 작성자 파라미터 사용(링크)
  15. ^ Zhenqing Shi, Bin Zhang, Dengguo Feng, Wenling Wu (2012). "Improved Key Recovery Attacks on Reduced-Round Salsa20 and ChaCha". Information Security and Cryptology – ICISC 2012. ICISC'12 Proceedings of the 15th International Conference on Information Security and Cryptology. Lecture Notes in Computer Science. Vol. 7839. pp. 337–351. doi:10.1007/978-3-642-37682-5_24. ISBN 978-3-642-37681-8.{{cite book}}: CS1 maint: 작성자 파라미터 사용(링크)
  16. ^ Nicky Mouha; Bart Preneel (2013). "Towards Finding Optimal Differential Characteristics for ARX: Application to Salsa20" (PDF). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  17. ^ Daniel J. Bernstein (2008-04-25). "The ChaCha family of stream ciphers".
  18. ^ Nir, Yoav; Langley, Adam (May 2, 2021). "ChaCha20 and Poly1305 for IETF Protocols". Internet Engineering Task Force. Archived from the original on May 2, 2021. Retrieved May 2, 2021.
  19. ^ Neves, Samuel (2009-10-07), Faster ChaCha implementations for Intel processors, archived from the original on 2017-03-28, retrieved 2016-09-07, two of these constants are multiples of 8; this allows for a 1 instruction rotation in Core2 and later Intel CPUs using the pshufb instruction
  20. ^ Y. Nir (Check Point), A. Langley (Google Inc.) (May 2015). "ChaCha20 and Poly1305 for IETF Protocols: RFC 7539". {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)CS1 maint: 작성자 파라미터 사용(링크)
  21. ^ Arciszewski, Scott (10 January 2020). "XChaCha: eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305". tools.ietf.org.
  22. ^ "Do the ChaCha: better mobile performance with cryptography". The Cloudflare Blog. 2015-02-23. Retrieved 2021-07-13.
  23. ^ Thomson, Martin; Turner, Sean (May 2021). "RFC 9001". datatracker.ietf.org. Retrieved 2021-07-13.
  24. ^ Bishop, Mike (2 February 2021). "draft: IETF QUIC HTTP". datatracker.ietf.org. Retrieved 2021-07-13.
  25. ^ Miller, Damien (2016-05-03). "ssh/PROTOCOL.chacha20poly1305". Super User's BSD Cross Reference: PROTOCOL.chacha20poly1305. Retrieved 2016-09-07.
  26. ^ Murenin, Constantine A. (2013-12-11). Unknown Lamer (ed.). "OpenSSH Has a New Cipher — Chacha20-poly1305 — from D.J. Bernstein". Slashdot. Retrieved 2016-09-07.
  27. ^ Murenin, Constantine A. (2014-04-30). Soulskill (ed.). "OpenSSH No Longer Has To Depend On OpenSSL". Slashdot. Retrieved 2016-09-07.
  28. ^ "Revision 317015". 2017-04-16. Retrieved 2018-03-16. Replace the RC4 algorithm for generating in-kernel secure random numbers with Chacha20
  29. ^ guenther (Philip Guenther), ed. (2015-09-13). "libc/crypt/arc4random.c". Super User's BSD Cross Reference: arc4random.c. Retrieved 2016-09-07. ChaCha based random number generator for OpenBSD.
  30. ^ riastradh (Taylor Campbell), ed. (2016-03-25). "libc/gen/arc4random.c". Super User's BSD Cross Reference: arc4random.c. Retrieved 2016-09-07. Legacy arc4random(3) API from OpenBSD reimplemented using the ChaCha20 PRF, with per-thread state.
  31. ^ "kern/subr_csprng.c". Super User's BSD Cross Reference: subr_csprng.c. 2015-11-04. Retrieved 2016-09-07. chacha_encrypt_bytes
  32. ^ "ChaCha Usage & Deployment". 2016-09-07. Retrieved 2016-09-07.
  33. ^ "arc4random(3)". NetBSD Manual Pages. 2014-11-16. Archived from the original on 2020-07-06. Retrieved 2016-09-07.
  34. ^ Corbet, Jonathan. "Replacing /dev/urandom". Linux Weekly News. Retrieved 2016-09-20.
  35. ^ "Merge tag 'random_for_linus' of git.kernel.org/pub/scm/linux/kernel/git/tytso/random". Linux kernel source tree. Retrieved 2016-09-20. random: replace non-blocking pool with a Chacha20-based CRNG
  36. ^ Michael Larabel (2016-07-25). "/dev/random Seeing Improvements For Linux 4.8". Phoronix. Retrieved 2016-10-03.
  37. ^ "ChaCha20 and Poly1305 for IETF protocols" (PDF). Retrieved 2017-08-07. Changes from regular ChaCha. The nonce: block sequence number split was changed from 64:64 to 96:32
  38. ^ "What's the appeal of using ChaCha20 instead of AES?". Cryptography Stack Exchange. 2016-04-12.
  39. ^ "AES-NI SSL Performance Study @ Calomel.org".
  40. ^ RFC 7539의 헤더.
  41. ^ "Protocol and Cryptography". WireGuard. Jason A. Donenfeld. Retrieved 4 July 2018.

외부 링크