암호학 심층 분석
Nudge가 메시지를 보호하는 방법 (그리고 왜 중요한가)
Nudge는 고위험 커뮤니케이션을 위해 구축되었습니다: 엔드투엔드 암호화된 메시징 및 통화로, 적대자와 능력이 진화해도 안전하게 유지되도록 설계되었습니다. 이 페이지는 모든 암호화 기본 요소, Swift 패키지 및 함께 작동하는 방식을 포함하여 상세하고 기술적인 수준에서 암호화를 설명합니다.
메시지 콘텐츠는 기기에서 암호화되며 의도된 수신자만 복호화할 수 있습니다. 서버는 데이터를 중계할 수 있지만 읽을 수는 없습니다.
향후 기기 키가 손상되더라도 메시지 키가 지속적으로 진화하기 때문에 과거 메시지는 보호된 상태로 유지됩니다.
손상 후 프로토콜은 새로운 비밀이 도입됨에 따라 "치유"될 수 있어 공격자가 트래픽을 계속 읽을 수 있는 시간을 제한합니다.
Swift 패키지 및 아키텍처
Nudge의 암호화 스택은 안전한 포스트 퀀텀 메시징을 제공하는 데 각각 특정 역할을 하는 여러 오픈소스 Swift 패키지로 구성됩니다.
PostQuantumSolace
github.com/needletails/post-quantum-solace
모든 암호화 작업을 조정하는 고수준 세션 관리 SDK. PostQuantumSolace는 세션 생성, 메시지 전송, 기기 관리 및 키 순환 처리를 위한 PQSSession API를 제공합니다. 전방 비밀성 및 손상 후 보안을 갖춘 엔드투엔드 암호화 메시징을 제공하기 위해 Double Ratchet 프로토콜 실행과 포스트 퀀텀 키 교환을 결합합니다.
의존성: DoubleRatchetKit, NeedleTailLogger, NeedleTailAlgorithms
DoubleRatchetKit
github.com/needletails/double-ratchet-kit
Post-Quantum X3DH (PQXDH) 통합을 사용하여 Double Ratchet 알고리즘을 구현합니다. 이 패키지는 전방 비밀성 및 손상 후 보안을 위한 핵심 프로토콜을 제공합니다. 하이브리드 키 교환(Curve25519 + MLKEM1024), 메시지 키 유도, 헤더 암호화 및 안전한 메시징 세션을 위한 상태 관리를 처리합니다. DoubleRatchetStateManager 액터는 래칫 상태를 관리하고 스레드 안전 암호화/복호화 작업을 제공합니다.
의존성: NeedleTailCrypto, NeedleTailLogger, BinaryCodable
NeedleTailCrypto
github.com/needletails/needletail-crypto
Swift Crypto (swift-crypto) 및 CryptoKit을 둘러싼 포괄적인 암호화 래퍼. NeedleTailCrypto는 키 생성(Curve25519, P256, P384, P521, MLKEM1024), 대칭 암호화/복호화(AES-GCM), 키 합의(ECDH), 키 유도(HKDF) 및 Apple 플랫폼에서 Keychain 및 Secure Enclave를 통한 안전한 키 저장을 위한 고수준 API를 제공합니다. 이 패키지는 저수준 암호화 작업을 추상화하고 일관되고 프로덕션 준비된 인터페이스를 제공합니다.
의존성: swift-crypto (Apple), swift-collections
NeedleTailAlgorithms
github.com/needletails/needletail-algorithms
암호화 스택 전체에서 사용되는 알고리즘 구현을 제공하며, 암호화 작업을 위한 데이터 구조 및 유틸리티를 포함합니다. 이 패키지에는 PostQuantumSolace 및 기타 NeedleTails 패키지에서 사용되는 공유 알고리즘 구성 요소가 포함되어 있습니다.
NeedleTailLogger
github.com/needletails/needletail-logger
디버깅, 모니터링 및 감사 추적을 위해 암호화 스택 전체에서 사용되는 로깅 프레임워크. 구성 가능한 로그 수준 및 스레드 안전 로깅 작업을 사용한 구조화된 로깅을 제공합니다.
BinaryCodable
github.com/needletails/binary-codable
암호화 데이터 구조를 위한 효율적인 이진 인코딩 및 디코딩을 제공합니다. 컴팩트하고 플랫폼 독립적인 형식으로 키, 메시지 및 프로토콜 상태를 직렬화하는 데 사용됩니다.
swift-crypto
github.com/apple/swift-crypto
기본 암호화 기본 요소를 제공하는 Apple의 크로스 플랫폼 암호화 라이브러리. 이 패키지는 MLKEM1024 (Kyber), Curve25519, AES-GCM, SHA-256, SHA-512, HKDF, HMAC 및 기타 표준 알고리즘을 구현합니다. NeedleTailCrypto 및 전체 스택을 구동하는 저수준 암호화 엔진입니다.
암호화 기본 요소
Nudge는 특정 보안 속성, 성능 특성 및 고전적 공격과 양자 공격 모두에 대한 저항을 위해 선택된 신중하게 선택된 암호화 기본 요소 세트를 사용합니다.
MLKEM-1024 (Kyber-1024)
무엇인가: MLKEM-1024는 Kyber 알고리즘을 기반으로 한 NIST 표준화 포스트 퀀텀 키 캡슐화 메커니즘(KEM)입니다. 고전적 컴퓨터와 양자 컴퓨터 모두의 공격에 저항하도록 설계되었습니다.
무엇을 하는가: MLKEM-1024는 두 당사자가 안전하지 않은 채널을 통해 공유 비밀 키를 설정할 수 있게 합니다. 한 당사자가 공개/개인 키 쌍을 생성하고 다른 당사자가 공개 키를 사용하여 공유 비밀을 캡슐화합니다. 개인 키 보유자는 그 다음 비밀을 디캡슐화할 수 있습니다. 이것은 양자 컴퓨터를 가진 적대자에 대해서도 보안을 제공합니다.
왜 중요한가: 고전적 키 교환 알고리즘(RSA, ECC 등)은 대규모 양자 컴퓨터에 의해 깨질 것입니다. MLKEM-1024는 "지금 수확하고 나중에 복호화" 보호를 제공합니다—공격자가 오늘 암호화된 트래픽을 기록하더라도 향후 양자 컴퓨터를 사용하여 복호화할 수 없습니다.
구현: swift-crypto (Apple)에서 제공, PQXDH 핸드셰이크에서 사용
Curve25519
무엇인가: Curve25519는 타원 곡선 Diffie-Hellman (ECDH) 키 합의를 위해 설계된 고성능 타원 곡선입니다. 128비트 보안을 제공하며 현대 암호화 시스템에서 널리 배포됩니다.
무엇을 하는가: 두 당사자가 공개 키를 교환하여 공유 비밀을 설정할 수 있게 합니다. 각 당사자는 동일한 공유 비밀을 유도하기 위해 개인 키를 상대방의 공개 키와 결합합니다. Curve25519는 Nudge에서 키 합의(ECDH)와 디지털 서명(Ed25519) 모두에 사용됩니다.
왜 중요한가: 양자 저항적이지는 않지만 Curve25519는 고전적 공격자에 대해 즉각적인 보안을 제공하며 매우 빠릅니다. Nudge의 하이브리드 PQXDH 설계에서 Curve25519는 오늘의 보안을 제공하는 반면 MLKEM-1024는 미래의 양자 위협에 대한 보안을 제공합니다. 공격자가 세션을 손상시키려면 둘 다 깨져야 합니다.
구현: swift-crypto (Apple)에서 제공, PQXDH 핸드셰이크 및 기기 키 서명에서 사용
HKDF (HMAC 기반 키 유도 함수)
무엇인가: HKDF는 단일 공유 비밀 또는 고엔트로피 입력에서 안전하게 여러 키를 유도하는 키 유도 함수입니다. 기본 기본 요소로 HMAC(해시 기반 메시지 인증 코드)를 사용합니다.
무엇을 하는가: 공유 비밀(키 교환에서)을 가져와 암호화, 인증 및 기타 용도를 위한 목적별 키를 유도합니다. HKDF는 다른 목적에 대해 다른 키가 유도되도록 보장하기 위해 솔트(도메인 분리용) 및 선택적 컨텍스트 정보를 사용합니다. Nudge는 PQXDH 공유 비밀에서 세션 키를 유도하기 위해 SHA-512를 사용한 HKDF를 사용합니다.
왜 중요한가: 키 유도는 다른 컨텍스트 간의 키 재사용을 방지하며, 이는 보안에 중요합니다. 각 유도된 키는 암호학적으로 독립적이므로 하나의 키를 손상시켜도 다른 키에 영향을 주지 않습니다. HKDF는 또한 Double Ratchet 프로토콜에서 체인 키에서 메시지 키를 유도하는 데 사용됩니다.
구현: swift-crypto의 HKDF<SHA512> 및 HKDF<SHA256>, 프로토콜 전체에서 사용
AES-GCM (고급 암호화 표준 - Galois/카운터 모드)
무엇인가: AES-GCM은 단일 작업에서 기밀성(암호화)과 무결성(인증)을 모두 제공하는 인증 암호화 알고리즘입니다. Galois/카운터 모드에서 AES 블록 암호를 사용합니다.
무엇을 하는가: 메시지 콘텐츠를 암호화하고 메시지가 변조되지 않았음을 증명하는 인증 태그를 생성합니다. AES-GCM은 Nudge의 모든 메시지 페이로드를 암호화하는 데 사용되어 메시지가 공격자에 의해 읽히거나 수정될 수 없도록 보장합니다.
왜 중요한가: 인증 암호화는 도청과 변조를 모두 방지합니다. 공격자가 암호화된 메시지를 수정하면 인증 태그가 무효화되고 복호화가 실패합니다. Nudge는 256비트 보안을 제공하는 AES-256-GCM을 사용합니다.
구현: swift-crypto (Apple)에서 제공, NeedleTailCrypto를 통한 모든 메시지 암호화에 사용
SHA-256 및 SHA-512 (보안 해시 알고리즘)
무엇인가: SHA-256 및 SHA-512는 임의의 입력에서 고정 크기 출력(각각 256비트 및 512비트)을 생성하는 암호화 해시 함수입니다. 일방향 함수로 계산하기는 쉽지만 계산상 역전이 불가능합니다.
무엇을 하는가: 다양한 목적으로 암호화 스택 전체에서 사용됩니다: SHA-256은 Double Ratchet의 체인 키 유도를 위해 HMAC에서 사용되고, SHA-512는 PQXDH 공유 비밀에서 세션 키 유도를 위해 HKDF에서 사용되며, 둘 다 무결성 검증 및 키 유도에 사용됩니다.
왜 중요한가: 해시 함수는 기본 구성 요소입니다. 키가 결정론적으로 유도되고, 데이터 무결성을 검증할 수 있으며, 암호화 작업이 일관된 결과를 생성하도록 보장합니다. SHA-512는 키 유도 작업에 추가 보안 여유를 제공합니다.
구현: swift-crypto (Apple)에서 제공, HKDF, HMAC 및 키 유도에서 사용
HMAC (해시 기반 메시지 인증 코드)
무엇인가: HMAC는 비밀 키와 결합된 암호화 해시 함수(SHA-256 등)를 사용하여 메시지의 진정성과 무결성을 모두 검증하는 태그를 생성하는 메시지 인증 코드입니다.
무엇을 하는가: Nudge에서 HMAC-SHA256은 Double Ratchet 프로토콜에서 체인 키와 메시지 키를 유도하는 데 사용됩니다. 각 래칫 단계는 HMAC를 사용하여 키 체인을 진행시켜 키가 결정론적이고 안전하게 진화하도록 보장합니다.
왜 중요한가: HMAC는 키 유도가 안전하고 결정론적임을 보장합니다. 전방 비밀성을 제공하기 위해 Double Ratchet에서 광범위하게 사용되며, 각 메시지는 이전 키에서 유도된 고유 키를 사용하므로 하나의 키를 손상시켜도 과거 또는 미래 키가 드러나지 않습니다.
구현: swift-crypto의 HMAC<SHA256>, Double Ratchet 키 유도에서 사용
모두 함께 작동하는 방식
1) 포스트 퀀텀 핸드셰이크 (PQXDH)
두 사용자가 대화를 시작하면 Nudge는 하이브리드 키 교환을 수행합니다:
- Curve25519 ECDH: 양 당사자가 Curve25519 공개 키를 교환하고 타원 곡선 Diffie-Hellman을 사용하여 공유 비밀을 유도
- MLKEM-1024 캡슐화: 한 당사자가 다른 당사자의 MLKEM-1024 공개 키를 사용하여 공유 비밀을 캡슐화
- 비밀 결합: Curve25519 공유 비밀과 MLKEM-1024 공유 비밀이 연결됨
- HKDF 유도: HKDF-SHA512가 결합된 비밀에서 루트 키와 초기 체인 키를 유도
이 하이브리드 접근 방식은 고전적 공격자(Curve25519)와 양자 공격자(MLKEM-1024) 모두에 대한 보안을 보장합니다. 세션을 손상시키려면 둘 다 깨져야 합니다.
2) 지속적인 키 진화 (Double Ratchet)
핸드셰이크 후 Double Ratchet 프로토콜은 전방 비밀성을 제공합니다:
- 대칭 래칫: 각 메시지가 HMAC-SHA256을 사용하여 체인 키를 진행시키고 고유한 메시지 키를 유도
- 메시지 암호화: 메시지 키가 AES-256-GCM과 함께 사용되어 메시지 페이로드를 암호화
- DH 래칫: 주기적으로 새로운 Diffie-Hellman 키 교환이 루트 키를 업데이트하고 새로운 체인 키를 생성
- 키 순환: 이전 키가 폐기되어 전방 비밀성을 보장—현재 키를 손상시켜도 과거 메시지가 드러나지 않음
Double Ratchet는 각 메시지가 고유한 암호화 키를 사용하고 키가 지속적으로 진화하여 손상 후 보안을 제공하도록 보장합니다.
무엇이 암호화되는가 (그리고 무엇이 아닌가)
강력한 암호화가 메시지 콘텐츠를 보호합니다. 모든 메시징 시스템과 마찬가지로 일부 네트워크 수준 메타데이터(예: IP 라우팅)가 여전히 존재할 수 있습니다. Nudge의 스택은 트래픽 분석 신호를 줄이기 위한 암호화된 헤더와 같은 메타데이터 보호 기술도 지원합니다.
- 암호화됨: 메시지 콘텐츠, 세션 비밀, 민감한 메타데이터(지원되는 경우)
- 노출 감소: 헤더 암호화를 통한 카운터/키 식별자(해당되는 경우)
- 여전히 가능: 네트워크 조건에 따른 전송 수준 관찰(타이밍, 엔드포인트)
보안 속성
Nudge의 암호화 설계는 여러 보안 계층을 제공합니다:
- 포스트 퀀텀 보안: MLKEM-1024는 미래의 양자 공격으로부터 보호합니다
- 전방 비밀성: 현재 키가 손상되더라도 과거 메시지는 안전하게 유지됩니다
- 손상 후 보안: 세션은 키 손상에서 복구할 수 있습니다
- 인증 암호화: AES-GCM은 도청과 변조를 모두 방지합니다
- 메타데이터 보호: 헤더 암호화는 트래픽 분석을 줄입니다
프라이빗 Nudge 커뮤니티를 원하시나요?
NeedleTails는 프라이빗 배포, 거버넌스 제어 및 운영 책임이 필요한 조직을 위한 유료 서버 구현 서비스를 제공합니다.