시그널 프로토콜

**시그널 프로토콜**(Signal Protocol, 이전 명칭: **텍스트시큐어 프로토콜**, TextSecure Protocol)은 음성 및 인스턴트 메신저 대화에 단대단 암호화를 제공하는 비연합 암호화 프로토콜이다. 이 프로토콜은 2013년 오픈 위스퍼 시스템즈에서 개발되었으며 나중에 시그널이 된 오픈 소스 텍스트시큐어 앱에 도입되었다. 여러 사유 소프트웨어 응용 프로그램에서 이 프로토콜을 구현했으며, 예를 들어 "전 세계 10억 명 이상의 사람들의 대화"를 암호화한다고 알려진 WhatsApp이나 Google이 메시지 (구글) 앱 사용자 간의 일대일 대화에 RCS 기반 대화를 기본적으로 단대단 암호화하는 것 등이 있다. 페이스북 메신저 또한 선택적 "비밀 대화"에 이 프로토콜을 제공한다고 밝히고 있으며, 스카이프도 "비공개 대화"에 이 프로토콜을 사용한다.

이 프로토콜은 더블 래칫 알고리즘(Double Ratchet Algorithm), 미리 키(즉, 중앙 서버에 미리 업로드된 일회성 임시 공개 키), 그리고 3중 타원곡선 디피-헬먼 (3-DH) 핸드셰이크를 결합하고, Curve25519, AES-256, HMAC-SHA256을 기본요소로 사용한다.

## 역사
시그널 프로토콜의 개발은 2013년에 트레버 페린과 목시 말린스파이크 (오픈 위스퍼 시스템즈)에 의해 시작되었다. 프로토콜의 첫 번째 버전인 TextSecure v1은 오프 더 레코드 메시징(Off-the-record messaging, OTR)을 기반으로 했다.

2014년 2월 24일, 오픈 위스퍼 시스템즈는 Axolotl Ratchet으로 마이그레이션된 TextSecure v2를 출시했다. Axolotl Ratchet의 설계는 OTR에 의해 도입된 임시 키 교환을 기반으로 하며, 사일런트 서클 인스턴트 메시지 프로토콜(Silent Circle Instant Message Protocol, SCIMP)에 따라 모델링된 대칭 키 래칫과 결합한다. 주요 새 기능으로 비동기 통신("오프라인 메시지") 지원과 메시지 순서 왜곡에 대한 더 나은 복원력, 여러 참가자와의 대화에 대한 더 간단한 지원을 제공했다. Axolotl Ratchet은 비정상적인 자기 치유 능력을 가진 심각한 멸종 위기 수중 도롱뇽인 아홀로틀의 이름을 따서 명명되었다. 개발자들은 세션 키가 손상된 후 공격자가 이후 메시지의 평문에 접근하는 것을 자동으로 비활성화하므로 이 알고리즘을 자가 치유라고 부른다.

프로토콜의 세 번째 버전인 TextSecure v3는 암호화 기본요소와 와이어 프로토콜에 일부 변경 사항을 적용했다. 2014년 10월, 보훔 루르 대학교의 연구원들은 TextSecure v3에 대한 분석을 발표했다. 다른 발견 사항 중에서도 그들은 프로토콜에 대한 알려지지 않은 키 공유 공격을 제시했지만, 일반적으로 안전하다고 판단했다.

2016년 3월, 개발자들은 프로토콜 이름을 시그널 프로토콜로 변경했다. 또한 래칫과 전체 프로토콜을 더 잘 구별하기 위해 Axolotl Ratchet을 Double Ratchet 알고리즘으로 변경했다. 이는 일부 사용자들이 전체 프로토콜을 언급할 때 Axolotl이라는 이름을 사용했기 때문이다.

, 시그널 프로토콜은 TextSecure v3를 기반으로 하지만 추가적인 암호화 변경 사항이 적용되었다. 2016년 10월, 영국의 옥스퍼드 대학교, 호주의 퀸즐랜드 공과대학교, 캐나다의 맥마스터 대학교 연구원들은 프로토콜에 대한 공식 분석을 발표했으며, 프로토콜이 암호학적으로 안전하다고 결론지었다.

프로토콜에 대한 또 다른 감사는 2017년에 발표되었다.

## 속성
이 프로토콜은 기밀성, 무결성, 인증, 참가자 일관성, 대상 유효성 검사, 전방향 보안, 침해 후 보안 (미래 보안이라고도 함), 인과 관계 보존, 메시지 연결 불가능성, 메시지 부인, 참여 부인, 비동기성을 제공한다. 익명성 보존은 제공하지 않으며, 메시지 중계 및 공개 키 자료 저장을 위해 서버가 필요하다.

시그널 프로토콜은 단대단 암호화 그룹 채팅도 지원한다. 그룹 채팅 프로토콜은 쌍방향 더블 래칫과 멀티캐스트 암호화의 조합이다. 일대일 프로토콜이 제공하는 속성 외에도 그룹 채팅 프로토콜은 스피커 일관성, 순서 왜곡 복원력, 메시지 손실 복원력, 계산적 평등, 신뢰 평등, 하위 그룹 메시징, 그리고 축소 및 확장 가능한 멤버십을 제공한다.

### 인증
인증을 위해 사용자는 외부 채널을 통해 공개 키 지문을 수동으로 비교할 수 있다. 이를 통해 사용자는 서로의 신원을 확인하고 중간자 공격을 방지할 수 있다. 또한 구현은 상대방의 키가 변경될 경우 사용자에게 알리기 위해 트러스트 온 퍼스트 유스(trust on first use) 메커니즘을 사용할 수도 있다.

### 메타데이터
시그널 프로토콜은 회사가 사용자가 언제 누구와 통신했는지에 대한 정보를 보유하는 것을 막지 않는다. 따라서 메시징 서비스 제공업체가 이 정보를 처리하는 방식에는 차이가 있을 수 있다. 시그널의 개인정보처리방침은 각 메시지를 전송하는 데 필요한 기간 동안만 수신자의 식별자가 시그널 서버에 보관된다고 명시하고 있다. 2016년 6월, 목시 말린스파이크는 디 인터셉트에 다음과 같이 말했다: "시그널 서버가 저장하는 메타데이터에 가장 가까운 정보는 각 사용자가 서버에 마지막으로 연결한 시간이며, 이 정보의 정밀도는 시간, 분, 초가 아닌 일 단위로 줄어든다."

2018년 10월, 시그널 메신저는 시그널에 "봉인된 발신자" 기능을 구현했다고 발표했으며, 이는 발신자 식별자를 숨겨 시그널 서버가 접근할 수 있는 메타데이터의 양을 줄인다. 발신자의 신원은 각 메시지에서 수신자에게 전달되지만, 서버가 가지고 있지 않은 키로 암호화된다. 이는 발신자가 수신자의 연락처에 있거나 시그널 프로필에 접근할 수 있는 경우 자동으로 이루어진다. 사용자는 연락처가 아닌 사람 및 시그널 프로필에 접근할 수 없는 사람으로부터 "봉인된 발신자" 메시지를 받도록 옵션을 활성화할 수도 있다. 사용자의 장치 및 시그널 서버에 대한 동시 도청은 장치의 IP 주소가 특정 시간에 메시지를 보내거나 받기 위해 시그널 서버에 접근했음을 여전히 밝혀낼 수 있다.

## 사용법
오픈 위스퍼 시스템즈는 처음으로 애플리케이션 텍스트시큐어에서 이 프로토콜을 도입했다. 이후 암호화된 음성 통화 애플리케이션인 레드폰을 텍스트시큐어에 병합하고 이름을 시그널로 변경했다.

2014년 11월, 오픈 위스퍼 시스템즈는 각 WhatsApp 클라이언트 플랫폼에 시그널 프로토콜을 통합하여 단대단 암호화를 제공하기 위해 WhatsApp과 파트너십을 발표했다. 오픈 위스퍼 시스템즈는 이미 안드로이드 (운영체제)용 최신 WhatsApp 클라이언트에 프로토콜을 통합했으며, 다른 클라이언트, 그룹/미디어 메시지 및 키 확인에 대한 지원이 곧 제공될 것이라고 밝혔다. 2016년 4월 5일, WhatsApp과 오픈 위스퍼 시스템즈는 WhatsApp의 "모든 형태의 통신"에 단대단 암호화를 추가하는 작업을 완료했으며, 사용자들이 이제 서로의 키를 확인할 수 있다고 발표했다. 2017년 2월, WhatsApp은 콘텐츠 보안에 시그널 프로토콜을 사용하는 새로운 기능인 WhatsApp Status를 발표했다. 2016년 10월, WhatsApp의 모회사인 페이스북도 페이스북 메신저에서 시그널 프로토콜 구현을 사용하여 단대단 암호화를 제공하는 비밀 대화라는 선택적 모드를 배포했다.

2015년 9월, G 데이터 소프트웨어는 시그널 프로토콜을 사용하는 시큐어 챗(Secure Chat)이라는 새로운 메시징 앱을 출시했다. G 데이터는 2018년 5월에 서비스를 중단했다.

2016년 9월, 구글은 알로라는 새로운 메시징 앱을 출시했는데, 이 앱은 단대단 암호화에 시그널 프로토콜을 사용하는 선택적 "시크릿 모드"를 특징으로 했다. 2019년 3월, 구글은 메시지 (구글) 안드로이드 앱에 유리하도록 알로를 중단했다. 2020년 11월, 구글은 RCS 기반의 모든 대화에 메시지 (구글) 앱 사용자 간에 기본적으로 단대단 암호화를 제공하기 위해 시그널 프로토콜을 사용할 것이라고 발표했으며, 일대일 대화부터 시작했다.

2018년 1월, 오픈 위스퍼 시스템즈와 마이크로소프트는 스카이프의 비공개 대화라는 선택적 모드에 시그널 프로토콜 지원을 추가했다고 발표했다.

## 영향
시그널 프로토콜은 다른 암호화 프로토콜에도 영향을 미쳤다. 2016년 5월, Viber는 자체 암호화 프로토콜이 시그널 프로토콜과 "동일한 개념을 사용"하는 맞춤형 구현이라고 밝혔다. Forsta 개발자들은 자신들의 앱이 시그널 프로토콜의 맞춤형 구현을 사용한다고 말했다.

시그널 프로토콜의 일부로 도입된 더블 래칫 알고리즘은 다른 프로토콜에서도 채택되었다. OMEMO는 컨버세이션스(Conversations) 메시징 앱에 도입되어 2016년 12월 XMPP Standards Foundation (XSF)에 의해 XEP-0384로 승인된 XMPP 확장 프로토콜(XEP)이다. 매트릭스는 더블 래칫 알고리즘 구현을 통해 방 단위로 선택적 단대단 암호화를 제공하는 라이브러리인 Olm을 포함하는 개방형 통신 프로토콜이다. 와이어 개발자들은 자신들의 앱이 더블 래칫 알고리즘의 맞춤형 구현을 사용한다고 밝혔다.

IETF 제안인 메시징 레이어 시큐리티(Messaging Layer Security)는 비동기 래칫 트리를 사용하여 시그널의 Double Ratchet에 비해 보안 보장을 효율적으로 향상시킨다.

## 구현
시그널 메신저는 깃허브에서 AGPLv3 라이선스 하에 러스트로 작성된 시그널 프로토콜 라이브러리의 참조 구현을 유지 관리한다. 참조 러스트 구현을 사용하는 Swift, Java, TypeScript, C 및 기타 언어에 대한 바인딩이 있다.

시그널은 이전에 다음과 같은 더 이상 사용되지 않는 라이브러리를 유지 관리했다.
* libsignal-protocol-c: 애플의 앱 스토어에 대한 추가 라이선스 권한이 있는 C로 작성된 라이브러리.
* libsignal-protocol-java: 자바로 작성된 라이브러리.
* libsignal-protocol-javascript: 자바스크립트로 작성된 라이브러리.

타입스크립트와 같은 다른 언어로 제3자가 작성한 대체 라이브러리도 있다.

## 같이 보기
* 인스턴트 메시징 프로토콜 비교
* 암호화 라이브러리 비교

## 각주

## 참고 자료

* 
* 
* 
* 
* 
* 

## 외부 링크
* 
* "TextSecure Protocol: Present and Future", Trevor Perrin의 NorthSec 2015 강연 (비디오)

분류:암호 프로토콜
분류:응용 계층 프로토콜