tosstome 작동 원리

마지막 확인

tosstome는 Cloudflare Workers 위의 작은 서비스와 웹 페이지로 이루어져 있어요. 서버는 기기들을 서로 소개하고, 꼭 필요할 때만 데이터를 전달해요. 파일을 저장하는 일은 절대 없어요.

1. 서로 찾기

페이지를 열면 브라우저가 WebSocket으로 서버에 연결해요. 같은 공인 IP 주소에서 연결한 기기들, 보통은 같은 집이나 사무실 네트워크에 있는 기기들이 같은 그룹으로 묶여서 서로의 같은 네트워크 목록에 표시돼요. 주소는 사용하기 전에 해시 처리돼요. 서로 다른 네트워크에 있는 기기들은 6자리 코드로 임시 그룹을 만들어요.

2. 직접 연결하기

기기를 탭하면 양쪽이 서버를 통해 WebRTC 연결 정보를 주고받고, 직접 데이터 채널을 열어 보려고 해요. 이때 Cloudflare의 STUN 서비스로 집 공유기를 거쳐 서로에게 닿는 방법을 알아내요. 직접 연결된 WebRTC 채널은 브라우저가 종단 간 암호화해요(DTLS).

3. 릴레이로 전환하기

회사 방화벽, 게스트 Wi-Fi, 통신사 NAT(CGNAT)를 쓰는 모바일 망처럼 직접 연결을 막는 네트워크도 있어요. 몇 초 안에 직접 채널이 열리지 않으면 양쪽이 대신 Cloudflare의 릴레이에 연결해요. 릴레이는 각 조각을 도착하는 대로 전달하고 아무것도 보관하지 않아요. 릴레이를 오가는 트래픽은 TLS로 암호화되지만, 릴레이는 아직 종단 간 암호화가 아니에요. 로드맵에 올라 있어요.

4. 데이터 옮기기

브라우저와 명령줄 도구에서 같은 전송 프로토콜이 실행돼요. 작은 JSON 제어 메시지와 바이너리 조각으로 이루어져 있고, 받는 쪽이 수신 확인을 보내서 보내는 쪽이 느린 연결에 데이터를 쏟아붓지 않아요. 직접 채널에서든 릴레이에서든 똑같이 동작해요.

5. 수신함

명령줄 도구는 항상 켜 두는 수신함을 유지해요. 이때 비밀 키 두 개가 만들어져요. 컴퓨터에 남는 에이전트 키와, 수신함 링크의 # 뒤에 들어가는 전송 키예요. 브라우저는 링크의 그 부분을 서버로 보내지 않고, 키는 WebSocket 안에서 전달돼요. 서버는 두 키의 SHA-256 해시만 보관해요. 휴대폰이 링크를 열고 보내면, 서버는 브라우저 둘 사이에서와 똑같이 휴대폰과 컴퓨터 사이에서 WebRTC 연결 정보를 전달해요. 그래서 같은 네트워크에서는 파일이 네트워크 밖으로 나가지 않고 수신함 폴더로 바로 가요. 직접 채널이 열리지 않으면 양쪽이 대신 릴레이 세션을 써요. 명령줄 도구가 6자리 코드로 브라우저에 보낼 때나, 브라우저가 같은 네트워크 목록에서 명령줄 도구로 보낼 때도 같은 방식으로 직접 연결해요.

아직 만들지 않은 것

서비스가 무엇을 볼 수 있는지는 개인정보 보호 페이지를 읽어 보세요.

자주 묻는 질문

tosstome는 종단 간 암호화가 되나요?

직접 WebRTC 전송은 브라우저의 DTLS로 암호화돼요. 릴레이를 거치는 전송은 각 기기와 Cloudflare 사이가 TLS로 암호화되지만, 아직 종단 간 암호화는 아니에요.

WebRTC가 뭔가요?

실시간 P2P 연결을 위한 브라우저 표준으로, 화상 통화 앱에서 쓰여요. tosstome는 이 표준의 데이터 채널로 브라우저끼리 파일을 직접 보내요.

내 파일이 어딘가에 업로드되거나 저장되나요?

아니요. 네트워크가 허용하면 파일은 WebRTC로 한 기기에서 다른 기기로 바로 가요. 허용하지 않으면 Cloudflare의 릴레이를 거치는데, 릴레이는 도착하는 대로 바이트를 전달만 하고 아무것도 보관하지 않아요. 받는 쪽이 오프라인이면 아무것도 전송되지 않아요.

P2P인데 왜 인터넷이 필요한가요?

브라우저가 서로를 찾고 연결 정보를 주고받으려면 서버가 필요해요. 직접 연결된 뒤에는 파일 데이터가 기기 사이를 오가요.

관련 글

지금 바로 써 보세요

기기 두 대에서 toss2.me를 열어 보세요. 앱도 계정도 필요 없고, 아무것도 저장하지 않아요.

지금 파일 보내기