Shadowsocks 설명서

AEAD

AEAD Authenticated Encryption with Associated Data의 약자입니다. AEAD 암호는 기밀성, 무결성 및 신뢰성을 동시에 제공합니다. 최신 하드웨어에서 뛰어난 성능과 전력 효율성을 제공합니다. 사용자는 가능한 한 AEAD 암호를 사용해야 합니다.

다음 AEAD 암호가 권장됩니다. 준수하는 Shadowsocks 구현은 AEAD_CHACHA20_POLY1305를 지원해야 합니다. 하드웨어 AES 가속이 있는 장치에 대한 구현은 AEAD_AES_128_GCM 및 AEAD_AES_256_GCM도 구현해야 합니다.

 

 

 

성함

별명

키 크기

소금 크기

난스 크기

태그 크기

AEAD_CHACHA20_POLY1305

chacha20-ietf-폴리1305

32

32

12

16

AEAD_AES_256_GCM

aes-256-gcm

32

32

12

16

AEAD_AES_128_GCM

aes-128-gcm

16

16

12

16

를 참조하십시오 IANA AEAD 레지스트리 명명 체계 및 사양.

키 파생

마스터 키는 사용자가 직접 입력하거나 암호에서 생성할 수 있습니다.

HKDF_SHA1 비밀 키, 비비밀 솔트, 정보 문자열을 가져와서 입력한 비밀 키가 약하더라도 암호학적으로 강한 하위 키를 생성하는 함수입니다.

HKDF_SHA1(key, salt, info) => 하위 키

정보 문자열은 생성된 하위 키를 특정 애플리케이션 컨텍스트에 바인딩합니다. 이 경우 따옴표 없이 "ss-subkey" 문자열이어야 합니다.

HKDF_SHA1을 사용하여 미리 공유한 마스터 키에서 세션별 하위 키를 파생합니다. 솔트는 사전 공유된 마스터 키의 전체 수명 동안 고유해야 합니다.

인증된 암호화/복호화

AE_encrypt는 비밀 키, 비비밀 nonce, 메시지를 취하여 암호문과 인증 태그를 생성하는 기능입니다. Nonce는 각 호출에서 지정된 키에 대해 고유해야 합니다.

AE_encrypt(key, nonce, message) => (암호문, 태그)

 

AE_decrypt는 비밀 키, non-secret nonce, 암호문, 인증 태그를 취하여 원본 메시지를 생성하는 기능입니다. 입력 중 하나라도 변조되면 암호 해독에 실패합니다.

AE_decrypt(key, nonce, ciphertext, tag) => 메시지

TCP

AEAD 암호화된 TCP 스트림은 무작위로 생성된 소금으로 시작하여 세션별 하위 키를 파생한 다음 임의의 수의 암호화된 청크가 이어집니다. 각 청크의 구조는 다음과 같습니다.

[암호화된 페이로드 길이][길이 태그][암호화된 페이로드][페이로드 태그]

 

페이로드 길이는 2x0FFF로 제한되는 3바이트 빅 엔디안 부호 없는 정수입니다. 상위 16비트는 예약되어 있으며 1024으로 설정해야 합니다. 따라서 페이로드는 1*XNUMX – XNUMX바이트로 제한됩니다.

첫 번째 AEAD 암호화/암호 해독 작업은 0부터 시작하는 카운팅 nonce를 사용합니다. 각 암호화/암호 해독 작업 후 nonce는 부호 없는 little-endian 정수인 것처럼 XNUMX씩 증가합니다. 각 TCP 청크에는 두 개의 AEAD 암호화/암호 해독 작업이 포함됩니다. 하나는 페이로드 길이용이고 다른 하나는 페이로드용입니다. 따라서 각 청크는 nonce를 두 번 증가시킵니다.

TCP

AEAD 암호화된 TCP 스트림은 무작위로 생성된 소금으로 시작하여 세션별 하위 키를 파생한 다음 임의의 수의 암호화된 청크가 이어집니다. 각 청크의 구조는 다음과 같습니다.

[암호화된 페이로드 길이][길이 태그][암호화된 페이로드][페이로드 태그]

 

페이로드 길이는 2x0FFF로 제한되는 3바이트 빅 엔디안 부호 없는 정수입니다. 상위 16비트는 예약되어 있으며 1024으로 설정해야 합니다. 따라서 페이로드는 1*XNUMX – XNUMX바이트로 제한됩니다.

첫 번째 AEAD 암호화/암호 해독 작업은 0부터 시작하는 카운팅 nonce를 사용합니다. 각 암호화/암호 해독 작업 후 nonce는 부호 없는 little-endian 정수인 것처럼 XNUMX씩 증가합니다. 각 TCP 청크에는 두 개의 AEAD 암호화/암호 해독 작업이 포함됩니다. 하나는 페이로드 길이용이고 다른 하나는 페이로드용입니다. 따라서 각 청크는 nonce를 두 번 증가시킵니다.

5일 무료 평가판 시작