더블 래칫 알고리즘

350px|섬네일|right|더블 래칫 알고리즘의 전체 래칫 단계. 키 유도 함수(KDF)가 래칫 메커니즘을 제공한다. 첫 번째 "래칫"은 대칭 루트 키에 적용되고, 두 번째 래칫은 비대칭 디피-헬먼(DH) 키에 적용된다.

암호학에서 **더블 래칫 알고리즘**(Double Ratchet Algorithm, 이전 명칭 **아홀로틀 래칫**)은 2013년 트레버 페린과 모시 말린스파이크가 개발한 키 관리 알고리즘이다. 이 알고리즘은 인스턴트 메신저를 위한 단대단 암호화를 제공하는 암호 프로토콜의 일부로 사용될 수 있다. 초기 키 합의 프로토콜 이후, 수명이 짧은 세션 키의 지속적인 갱신 및 유지를 관리한다. 디피-헬먼 키 교환(DH)에 기반한 소위 암호화 "래칫"과 해시 함수와 같은 키 유도 함수(KDF)에 기반한 래칫을 결합했기 때문에 더블 래칫이라고 불린다.

이 알고리즘은 메시지에 대한 전방향 보안과 전방향 키의 암묵적 재협상을 제공하며, 이러한 속성들로 인해 프로토콜의 이름이 붙여졌다.

이는 2025년 10월 기준으로 CRYSTALS-Kyber 양자 래칫을 갖춘 스파스 포스트 퀀텀 래칫(Sparse Post Quantum Ratchet, SPQR)으로 확장되어, 시그널 저자들이 **트리플 래칫**(Triple Ratchet)이라고 부르는 방식 내에서 양자 내성 전방향 보안 및 침해 후 보안 보장을 제공한다.

## 역사
더블 래칫 알고리즘은 2013년 트레버 페린과 오픈 위스퍼 시스템즈의 모시 말린스파이크에 의해 개발되었으며, 2014년 2월 시그널 프로토콜의 일부로 도입되었다. 더블 래칫 알고리즘의 설계는 오프더레코드 메시징(OTR)에서 도입된 DH 래칫을 기반으로 하며, 이를 사일런트 서클 인스턴트 메시징 프로토콜(Silent Circle Instant Messaging Protocol, SCIMP)을 모델로 한 대칭 키 래칫과 결합한 것이다. 이 래칫은 처음에 뛰어난 자가 치유 능력을 가진 멸종 위기종 수중 도롱뇽인 아홀로틀의 이름을 따서 명명되었다. 2016년 3월, 개발자들은 래칫과 전체 프로토콜을 더 잘 구별하기 위해 아홀로틀 래칫을 더블 래칫 알고리즘으로 개명했는데, 이는 일부 사람들이 시그널 프로토콜을 지칭할 때 아홀로틀이라는 이름을 사용했기 때문이다.

## 개요
alt=메커니즘이 한 방향으로만 움직일 수 있음을 보여주는 래칫이 움직이는 gif|섬네일|125px|기계적 래칫
더블 래칫 알고리즘은 오랫동안 단대단 암호화 시스템에서 공통적으로 제공되어 온 속성들을 갖추고 있다. 즉, 전송 경로 전체에서 콘텐츠를 암호화할 뿐만 아니라 원격 상대방에 대한 인증 및 메시지 조작에 대한 보호를 제공한다. DH 및 KDF 래칫의 하이브리드로서, 두 원칙의 여러 바람직한 기능을 결합한다. OTR 메시징으로부터는 전방향 보안 속성과 세션 키가 노출된 경우 자동으로 보안을 재확립하는 기능, 비밀이 유지되는 영구 메인 키가 노출되어도 유지되는 전방향 보안, 그리고 메시지 작성자에 대한 부인 가능 암호화 속성을 가져왔다. 또한 보조 KDF 래칫을 사용하여 원격 상대방과의 상호 작용 없이도 세션 키를 갱신할 수 있게 한다. 순서가 바뀐 메시지에 대해 다음 키들을 위험에 빠뜨리지 않고 세션 키를 보관할 수 있도록 추가적인 키 유도 단계가 수행된다.

이 알고리즘은 전송된 메시지의 재정렬, 삭제 및 재전송 공격을 감지하고, OTR 메시징과 비교하여 수동적 도청에 대한 전방향 보안 속성을 개선한다고 알려져 있다.

미리 생성된 일회용 키(프리키)의 보관을 위한 공개 키 기반 구조와 결합하면, 원격 상대방이 존재하지 않는 상태에서도 메시징 세션을 초기화할 수 있다(비동기 통신). 초기 키 교환 방법으로 트리픗 디피-헬먼 키 교환(3-DH)을 사용하면 부인 방지 속성이 향상된다. 더블 래칫 알고리즘, 프리키, 3-DH 핸드셰이크를 결합한 시그널 프로토콜이 그 예이다. 이 프로토콜은 기밀성, 무결성, 인증, 참여자 일관성, 목적지 검증, 전방향 보안, 후방향 보안(미래 보안), 인과관계 보존, 메시지 연결 불가능성, 메시지 부인, 참여 부인, 그리고 비동기성을 제공한다. 익명성 보존은 제공하지 않으며, 메시지 전달과 공개 키 자료 저장을 위한 서버를 필요로 한다.

## 작동 방식

클라이언트는 디피-헬먼(DH) 래칫을 사용하여 원격 상대방과 대화식으로 세션 키 자료를 갱신하려고 시도한다. 이것이 불가능할 경우, 클라이언트는 해시 래칫을 사용하여 독립적으로 세션 키를 갱신한다. 모든 메시지마다 클라이언트는 두 개의 해시 래칫(송신용 하나, 수신용 하나) 중 하나를 전진시킨다. 이 두 해시 래칫은 DH 래칫의 공통 비밀에서 시드(seed)를 얻는다. 동시에 클라이언트는 기회가 있을 때마다 원격 상대방에게 새로운 공개 DH 값을 제공하고, 상대방으로부터 새로운 DH 값이 도착할 때마다 DH 래칫을 전진시키려고 시도한다. 새로운 공통 비밀이 확립되는 즉시 새로운 해시 래칫이 초기화된다.

암호화 프리미티브로서 더블 래칫 알고리즘은 다음을 사용한다.
; DH 래칫용: Curve25519를 사용한 타원곡선 디피-헬먼(ECDH),
; 메시지 인증 코드(MAC, 인증)용: SHA-256 기반의 키 해시 메시지 인증 코드(HMAC),
; 대칭 암호화용: 고급 암호화 표준(AES), 부분적으로 PKCS&nbsp;#5에 따른 패딩이 있는 암호 블록 체인 모드(CBC) 및 부분적으로 패딩이 없는 카운터 모드(CTR),
; 해시 래칫용: HMAC.

## 응용 분야

다음은 더블 래칫 알고리즘 또는 그 커스텀 구현을 사용하는 애플리케이션 목록이다.

### 연합 네트워크
* 매트릭스 네트워크용 모든 클라이언트: 엘리먼트, GNOME Fractal
* OMEMO를 지원하는 XMPP 네트워크용 모든 클라이언트: ChatSecure, Conversations, Cryptocat (중단됨), Gajim, Movim, 공식 플러그인을 통한 Psi, 공식 플러그인을 통한 Psi+, 실험적 플러그인을 통한 피진 또는 Finch와 같은 libpurple 클라이언트, libpurple 플러그인 기반의 Xtra를 통한 Adium, 실험적 플러그인을 통한 Profanity.

### 중앙 집중식 네트워크
더블 래칫 알고리즘은 알고리즘 구현, 암호 프로토콜(알고리즘이 포함된), 또는 공식 애플리케이션의 관련 없는 부분에 결함을 도입하는 백도어에 대한 중앙 집중식 네트워크의 본질적인 취약성을 해결하려 하지는 않는다. 그럼에도 불구하고 다양한 중앙 집중식 네트워크의 여러 공식 클라이언트에 구현되었다.

* 페이스북 메신저
* G Data Secure Chat
* 구글 알로
* 메시지 (구글)
* Haven
* Pond
* 시그널
* Silent Phone
* 스카이프
* 바이버
* WhatsApp
* 와이어

## 내용주

## 각주

## 참고 자료

* 
* 
* 

## 외부 링크
* 오픈 위스퍼 시스템즈의 사양서(Specification)
* "Advanced cryptographic ratcheting", 모시 말린스파이크의 요약 설명
* Olm: 아파치 2.0 라이선스 하의 C++ 구현
* Vodozemac: 아파치 2.0 라이선스 하의 Olm 변형에 대한 Rust 구현
*  (해설)

분류:암호 알고리즘