Peering

Peering / 블로그

Peering 릴레이가 볼 수 있는 것과 볼 수 없는 것

릴레이는 원격 데스크톱 세션의 중간에 있는 서버이므로, 올바른 질문은 무엇이 릴레이가 들여다보는 것을 막느냐입니다. 답은 릴레이가 절대 받지 못하는 키입니다.

하는 일

릴레이는 세 가지 일을 합니다. 서로 직접 닿지 못하는 두 기기를 소개하고, 그래도 닿지 못하면 둘 사이에서 바이트를 복사하며, “코딩 에이전트가 답을 기다립니다” 같은 푸시 알림을 Mac을 대신해 보냅니다. 작은 Rust 프로그램이며, 하는 일을 작게 유지하는 것이 곧 설계입니다.

아는 것

이 점을 솔직하게 말하는 것도 요점의 일부입니다. 일을 하기 위해 릴레이가 보는 것은 다음과 같습니다.

개인정보 처리방침에 전체 목록이 있습니다. 이 중 어느 것도 세션의 내용은 아닙니다.

볼 수 없는 것

화면, 소리, 클립보드, 키 입력, 포인터는 모두 두 기기에서 끝나는 암호화된 채널 안에 있습니다. 릴레이는 이를 읽거나 바꾸거나 재생할 수 없습니다. 이를 가능하게 하는 장치는 두 가지이며, 어느 쪽도 릴레이를 신뢰하는 데 의존하지 않습니다.

제어 채널은 기기 사이의 TLS입니다

세션이 릴레이를 거칠 때, iPhone은 릴레이를 통해 Mac과 TLS 1.3 핸드셰이크를 수행합니다. 릴레이는 암호화된 레코드를 종료하지 않고 그대로 복사하므로 세션 키를 가진 적이 없습니다. 양쪽은 페어링할 때 고정해 둔 키로 인증하므로, 릴레이가 끼어들려 하면 iPhone이 연결을 거부합니다.

영상 키는 릴레이를 거치지 않습니다

영상은 UDP를 통한 다른 길로 가므로 자체 키가 필요합니다. 세션이 준비되면 Mac이 무작위 32바이트를 만들어 TLS 스트림 안에서 iPhone에 보냅니다. 릴레이는 그 스트림을 운반하지만 열 수는 없습니다. 그다음 각 방향이 HKDF-SHA256으로 자기 키를 도출하고, 모든 데이터그램은 ChaCha20-Poly1305와 카운터로 봉인됩니다.

key = HKDF-SHA256(secret, salt = "pl.dmq.peering.video-datagram", info = direction)
datagram = token | counter | ciphertext | tag

맨 앞의 16바이트 토큰이 릴레이가 읽는 유일한 부분입니다. 데이터그램이 어느 세션에 속하는지 알려 주는 라우팅 힌트이며, 릴레이는 전달하기 전에 이를 제거합니다. 그 뒤의 모든 것은 암호문입니다.

Peering 알림 두 개가 표시된 iPhone 잠금 화면: 터미널이 끝났다는 알림과 터미널이 승인을 기다린다는 알림.
푸시 알림에는 짧은 텍스트와 코드화된 상태만 담깁니다. 화면은 절대 포함되지 않습니다.

푸시 알림과 Live Activity

iPhone이 잠들어 있을 때 Mac은 릴레이에 Apple 푸시로 깨워 달라고 요청합니다. 그 푸시에 담기는 내용은 일부러 얇게 유지합니다. 알림에는 짧은 제목과 메시지, Live Activity 업데이트에는 ID, 상태, 개수, 시각 같은 코드화된 상태만 들어갑니다. Mac은 릴레이에 화면이나 터미널 출력을 절대 보내지 않습니다. 에이전트 승인에 대해서는 코딩 에이전트 알림을 참고하세요.

계정 대신 증명

무료 사용량은 무언가에 연결되어야 합니다. 계정 대신 기기가 자신의 키로 짧은 메시지에 서명하고, 릴레이는 5분 이내의 시간 창 안에서 서명을 확인합니다. 이렇게 하면 사용량이 초기화할 수 있는 ID가 아니라 키에 묶이며, 개인 키를 가진 사람이 아니면 등록된 Mac을 사칭할 수 없습니다.

직접 확인하세요

와이어 포맷은 문서화되어 있고, 릴레이는 하나의 제약을 중심으로 만들어졌습니다. 상대를 소개하고 암호화된 바이트를 복사할 뿐, 운반하는 것을 들여다보거나 바꾸거나 승인할 수 없습니다. 세션이 애초에 릴레이에 올라가는 과정은 iPhone은 어떻게 어디서나 Mac에 닿을까에서, 양쪽의 키가 신뢰받게 되는 과정은 계정 없는 페어링에서 읽어 보세요.

자주 묻는 질문

Peering의 릴레이는 내 화면을 볼 수 있나요?

아니요. 화면은 Mac이 릴레이가 열 수 없는 암호화된 연결 안에서 iPhone에 보낸 키로 봉인됩니다. 릴레이는 암호문만 복사합니다.

Peering의 릴레이는 나에 대해 무엇을 아나요?

기기 식별자, Mac의 이름, 사용 중인 플랜, 릴레이 사용량, 각 기기가 접속해 오는 네트워크 주소입니다. 영상, 오디오, 키 입력, 클립보드 내용은 보지 못합니다.