본문 바로가기

security_downloads

IM 프로토콜에 대한 Noodling

728x90
지난 몇 달은 블로그 부서에서 조금 느린왔다. 그것은가는 흥미 진진한 일이있을 때 블로그 어렵다. 또한 : I의 슈팅이 조금있었습니다. 내가 할 수있는 어느 것도 반 서면 두 개 또는 세 개의 게시물이  아주  문을 얻을 수 있습니다.

대신 작성하고 다시 같은 글을 다시 쓰기, 내가 제목을 변경하여 교착 상태를 깰 수 있습니다 생각. 일반적으로이 작업을 수행하는 가장 쉬운 방법은 어떤 임의의 프로토콜을 선택하고 우리가 배운 것을 확인하기 위해 잠시 동안 그것을 찌를 것입니다. 

오늘 보는거야 프로토콜은 특히 '무작위'하지 - 그들은 모두 인기있는 암호화 된 인스턴트 메시징 프로토콜입니다. 첫 번째는 OTR  (기록 메시징 오프). 두 번째는 Cryptocat의 그룹 채팅 프로토콜입니다.이러한 프로토콜 각각 같은 최종 목표를 가지고,하지만 그들은 약간 다른 방법으로 거기.

나는이 것을 처음부터 명확하게 할  게시물 이 없습니다 전혀 대상을 . 당신이 프로토콜에 흥미로운 취약점을 찾고 있다면, 누군가가 다른 사람의 블로그를 체크 아웃 이동합니다. 이것은 순수한 noodling입니다.

OTR 프로토콜

OTR은 아마도 인스턴트 메시지를 암호화하기위한 가장 널리 사용되는 프로토콜이다. 당신 같은 IM 클라이언트를 사용하는 경우 에이디 엄 , 피진 또는 ChatSecure을 이미 OTR 지원이. 당신은 플러그인 및 오버레이를 통해 다른 클라이언트로 사용할 수 있습니다.

OTR 원래 보리 소프, 골드버그와 브루에 의해 개발되었다 빠르게 틈새 시장을 지배하게되었다. 보리 소프 때문에 대부분이는 등 알. 그들이 무슨 일을하는지 알고 스마트 연구자이다. 또한 : 그들은 멋진 이름을 포착하고 작동 코드를 발표했다.

OTR은 전형적인 IM 시스템의 기술 및 사용에 제약 조건 내에서 작동합니다. 대략적으로 말하면, 이들은 :
  1. 메시지는 ASCII 형식이 될 몇 가지 (짧은)의 최대 길이가 있어야합니다.
  2. 사용자는 키 교환을 방해하지 않으므로 인증 (즉, 당신이 사후 파트너를 인증 할 수 있습니다) "게으른"해야한다.
  3. 채팅 파트너는 모든이다  FBI의 정보원 채팅 성적 증명서가 있어야합니다 그래서 - 그럴듯하게 부인할 법정에서 당신에 대한 증거로 사용되는 것을 유지하기 위해.
신선한이 문제에오고, 당신은 목표 (3) 조금 이상한 찾을 수 있습니다. 사실, 내 지식의 최선을 법의 역사에 법원은있다 이제까지  대화가 발생한 증거로 암호화 성적 증명서를 사용하지 않습니다. 그러나이 요구 사항은 좀 더 섹시한 문제를 만드는 것을주의해야합니다. 그럼 함께 가자!
"젠장, 그들이 부인할 키 교환 프로토콜을 사용"지금까지 연방 정부의 검사는 말했다.
OTR (버전 2 / 3) 악수를 기반으로  SIGMA 키 교환 프로토콜 . 간단히 말해서, 그것은 양 당사자는 우리가 넣어야합니다 장기 DSA 공개 키를 생성하는 것으로 가정 (pubA, pubB을 ). 다음과 같이 다음 당사자가 상호 작용할 수 있습니다 :

OTRv2/v3 AKE. 으로도 BONNEAU 모리슨 , 모든 화려한 물건 덧붙였다. 또한 거기에 
여기에 대해 이야기하기에 너무 끔찍한 OTRv1 프로토콜.
이 프로토콜에 대한 네 가지 요소가 있습니다 :
  1. 해시 약속.  첫째, 밥은 디피 - 헬만 키 교환 (자신의 공유에 범 g ^ X 임의 AES 키에 암호화하여) R  과의 암호문과 해시 전송 ^ X g의 앨리스에.
     
  2. 디피 - 헬만 키 교환. 다음, 앨리스는 키 교환 프로토콜 (그녀의 절반 전송 g ^ y로 ). AES 키를 전송하여 앨리스에게 그의 몫을 밥은 이제 '열기' R  그 이전 단계에서 암호화하는 데 사용. 앨리스는이 값을 해독하고 Bob이 첫 번째 메시지에 전송 된 해시와 일치하는지 확인할 수 있습니다. 이제 양측이 공유 (이 있는지 g ^ x, g ^ y를 그들은 각각 공유 비밀을 계산하기 위해 자신의 비밀을 사용합니다)  ^ {XY} g를 및 공유 암호화 키 (설정하는 값을 여러 가지 방법으로 해시C ', km2, Km'2을 후속 메시지를). 또한, 각 당사자는 해시 ^ {XY} g를 짧은 "세션 ID"를 얻을.투입 단계 (1 단계)의 유일한 목적은에서 앨리스 또는 밥 하나를 방지하는 것입니다 제어 공유 비밀 값  g ^ {XY를 } . 세션 ID 값이 디피 - 헬만 공유 비밀을 해싱하여 산출되므로 앨리스 이용 밥 어느 특정 값에이 ID를 강제 할 수 있기 때문에, 그것은 채널을 인증하기 위해 비교적 짧은 세션 ID 값을 사용하는 것이 가능하다.




     
  3. 장기 키와 서명의 교환. 지금까지 앨리스와 밥은 실제로 서로 이야기하고 있음을 인증하지 않은, 따라서 자신의 디피 - 헬만 교환은 사람이 중간에 공격자에 의해 차단되었을 수 있습니다.그들은 이전에 설정 한 암호화 된 채널을 사용하여, 그들은 지금이 문제를 해결하려면에 대한 설정합니다. 앨리스와 밥은 각각 자신의 장기 DSA 공개 키 (보내 pubA, pubB (의 MAC)에)와 키 식별자뿐만 아니라 서명을 디피 - 헬만 메시지 (의 특정 요소 g ^ x, g ^ Y )과 그들이와 통신하고있는 당사자의 자신의보기. 그들은 각각이 서명을 확인하고 뭔가 어긋의 경우 연결을 취소 할 수 있습니다. **


     
  4. 공개 MAC 키. MAC을 보낸 후, 각 당사자는 그 파트너의 인증 응답을 기다립니다. 그러므로 이전의 메시지에 대한 MAC 키를 보여준다.
     
  5. 게으른 인증.  앨리스와 밥은 공개 키를 교환하지 않을 경우 물론,이 모든 프로토콜의 실행은 여전히 취약하다 중간자 (MITM) 공격. 아무것도 나쁘게 없다는 것을 확인하려면, 앨리스와 밥 모두는 결국 서로를 인증해야합니다. OTR은이 작업을 수행하기위한 세 가지 메커니즘을 제공 당사자는 교환 할 수있다  지문 (의 (기본적으로 해시) pubA, pubB를 두 번째 채널을 통해). 대안 적으로, 이들은 프로토콜의 두 번째 단계에서 계산 된 "세션 ID"를 교환 할 수있다. 마지막 방법은 사용하는 것입니다 사회주의 백만장 자 '문제를 양 당사자가 동일한 비밀을 공유하는 것을 증명하기 위해.
OTR 키 교환은 다음과 같은 속성을 제공합니다 : 사용자 ID를 보호합니다.  에는 사용자 식별 정보 (예를 들면,  장기 공개 키가) 당사자가 먼저 디피 - 헬만을 사용하여 보안 채널을 설립 할 때까지 전송되지 않습니다. 결론적으로 순수한 것입니다  수동 공격자가 통신 파트너의 ID를 배울하지 않습니다 -. 높은 수준의 IM 전송 프로토콜에 의해 밝혀 무슨 이상을 * 불행하게도이 보호에 실패 활성  쉽게 기존 OTR 연결을 부술 수있는 공격자, 새 키 계약을 강제하고 다음 키 합의 동안 사용 디피 - 헬만에 MITM를 실행합니다. 이것은 공격자가 실제 메시지 내용을 가로 챌 수 없습니다 - 서명이 확인되지 않는 경우에 그녀가 잡힐 것이다 - 그러나 그녀는 교환되는 공개 키를 볼 수 있습니다. 가능성이 증상이 신비한 OTR 오류이다보기의 클라이언트의 관점에서 성공적인 악수 바로 다음에. 이 중 하나 결과는 공격자가 생각할 당신이 연결을 시작하는 데 사용하는 여러 클라이언트의 결정 수 있다는 것이다. 약한 효과적인 방어 .  OTR 디자이너의 주요 목표는  그럴듯하게 부인 . 대략, 이것은 당신과 내가 소통 할 때 우리는 정말 대화를 한 것으로 구속력 증거가 없어야한다는 것을 의미한다. 이것은 개별 메시지에 디지털 것이다 GPG 기반 채팅과 같은 명백한 솔루션 배제  서명 이를 거부 불가 만드는. 제대로 효과적인 방어를 정의하는 것은 조금 복잡합니다. 일반 영어, 알고리즘을 만들기위한 - 표준 접근 방식은 효율적인 '시뮬레이터'의 존재를 표시하는 것입니다  가짜  성적 증명서. 이 이론은 간단하다. 그것은 가짜 성적표를 만들기 위해 사소한 경우, 성적 증명서는 거의 대화가 실제로 발생했다는 증거로 볼 수 없습니다 OTR의 핸드 셰이크가 매우 달성하지 않는 '강한'  효과적인 방어 - 의미를 그 어떤 사이의 사람이 할 수있는 가짜 성적 증명서 두 당사자 -이 서명을 사용하여 주로 때문입니다. 서명이기 때문에 거부 불가 , 실제로 공개 키를 알지 못하고 가짜에 방법이 없습니다. 이것은 우리가, 사실, 어떤 점에서 통신 않았 음을 알 수있다. 또한, 증거의 흔적을 만들 수의  내 디피 - 헬만 점유율 (에 내 신분을 인코딩하여, 예를 들면, 당신과 함께 의사 소통을 g ^ X ). 적어도 당신이 온라인으로했고, 우리가 접촉을했던 어떤 점에서 그것을 보여줍니다. 수 있습니다 그러나 접촉을 증명하는 것은 특정 대화가 발생한 것을 증명과 동일한 것이 아니다 .  그리고이 OTR 방지하기 위해 노력 것입니다. OTR가 제공하는 보장입니다  대상이 어떤 점에서 온라인으로 있다면 당신이 그들에게 연락 할 수 , 알고리즘이 난 그냥 개인과 모든 대화에 대한 가짜 수 있습니다. OTR 클라이언트, 디자인, 단지 클라이언트 온라인으로 쉽게 위조 성적 증명서에 사람들이. ***있게두고, 단지 사람에 대한과 키 교환을 시작하고자하기 때문에 강력하게 부인을 향해. OTR의 '약한'효과적인 방어가에 필요 우리가 성적 증명서를 날조하고있는 사용자 (밥)의 적어도 암묵적 참여. 이는 나쁜 속성 아니지만, 실제로는 페이크 사체만을 하나에 의해 제조 될 수 있다는 것을 의미  밥 자신,  또는 밥 온라인 상호 작용 사람. 이것은 확실히 효과적인 방어의 학위를 줄이고. 관련 개념 '이다 강력한 효과적인 방어 보장 ', 당사자가 가짜 성적 증명서는 공공 정보 (예를 들면, 공개 키)를 사용 할 수 있습니다.













 





OTR은 강력하게 부인을 달성하려고하지 않습니다 - 그러나 그 사이에 뭔가를 시도 않습니다. 효과적인 방어의 OTR 버전은 한 공격자는 보유하고 진정한 대화의 네트워크 트래픽을 가져가  그들이 참가자 중 하나가 아닌 경우에도 - - 자신이 원하는 아무 말도 대화를 변경할 수 있어야한다. 정렬. OTR의 효과적인 방어 과정의 대략적인 개요 (디피 - 헬만 사용) 각 메시지에 대해 새 메시지 인증 키를 생성하고 그들이 사용했을 경우 일단 그 키를 공개하는 것입니다. 이론적으로, 제 3자가이 성적을 얻을 수 있습니다 - 그들은 원래 메시지의 내용을 알고있는 경우 - 그들은 '쳐 부수다'AES-CTR은 자신이 선택한 메시지로 메시지를 암호화, 그들은 새로운 메시지에 자신의 맥을 위조 할 수 있습니다 .


OTR 메시지 전송 (출처 :  BONNEAU 모리슨은 모든 색깔의 물건을 추가).
따라서 가상의 성적 증명서 위조 말한다 "오래된 사본 걸릴 수 있습니다 당신이 피자를 좋아 " 예를 들어, "라고 유효한 성적으로 바꿀 당신이 STRATFOR를 해킹하고 싶습니다를 제외하고 ... "그들은 아마 수 첫 번째 메시지는 너무 짧고 ... 주 오,이 모든 것은 바보 같은 생각 때문에 -.의 그것에 대해 얘기를 멈추게 OTRv1 악수 . 아, 네, 몇 가지 문제와 외설이 OTRv1 프로토콜 '도있다 t 정말 부인할. 더 나은, MITM 공격자는 , 그것으로 다운 그레이드하는 두 클라이언트를 강제로 제공 모두 해당 버전을 지원할 수 있습니다. 윽. 그래서 OTR 프로토콜입니다. 제가 위에서 몇 가지 사소한 문제를 지적했습니다 있지만, 진실은 프로토콜은 일반적으로 의사 소통을 할 수있는 훌륭한 방법이라는 것입니다. 사실은 그런 좋은 생각 당신이 정말로 비밀 걱정하는 경우에  거기 밖으로 아마 최고의 옵션 중 하나입니다. Cryptocat 우리는 내가 다른 매우 인기있는 채팅 프로토콜을 대조 좋을 거라 생각 IM 프로토콜을보고하고 있기 때문에 :  Cryptocat ' 의 그룹 채팅. Cryptocat 지금 (토마스 Ptacek의 어두운 악몽도하고) 아이폰 OS에서 실행됩니다. 웹 기반의 암호화 채팅 응용 프로그램입니다 Cryptocat는 '개인'양자 간 대화를위한 OTR을 구현합니다. 그러나 OTR은  없습니다  기본. 당신이 기본 구성에 Cryptocat를 사용하는 경우에는 그 사용됩니다  태엽 프로토콜을 . 그룹 채팅에 Cryptocat 그룹 채팅 사양은 여기에서 찾을 수 있습니다 , ​​그것은 매우 간단합니다. Cryptocat에 "장기"키가 없습니다. 응용 프로그램이 종료 될 때까지 디피 - 헬만 키는 각 세션의 시작시에 생성되고 모든 대화에 다시 사용된다. 다음은 두 당사자 사이의 핸드 셰이크입니다 :













Cryptocat 그룹 채팅 핸드 셰이크 (현재 버전). 설정은 Curve25519 . 키가되는 
응용 프로그램이 시작하고, 세션을 통해 다시 사용할 때 생성됩니다.
여러 사람이 방에 가입하면 사용자의 모든 쌍은 사용자의 모든 쌍 사이에 공유 된 비밀을 유도하기 위해이 악수를 반복합니다. 개인은 지문 확인 및 / 또는 실행하여 서로의 키를 확인하기 위해 예상되는 사회 백만 장자 프로토콜을 . OTR 달리, Cryptocat 핸드 셰이크가 더 키 확인 메시지를 포함하지 않으며 자신의 정체성 또는 대화방에 사용자를 바인딩을 시도 않습니다. 이 전송받는 사람이 사람이 실제로 채팅의 한 부분이라고 생각합니다 -.이 중 하나 의미는 내 자신의 것처럼 나는 누군가의 사람의 공개 키를 전달할 수 있다는 것입니다 또한, 공개 키에 바인딩되지 않기 때문에 사용자의 ID 또는 채팅 룸, 당신은 그들이 말하는 느낌입니다 다른 사용자 (다른 대화방도 사용자) 사이에 잠재적으로 메시지를 라우팅하는 수있는 동안 당신 . Cryptocat이 때문에 그룹  채팅 프로토콜이 설정에서 대화를 조작 할 수있는 몇 가지 흥미로운 일이있을 수 있습니다. ***






이 문제의합니까? 아마  많은,하지만, 이러한 문제를 해결하기 위해 상대적으로 쉬운 (좋은) 일 것입니다. 메시지 전송과 일관성.  Cryptocat의 다음 흥미로운 점은 암호화 된 채팅 메시지를 전송하는 방법입니다. Cryptocat의 핵심 목표 중 하나는 메시지가 있는지 확인하는 것입니다 일치하는  개별 사용자 사이. 이것은 모든 사용자가 그대로. 다른 사용자가 동일한 데이터를 수신하고 있음을 검증 할 수 있어야한다는 것을 의미 Cryptocat 이것을 달성하기 위해 약간 복잡한 메커니즘을 사용한다. 채팅에서 사용자의 각 쌍에 대해, Cryptocat는 AES 키와 디피 - 헬만 공유 비밀에서 MAC 키를 도출한다. : 메시지 클라이언트를 보내려면





  1. 임의의 패딩의 64 바이트를 추가하여 메시지를 패드.
  2. 에 대한 임의의 12 바이트의 초기화 벡터 생성 N의 각  사용자가 채팅 중입니다.
  3. 각 사용자에 대한 공유 된 암호화 키 아래 AES-CTR을 사용하여 메시지를 암호화한다.
  4. 을 연결의 모든 N  암호문 / IV를을 결과와 각받는 사람의 키의 전체 덩어리의 HMAC를 계산한다.
  5. 다음 데이터를 해시하여 메시지에 대한 '태그'계산 : 패딩 일반 텍스트 | | HMAC-SHA512alice | | HMAC-SHA512bob | | HMAC-SHA512carol | | ...

  6. 방송 N의  암호문, IV를, 맥과 대화의 모든 사용자에게 하나의 '태그'값입니다.
수신자가 다른 사용자로부터 메시지를 수신하면, 그 검증 :
  1. 메시지는 공유 키에 유효한 HMAC가 포함되어 있습니다.
  2. 이 IV이 보낸 사람으로부터 이전에 접수되지 않았습니다.
  3. 복호화 된 평문은 '태그'과 일치한다.
대략적으로 말하면, 여기에서 아이디어는 모든 사용자가 동일한 메시지를 수신하는지 확인하는 것입니다. 해시 일반 텍스트의 사용은 조금 못생긴이지만, 여기에 인수는 임의의 패딩 추측 공격으로부터 메시지를 보호하는 것입니다. 어떤이의 의지합니다. 재생 방지.  Cryptocat 또한 사용자가 문을 반복 할 나타나도록 공격자가 사용자 사이에서 단순히 재생 (또는 반사)의 메시지를 대화를 조작 재생 공격, 예를 방지하기 위해 노력한다. 예를 들어, 다음 대화 내용을 고려



리플레이 및 반사 공격. 
재생 공격은 이전에 수신 된 모든 사용자로 /로부터 전송 IV를 저장 도전 'IV 배열'의 사용을 통해 방지된다. 중복 IV가 도착하면, Cryptocat는 메시지를 거부합니다. 이것은 다루기 힘든이지만 일반적으로 리플레이 및 반사를 방지하기 위해 확인을 보인다. 이 방법의 한계는 IV 배열이 영원히 살 수 없다는 것입니다. 사실, 수시로 Cryptocat는 IV 배열을 리셋한다 없이  클라이언트 키를 재생성. 이후 리플레이 및 반사에 취약 모두 만드는 -이 앨리스와 밥은 모두 온라인 상태를 유지하는 경우, 그들은 키 교환을 반복하고 다시 동일한 키를 사용하여 바람 수 있다는 것을 의미한다. ( 업데이트 : 이 문제는 이후 수정되었습니다). 일반적으로 이러한 문제에 대한 해결책은 삼중입니다 :





  1. 키는 장기적이어야한다, 그러나 각 키 교환에 대한 새로운 임의의 구성 요소를 사용하여 다시 생성해야합니다.
  2. 다른 키는 앨리스 -> 밥과 밥 -> 앨리스 방향으로 유도해야한다
  3. 그것은이 크고, 다루기 힘든 키 배열을 사용하는 것보다 메시지 카운터를 사용하는 것이 더 우아한 될 것입니다.
좋은 소식은 Cryptocat 개발자가 작업하는 것입니다 완전히 새로운 버전 엄청나게 더 있어야 다자간 채팅 프로토콜.

결론적으로

나는이 아무데도 가지 않는다 포스트 것이라고 말했다, 나는 전달! 하지만 인정해야, 내 시스템 밖으로 밀어하는 데 도움이됩니다.

제가 위에서주의의 쟁점들 중 어느 것도 세계에서 가장 큰 거래를하지 않습니다. 첫 번째, 그 암호를 잘하기 어려운 것입니다 : 그들은 두 가지를 보여 모든 미묘한 문제입니다. 또한 : 그 암호는 거의 파국적 실패하지 않습니다. 당신에게 진짜 고통의 원인이 흥미로운 암호 버그는 여전히 멀리 사이 몇몇이다.

주의 사항 :


* 실제로, 당신은 더 높은 수준의 IM 프로토콜이 이미 사용자 ID (예를 들면, 재버 별명을) 누설 주장 할 수도 있습니다. 그러나 이것은 매우 구현의 선택입니다. 또한, 알려진 별명으로 재버를 사용하는 경우에도, 당신은 여러 가지 클라이언트 중 하나 (컴퓨터, 전화 등)를 사용하여 재버 서버에 액세스 할 수 있습니다. 당신은 토르, 이것이 당신이 OTR시 사용하는 공개 키가 될 수있는 유일한 표시를 사용하는 가정. 그래서 유용한 정보는이 프로토콜에 확실히있다. ** OTR 대신에 사용자 식별 정보의 해시의 MAC 서명을 알 수 있습니다. 이것은 사용되는 MAC는 HMAC-SHA2를 기반으로 주어진 안전한 선택으로 발생하지만 그렇지는 않습니다 일반적으로  선택하는 것이 안전합니다. 다른 MAC 기능 (예를 들면, CBC-MAC)의 HMAC를 교체하면 치명적인 것입니다. *** 특정 얻으려면, 내가 밥과 약간의 대화를위한 시뮬레이션 사본을 생성하고 싶었 상상. 밥의 클라이언트가 온라인 상태인지 제공, 나는 밥에게 내가 원하는 g ^ x 값을 보낼 수 있습니다. 기본적으로 자신의 클라이언트가 유쾌, (g ^ x, g ^ Y, pub_B, keyid_B)하는 자신의 g ^ y를 서명 날 특히 반송 할 것이다 - 그가 정말 얘기하고자하는 경우 중요하지 않습니다 내 정체성을 포함하지 않습니다. 이 시점에서 앞으로의 모든 인증에 맥을 사용하여 수행되며, 우리 모두에게 알려진 키에 암호화됩니다. 대화의 나머지를 날조에서 저를 막을 방법은 없습니다.**** 또한,이 OTRv1의 문제입니다.
728x90