설치도 가입도 없는 메신저, Bytz

어떠한 중간 단계도 신뢰하지 않습니다. 그래서 모든 중간 단계를 제거했습니다.

HTML 파일 하나가 Bytz의 전부입니다. 그 파일을 상대와 공유하고 초대 키 한 줄만 전달하면 대화가 시작됩니다. 앱 스토어를 거치지 않아도 되고, 전화번호를 넘길 일도 없습니다. 지금 이 페이지를 띄운 브라우저 안에서 모든 게 돌아갑니다.

Telegram, Signal과 비교하면

항목 Telegram Signal Bytz
가입에 전화번호 필요 필수 필수 없음
앱 설치 / 스토어 의존 필요 필요 HTML 파일 1개
기본 1:1 대화 E2E Secret Chat에서만
받은 클라이언트 직접 확인 불가 불가 가능 (파일 해시)
메시지 ratchet 단위 재키잉 (100 msg / 1주) 메시지 단위 (Double Ratchet) 메시지 단위 (Double Ratchet)
대화 전체 초기화 가능 제한적 양쪽 기록 + 미전달 메시지 정리
Telegram과 Signal은 이미 암호화를 잘합니다. Bytz가 그것만을 위해 만들어졌다면 굳이 출시할 이유는 없었을 겁니다. Bytz의 강점은 사용자에게 최소한만 요구한다는 점입니다. 전화번호도 필요 없고 스토어 가입도 필요 없습니다. 대신 파일 해시부터 대화 종료까지 사용자가 직접 확인하고 통제할 수 있게 해두었습니다.

이렇게 흘러갑니다

설치도 가입도 따로 없고, 흐름은 단순합니다.

1. 파일을 받습니다

단일 HTML 파일 하나를 다운로드합니다. 무엇이 들어 있는지 직접 확인하고 싶다면 텍스트 편집기로 열어 코드를 그대로 읽어볼 수도 있습니다.

2. 방을 엽니다

브라우저에서 그 파일을 열고, 직접 정한 인증키로 방을 만듭니다. 인증키는 이 기기 바깥으로 나가지 않습니다. 잃어버리면 같은 방으로 돌아올 길이 없으니, 처음부터 안전한 곳에 따로 보관해 두세요.

3. 초대 키를 전달합니다

방 안의 설정에서 초대 키를 만들어 상대에게 보냅니다. 상대는 그 키와 자기만의 인증키로 입장하고, 이 시점부터 양쪽 세션이 자동으로 맞춰집니다. 인증키는 각자의 것이라, 상대 쪽으로 넘어가지 않습니다.

왜 이렇게 만들었나

전화번호도 이메일도 받지 않습니다

Telegram과 Signal은 가입 단계에서 전화번호를 요구합니다. 번호가 계정을 만들고, 계정이 대화를 묶고, 대화는 다시 번호로 돌아옵니다. 이 연결은 한 번 생기면 서비스 밖에서도 쉽게 풀리지 않습니다. Bytz에는 이 시작점이 없습니다. 방 키와 세션 키로만 연결하기 때문에, 받은 적 없는 정보가 어디선가 새어나갈 일도 없습니다.

기본 대화가 이미 E2E입니다

Telegram에서 종단 간 암호화된 대화를 하려면 Secret Chat 모드를 따로 열어야 합니다. 깜빡하고 일반 채팅으로 메시지를 보내면 서버에 평문이 남고요. Bytz는 그 선택을 없앴습니다. Secret Chat 같은 별도 모드가 있는 게 아니라, 그 모드만 있다고 보시면 됩니다.

서버는 대화 내용을 모릅니다

Bytz 서버가 하는 일은 양쪽 브라우저 사이에서 암호화된 프레임을 중계하는 것뿐입니다. 메시지 내용도, 복호화에 필요한 키도 서버에는 저장되지 않습니다. 서버가 실제로 보는 것은 참가자를 식별하기 위한 해시 값과 프레임의 길이 버킷 정도입니다. 대화의 본문이나 파일의 내용은 그 시야 바깥에 있습니다. 상대가 잠시 오프라인이라 메시지가 큐에 머물 때도 암호문 상태 그대로 보관되다가 전달되는 순간 삭제됩니다. 설령 서버가 털리거나 압수되더라도, 안에서 나오는 건 남이 풀 수 없는 암호문뿐입니다.

초대 링크도 서버를 스쳐 가지 않습니다

방을 연 쪽이 만든 초대 키는 참여자의 기기 안에서만 본인 증명에 쓰입니다. 서버에 올라가는 것은 공개 키 한 장뿐이고, 참여하는 순간에도 비공개 부분은 바깥으로 나가지 않습니다. 서버는 매번 새 난수를 던지고, 상대가 자기 자리에서 풀어낸 답만 받아 대조해 들여보냅니다. 초대 키가 서버 로그를 한 번도 스쳐 가지 않도록 설계된 경로입니다.

받은 파일을 직접 검증할 수 있습니다

메신저를 설치할 때 우리는 보통 앱 스토어를 믿고 받아서 씁니다. 그 파일이 진짜 공식 배포본인지 확인할 방법은 사용자에게 주어지지 않았죠. Bytz는 메인 화면에 HTML 해시 확인을 두었습니다. 이 파일의 SHA-256을 바로 뽑아서 공식 배포 해시와 대조해볼 수 있습니다. 코드 전체가 한 파일에 들어 있으니, 의심이 들면 열어서 직접 읽어볼 수도 있습니다.

키는 인증키 없이 꺼낼 수 없습니다

세션 ECDH 개인키는 extractable: false로 생성됩니다. 브라우저 API로 꺼내려 해도 거부되고, 대화 탭이 닫히면 메모리에서 함께 사라집니다. 장기 보관이 필요한 키는 브라우저 저장소에 남지만, 사용자가 정한 인증키에서 파생된 AES-GCM으로 싸인 뒤에야 기록됩니다. 기기 파일을 통째로 복사해 가더라도, 그 인증키가 없이는 안에 든 키를 다시 꺼내지 못합니다.

끝낼 때는 양쪽에서 같이 비웁니다

대화 초기화는 내 기기 기록만 지우는 버튼이 아닙니다. 상대방 기기의 기록도 함께 삭제되고, 아직 전달되지 않은 메시지까지 같이 정리됩니다. 일부 메시지를 되돌리는 “보낸 메시지 삭제”가 편집의 성격이라면, 대화 초기화는 폐기에 가깝습니다. 대화 자체를 양쪽이 동시에 닫는 쪽입니다.

이런 분들이 씁니다

제보자, 내부고발 준비자

개인 번호를 먼저 등록해야 한다는 게 부담스러운 상황. 연결해서 용건만 확인하고 흔적 없이 끝내야 할 때 적합합니다.

기자와 취재원

누가 누구와 연락했는지, 무슨 이야기를 했는지 양쪽 다 민감한 취재. 번호 없이 바로 시작할 수 있고, 대화가 끝나면 양쪽 기기에서 함께 정리됩니다.

보안 대응 인력

사고가 터졌을 때 평소 쓰는 계정과 엮이지 않은 채널을 긴급히 열어야 할 때. 파일 하나만 공유하면 3분 안에 대화 채널이 생깁니다.

평소 계정과 분리하고 싶은 대화

한 번의 협업, 일회성 외부 컨택, 누구와 무슨 이야기를 나눴는지가 평소 계정과 묶이지 않기를 바라는 자리. 연락처, 주소록, 평소 쓰는 메신저 계정 어디에도 흔적이 남지 않습니다.

실제로 뭐가 들어 있나

Double Ratchet

메시지를 보낼 때마다 사용하는 키가 한 칸씩 다음으로 넘어갑니다. 거기에 더해 답장이 오갈 때는 양쪽이 함께 만든 새 비밀로 키 자체를 한 번 더 갈아 끼웁니다. 어느 한 시점의 키가 노출되더라도, 그 앞과 뒤의 메시지까지 함께 풀리지는 않습니다.

PQ hybrid

ECDH(P-256) 위에 ML-KEM-768의 shared secret을 얹어 세션 키를 파생하고, 메시지 서명에는 ECDSA와 ML-DSA-65를 함께 맞물려 검증합니다. 지금의 암호 해독에도, 나중에 양자 컴퓨터가 등장한 뒤 돌이켜 해독하거나 위조하려는 시도에도 함께 대비합니다.

서명 + replay 차단

메시지든 세션 합의 신호든 대화 초기화 명령이든, 받는 쪽은 서명부터 확인합니다. 타임스탬프 허용 범위와 중복 검사 캐시를 함께 점검하기 때문에, 누가 예전 프레임을 잡아 두었다가 나중에 다시 흘려보내도 받아주지 않습니다.

6단어 검증 구문

긴 숫자 해시를 비교하라고 하면 아무도 안 합니다. Bytz는 상대 확인용 fingerprint를 6단어로 줄여서 보여줍니다. 사용자가 실제로 맞춰볼 수 있어야 검증도 의미를 가집니다.

padding + jitter

나가는 frame은 정해진 크기 bucket에 맞춰 padding을 채웁니다. 송신 직전에는 0–500ms의 jitter를 섞어 보내고요. 메시지 내용이 암호화돼 있어도 길이와 타이밍은 정보가 됩니다. 그 단서까지 흐립니다.

단일 HTML + CSP

외부에서 스크립트나 폰트, 이미지를 불러오지 않습니다. 브라우저의 콘텐츠 보안 정책(CSP)이 처음부터 외부 호출을 막아두기 때문에, 코드가 변조되더라도 거기서 데이터가 다른 서버로 빠져나갈 길은 없습니다. 검증할 대상이 한 파일에 모여 있으니, 누가 실제로 읽어보고 판단하기도 그만큼 수월합니다.

못 막는 것들

모든 보안 도구에는 바깥쪽 경계가 있습니다. Bytz가 무엇을 해결하지 않는지 먼저 밝혀두는 게 맞다고 봤습니다.

Bytz는 메신저가 사용자에 대해 최소한만 알도록 만들어진 실험입니다. 전화번호 없이, 설치 없이, 흔적을 최소화한 상태로 누군가와 연결될 수 있다면 어떤 대화가 가능해질까. 그 답은 실제로 써보셔야 나옵니다. 상단의 Bytz로 돌아가서 방을 하나 만들고 코드를 상대에게 보내주세요.