Noise 프로토콜은 간단하고 안전한 암호화 통신을 위해 설계된 현대적인 핸드셰이크 프레임워크이다.
-
Noise protocol framework는 핸드셰이크의 모든 협의를 피함으로써 TLS의 런타임 복잡성을 제거한 대안이다.
- TLS의 복잡한 협상 로직(cipher suite 선택, 프로토콜 버전 협상 등)을 제거하여 구현을 단순화한다.
- 사전에 정의된 패턴을 사용하므로 프로토콜 흐름이 명확하고 예측 가능하다.
-
노이즈를 실행하는 클라이언트와 서버는 분기하지 않는 선형 프로토콜을 따른다.
- TLS는 핸드셰이크 메시지에 포함된 정보에 따라 다양한 경로를 취할 수 있다(조건부 분기).
- Noise는 미리 정의된 패턴을 따르므로 실행 흐름이 선형적이고 단순하다.
- 이는 구현의 정확성을 높이고 보안 검증을 용이하게 한다.
핸드셰이크 패턴
Section titled “핸드셰이크 패턴”Noise 프로토콜 프레임워크는 다양한 핸드셰이크 패턴을 제공한다.
패턴 이름 규칙
Section titled “패턴 이름 규칙”패턴 이름은 다음 형태로 표기된다:
- 첫 글자: 초기자(Initiator, 클라이언트)의 인증 상태
- 둘째 글자: 응답자(Responder, 서버)의 인증 상태
N: 인증 없음(No authentication)K: 사전에 알려진 정적 키(Known static key)I: 즉시 전송되는 정적 키(Immediate static key)P: 예약됨(Pre-shared PSK)
주요 패턴들
Section titled “주요 패턴들”NN (No authentication) 패턴
Section titled “NN (No authentication) 패턴”NN: -> e <- e, ee초기자의 첫 번째 메시지 (-> e):
- 클라이언트가 임시 키 쌍을 생성한다.
- 임시 공개 키를 서버로 보낸다.
- 이 메시지는 인증되지 않으므로 Man-in-the-Middle 공격에 취약하다.
응답자의 응답 메시지 (<- e, ee):
- 서버가 자신의 임시 키 쌍을 생성한다.
- 임시 공개 키를 클라이언트에 보낸다.
- 클라이언트의 임시 공개 키와 자신의 임시 공개 키를 사용하여 DH(Diffie-Hellman) 키 교환을 수행한다.
- 결과로 생성된 공유 시크릿으로 이후 통신을 암호화한다.
클라이언트의 처리:
- 서버로부터 받은 임시 공개 키를 사용하여 동일한 DH 키 교환을 수행한다.
- 이후 모든 통신은 암호화된다.
IK (Initiator public key known) 패턴
Section titled “IK (Initiator public key known) 패턴”IK: <- s ... -> e, es, s, ss <- e, ee, se-
사전 조건
- 클라이언트가 서버의 정적 공개 키를 사전에 알고 있어야 한다.
- 서버도 클라이언트의 정적 공개 키를 사전에 알고 있어야 한다.
-
핸드셰이크 흐름
-
클라이언트의 첫 메시지:
e: 임시 공개 키 전송es: 클라이언트 임시키 × 서버 정적 키로 DHs: 클라이언트 정적 공개 키 전송ss: 클라이언트 정적키 × 서버 정적 키로 DH
-
서버의 응답
e: 서버 임시 공개 키 전송ee: 양쪽 임시 키로 DHse: 서버 임시키 × 클라이언트 정적 키로 DH
-
상호 인증이 가능하며, 1-RTT(1 Round Trip)로 통신을 시작할 수 있다.
XX (Mutual authentication) 패턴
Section titled “XX (Mutual authentication) 패턴”XX: -> e <- e, ee, s, es -> s, ss- 양쪽 모두 인증이 필요하지만 사전 설정(pre-shared keys)이 필요 없다.
- 가장 유연한 패턴 중 하나이다.
- 3-RTT 핸드셰이크가 필요하다.
보안
- 상호 인증을 제공하므로 양쪽이 신뢰할 수 있는 상대임을 확인할 수 있다.
- 순방향 보안이 보장된다.
Noise는 다양한 유형의 핸드셰이크를 지정하기 위해 정의된 토큰의 조합을 사용한다.
기본 토큰
-
e: Ephemeral key (임시 공개 키)- 일회용 임시 키 쌍을 생성하고 공개 키를 전송한다.
- 전향 보안을 제공하는 핵심 요소이다.
-
s: Static key (정적 공개 키)- 장기적으로 사용되는 정적 키 쌍의 공개 키를 전송한다.
- 상호 인증에 사용된다.
DH 토큰
-
ee: ephemeral-to-ephemeral DH- 양쪽의 임시 공개 키를 사용하여 공유 시크릿을 생성한다.
- 세션 키 유도에 사용된다.
-
es: ephemeral-to-static DH- 한쪽의 임시 공개 키와 상대의 정적 공개 키를 사용한다.
- 클라이언트 임시키 × 서버 정적 키: 서버 인증 + 전향 보안 제공
- 서버 임시키 × 클라이언트 정적 키: 클라이언트 인증 + 전향 보안 제공
-
ss: static-to-static DH- 양쪽의 정적 공개 키를 사용한다.
- 장기적인 통신 보안에 사용된다.
- 정적 키가 유출되면 이 DH 결과도 위협받을 수 있다.
-
se: static-to-ephemeral DHes의 역순으로 한쪽의 정적 공개 키와 상대의 임시 공개 키를 사용한다.
- WireGuard: Noise를 핵심으로 사용하는 VPN 프로토콜
- WhatsApp: 메시지 암호화에 Noise를 기반으로 한 Signal 프로토콜 사용
- Slack: 메시지 보안에 암호화 기법 적용
- Lightning Network: Bitcoin의 라이트닝 네트워크 프로토콜에 사용
- https://noiseprotocol.org
- 리얼월드 암호학 - 데이비드 웡