이 문서에 MTProto 의 엔드-투-엔드 암호화는 의미에 대한 고급 사용자를 이용할 수 있습니다.당신은 덜 협박 소스에서 비밀 채팅에 대한 자세한 내용을 보려면,친절하게 우리의 일반 자주 묻는 질문을 참조하십시오.2015 년 11 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일,2015 년 12 월 15 일현재 단계적으로 중단되고 있습니다.비밀 채팅은 채팅 참가자만 보유한 키로 메시지를 암호화하는 일대일 채팅입니다. 이러한 엔드-투-엔드 암호화된 비밀 채팅에 대한 스키마는 클라우드 채팅에 사용되는 것과 다릅니다.버전 1.0 과의 주요 차이점(참조 용으로 여기에 설명 됨)은 다음과 같습니다.;패딩 바이트는 암호화 할 메시지에뿐만 아니라 의존하지만,비밀 채팅 키의 일부뿐만 아니라,12..0 대신 1024 패딩 바이트가 사용됩니다..1.0 절에서 15 패딩 바이트.키 생성은 디피-헬만 프로토콜을 사용하여 생성됩니다.우리는 다음과 같은 시나리오를 생각해 보자:사용자는 사용자와 엔드-투-엔드 암호화 된 통신을 시작하고 싶습니다.사용자가 메시지를 실행할 수 있습니다.각각의 새로운 키 생성 절차 전에 이 메소드를 실행하는 것은 매우 중요하다. 매번 모든 값을 수신하지 않도록 매개 변수 값을 버전과 함께 캐시하는 것이 좋습니다. 클라이언트에 저장된 버전이 최신 상태이면 서버는 생성자 메시지를 반환합니다.수정.2^2048),그리고 그 지 소수 차수의 순환 하위 그룹을 생성(피-1)/2,즉 2 차입니다.잔류 모드 피.지 항상 2,3,4,5,6 또는 7 과 같기 때문에 2 차 상호 법칙을 사용하여 쉽게 수행 할 수 있습니다.,간단한 조건을 산출 피 모드 4 지-즉,피 모드 8=7 지=2;피 모드 3=2 지=3;추가 조건 없음 지=4;피 모드 5=1 또는 4 지=5;피 모드 24=19 또는 23 지=6; 이 경우 두 가지 방법이 있습니다. 후 지 과 피 클라이언트에 의해 확인 된,결과를 캐시하는 것이 합리적이다,미래에 반복 긴 계산을 피하기 위해. 이 캐시는 인증 키 생성에 사용되는 캐시와 공유될 수 있습니다.클라이언트가 부적절한 난수 생성기가있는 경우,그것은 임의의 길이 매개 변수를 전달하는 의미가 있습니다.중요:원시 형태로 서버의 임의의 시퀀스를 사용하는 것은 안전하지 않을 수 있습니다. 예를 들어 동일한 길이의 클라이언트 난수를 생성하여 클라이언트 시퀀스와 결합해야 합니다.(충분한 엔트로피 또는 서버의 임의의 사용;위 참조)메시지를 실행합니다.이 경우 암호 해독에 대한 자세한 내용은 암호 해독을 참조하십시오.채팅 생성자가 암호화된 채팅 요청으로 연결된 모든 인증 키(모든 인증 장치)에 대한 업데이트 업데이트 암호화를 받습니다. 사용자에게 사용자에 대한 기본 정보가 표시되어야 하며 요청을 수락하거나 거부하라는 메시지가 표시되어야 합니다.두 클라이언트 모두 지,지_ㅏ 과 지_비 하나보다 크고 작은 피-1. 이 경우,우리는 두 가지 방법으로 문제를 해결할 수 있습니다.클라이언트 인터페이스에서 비밀 채팅의 생성을 확인한 후,클라이언트 비는 디피-헬만 메소드에 대한 최신 구성 파라미터를 수신한다. 그 후,임의의 2048 비트 번호를 생성,비,에 대한 것과 유사한 규칙을 사용하여. 암호화된 차트가 요청된 상태에서 업데이트를 수신하면 최종 공유 키를 즉시 생성할 수 있습니다. 키 길이가 256 바이트인 경우 안쪽 여백으로 몇 개의 선행 0 바이트를 추가하여 키가 정확히 256 바이트가되도록하십시오. 키 지문은 키 지문의 마지막 64 비트와 같습니다. 이 경우 암호는 암호화되어 암호화되어 암호화되어 암호화되어 암호화되어 암호화되어 암호화되어 암호화되어 암호화되어 암호화됩니다. 참고 2: 이 지문은 클라이언트 소프트웨어를 개발할 때 버그를 감지하는 키 교환 절차에 대한 온전성 검사로 사용됩니다.이 지문은 비밀 채팅에서 외부 인증 수단으로 클라이언트에 사용되는 키 시각화에 연결되어 있지 않습니다. 클라이언트 상의 키 시각화는 샤이 1 의 처음 128 비트(초기 키)다음에 샤이 256 의 첫 160 비트(비밀 채팅이 레이어 46 으로 업데이트될 때 사용되는 키)를 사용하여 생성된다.클라이언트 비 메시지를 실행합니다.이 경우 암호 해독은 암호 해독과 관련이 있으며 암호 해독은 암호 해독과 관련이 있습니다.현재 장치를 제외한 모든 클라이언트 비의 인증된 장치에 대해 업데이트 암호화 업데이트가 생성자가 암호화된 상태로 전송됩니다. 그 후,비밀 채팅에 액세스 할 수있는 유일한 장치는 메시지를 호출 한 장치 비입니다.수락 암호화.채팅을 시작한 인증 키에 대해 생성자가 암호화된 채팅과 함께 업데이트 암호화 업데이트가 전송됩니다.이 경우 공유 키를 계산할 수 있습니다. 키 길이가 256 바이트인 경우 안쪽 여백으로 몇 개의 선행 0 바이트를 추가하여 키가 정확히 256 바이트가되도록하십시오. 수신된 키의 지문이 암호화된 채팅에 전달된 지문과 동일한 경우 수신 메시지를 보내고 처리할 수 있습니다. 그렇지 않으면 메시지.암호화를 실행하고 사용자에게 알려야 합니다.과거의 통신을 안전하게 유지하기 위해 공식 텔레 그램 클라이언트는 키가 100 개 이상의 메시지를 해독하고 암호화하는 데 사용되거나 1 주일 이상 사용 된 경우 키가 적어도 하나의 메시지를 암호화하는 데 사용되면 다시 키를 시작합니다. 그런 다음 이전 키는 안전하게 폐기되며 현재 사용중인 새 키에 액세스 할 수 있어도 재구성 할 수 없습니다.다시 키잉 프로토콜은 더이 문서에 설명되어 있습니다:비밀 채팅에서 완벽한 앞으로 비밀.당신의 클라이언트는 공식 전보 클라이언트와 호환되는 비밀 채팅에서 앞으로 비밀을 지원해야합니다 있습니다. 비밀 채팅에서 메시지 보내기 및 받기 발신 메시지의 직렬화 및 암호화 해독된 메시지 유형의 개체가 생성되고 일반 텍스트로 메시지를 포함합니다. 이전 버전과의 호환성을 위해 개체를 46 부터 시작하여 지원되는 계층의 표시와 함께 암호 해독된 메시지 계층 생성자에 래핑해야 합니다.
TL 스키마의 내용에 대한 end-to-end 암호화된 메시지를 여기에 있습니다”
그 결과를 구성로 직렬화하는 바이트의 배열을 사용하여 일반 TL 규칙이 있습니다. 결과 배열은 이러한 4 바이트를 계산하지 않는 배열 길이를 포함하는 4 바이트로 앞에 추가됩니다. 바이트 배열은 12~1024 개의 임의 패딩 바이트로 채워져 길이를 16 바이트로 나눌 수 있습니다. (이전 마운트 프로토에서 1.0 암호화,만 0 에 15 패딩 바이트가 사용되었다.이 키는 공유 키 키에서 32 바이트로 추가되는 이전 단계에서 얻은 데이터의 128 중간 비트로 계산됩니다. 이전 단계에서 얻은 데이터의 128 하위 비트(패딩 바이트 제외)와 다르게 계산되었습니다.)
에 대한 MTProto2.0,AES 키 aes_key 및 초기화 벡터 aes_iv 계산됩니다(중요한 공통 키를 얻어진 중요한 세대)에서 다음과 같이
- msg_key_large=SHA256(substr(key,88+x32)+일반 텍스트+random_padding);2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 12 월 1 일,2015 년 이 응용 프로그램을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.:::::::::::::::::::::::::::비밀 채팅의 발신자의 메시지의 경우,엑스=8 반대 방향으로 메시지.이 문제를 해결하려면 다음을 수행하십시오.(참조는 이 문서 참조).이 경우 암호화를 사용하여 암호화를 수행 할 수 있으며 암호화를 사용하여 암호화를 수행 할 수 있습니다. 암호화 키 지문 키_지문과 메시지 키_키가 결과 바이트 배열의 맨 위에 추가됩니다.암호화 된 데이터는 메시지에 포함됩니다.비밀 채팅의 상대방에게 전달하기 위해 전보 서버에 전달.
업그레이드 MTProto2.0 에서 MTProto1.비밀 채팅에서 양 당사자가 적어도 레이어 73 을 사용하는 즉시,그들은 모든 발신 메시지에 대해 엠프로토 2.0 을 사용해야 한다. 비밀 채팅을 만드는 동안 충분히 높은 시작 레이어가 협상되지 않은 경우 첫 번째 수신 된 메시지 중 일부는 마운트 프로토에게 1.0 을 사용할 수 있습니다. 마운트프로토 2.0 으로 암호화된 첫 번째 메시지(또는 레이어 73 이상을 가진 첫 번째 메시지)가 수신된 후,더 높은 시퀀스 번호를 가진 모든 메시지들도 마운트프로토 2.0 으로 암호화되어야 한다.현재 계층이 73 보다 낮으면 각 당사자는 수신된 메시지를 암호 해독하려고 시도해야 합니다. 첫 번째 마운트프로토 2.0 암호화된 메시지가 도착하면(또는 레이어가 73 으로 업그레이드됨),클라이언트가 여전히 약간의 간격이 닫힐 때까지 기다리지 않는 한,추가 메시지에 대해 마운트프로토 1.0 암호 해독을 시도할 필요가 없다.위의 단계는 역순으로 수행됩니다. 암호화된 메시지가 수신되면 암호화된 메시지 앞에 공유 키에서 가져온 32 바이트가 추가됩니다.메시지 계층이 클라이언트에서 지원하는 계층보다 큰 경우 클라이언트 버전이 최신 상태임을 사용자에게 알리고 업데이트하라는 메시지가 표시되어야 합니다.가능한 조작으로부터 보호하기 위해 모든 메시지를 원래 순서로 해석 할 필요가 있습니다. 비밀 채팅은 서버와 독립적으로 서열 카운터를 처리하기위한 특별한 메커니즘을 지원합니다.이러한 카운터의 적절한 처리는 더이 문서에 설명되어 있습니다:비밀 채팅의 시퀀스 번호.당신의 클라이언트는 공식 전보 클라이언트와 호환되도록 비밀 채팅에서 시퀀스 번호를 지원해야합니다. 암호화된 파일 전송 비밀 채팅에 전송된 모든 파일은 채팅의 공유 키와 관련이 없는 일회성 키로 암호화됩니다. 암호화된 파일이 전송되기 전에 암호화된 파일의 주소가 메시지의 파일 매개 변수를 사용하여 암호화된 메시지의 외부에 첨부될 것으로 가정합니다.즉,생성자의 키 매개 변수는 메시지 본문에 보내집니다.비밀 채팅으로 파일을 전송하기 전에 2 개의 임의의 256 비트 숫자가 계산되어 파일을 암호화하는 데 사용되는 키 및 초기화 벡터로 사용됩니다. 이 응용 프로그램은 암호화를 사용하여 암호화를 만들 수 있습니다.
키문은 다음과 같이 계산됩니다:
- digest=md5(키+iv)
- 지문=substr(소화,0,4)XOR substr(소화,4,4)
암호화된 내용을 파일에 저장되는 서버에서는 동일한 방식으로 사람들에 있는 파일의 클라우드 채팅: 조각에 의해 호출하여 업로드 할 수 있습니다.파일 파트를 저장합니다.메시지에 대한 후속 호출.암호화된 파일은 저장된 파일에 식별자를 할당하고 메시지와 함께 주소를 보냅니다. 받는 사람은 암호화된 메시지로 업데이트를 받게 되며 파일 매개 변수에는 파일 정보가 포함됩니다.수신 및 발신 암호화 된 파일은 생성자 입력 암호화 된 파일을 사용하여 다른 비밀 채팅으로 전달되어 동일한 콘텐츠를 서버에 두 번 저장하지 않도록 할 수 있습니다.비밀 채팅은 사용자가 아닌 특정 장치(또는 오히려 인증 키)와 연결됩니다. 클라이언트의 상태를 설명하기 위해 승점을 사용하는 기존의 메시지 상자는 장기 메시지 저장 및 다른 장치로부터의 메시지 액세스를 위해 설계 되었기 때문에 적합하지 않습니다.이 문제에 대한 해결책으로 추가 임시 메시지 큐가 도입되었습니다. 비밀 채팅에서 메시지에 관한 업데이트가 전송 될 때,연결 또는 업데이트의 손실의 경우에 긴 중단 된 경우 차이를 재구성하는 데 도움이 쿼트의 새로운 값이 전송됩니다.이벤트 수가 증가함에 따라 쿼터티 값은 새 이벤트마다 1 씩 증가합니다. 초기 값은 0 이 아닐 수도 있고 그렇지 않을 수도 있습니다.임시 큐의 이벤트가 클라이언트에 의해 수신 및 저장되었다는 사실은 메시지에 대한 호출에 의해 명시 적으로 인정됩니다.대기열 메서드를 받거나 업데이트 호출에 의해 암시적으로 수신됩니다.최종 상태가 아닌 통과 된 쿼트의 값). 클라이언트에서 전달한 것으로 인정된 모든 메시지와 7 일 이상의 메시지는 서버에서 삭제될 수 있습니다.인증이 해제되면 해당 장치의 이벤트 큐가 강제로 지워지고 쿼터티 값이 무의미 해집니다.클라이언트는 항상 비밀 채팅의 반대편에 클라이언트가 지원하는 것으로 알려진 최대 레이어를 저장해야 합니다. 비밀 채팅을 처음 만들 때 이 값은 46 으로 초기화되어야 합니다. 이 원격 계층 값은 상위 계층의 정보가 포함 된 패킷을 수신 한 후 항상 즉시 업데이트해야합니다.:
- 어떤 비밀 채팅을 포함하는 메시지 layer_no 에서
decryptedMessageLayer
>=46,또는- decryptedMessageActionNotifyLayer 서비스는 메시지,포장된 것처럼 보이지만 실제로는 decryptedMessageService 생성자의 사용되지 않 층 8(생성자
decryptedMessageService#aa48327d
).원격 클라이언트에 로컬 계층에 대해 알리기 원격 클라이언트에 로컬 계층에 대해 알리기 위해 클라이언트는 해당 유형의 메시지를 보내야 합니다. 이 알림은 적절한 계층의 생성자로 래핑되어야 합니다.클라이언트가 원격 클라이언트에게 로컬 계층에 대해 알려야 하는 경우는 두 가지입니다.로컬 클라이언트가 새로운 비밀 채팅 레이어를 지원하기 위해 업데이트 된 직후. 이 경우 알림은 현재 존재하는 모든 비밀 채팅에 전송해야합니다. 이는 비밀 채팅 구현의 변경 사항이 포함 된 새 레이어로 업데이트 할 때만 필요합니다(예: 클라이언트가 레이어 46 에서 레이어 47 로 업데이트 될 때이를 수행 할 필요가 없습니다).