Browser-End-to-End Relay

암호화 채팅방 실험실

서버에는 평문 메시지를 두지 않고, 브라우저가 공개키를 교환한 뒤 생성한 방 키로 메시지를 암호화해 저장하는 단일 PHP 채팅방입니다. 방 생성, 참가, 자동 만료 메시지, 방 유지시간, 폴더 단위 저장 구조를 한 화면에서 다룹니다.

브라우저 공개키 교환 AES-GCM 메시지 암호화 메시지 TTL 자동 삭제 30일 무접속 방 정리
저장 단위 방마다 별도 폴더 생성

meta.json, participants.json, messages.json로 분리해 저장합니다.

공유 규칙 입장코드 + 방장 지문

입장코드 뒤에 #지문을 붙이면 참가자가 공개키 바꿔치기를 바로 비교할 수 있습니다.

방 정리 정책 수동 유지시간 + 무접속 삭제

방장 설정이 없더라도 30일 동안 아무도 접근하지 않으면 폴더 전체를 정리합니다.

초기 화면 준비 완료: 방을 만들거나 입장해 주세요.
Quick Join

공유받은 코드로 바로 입장

공개방과 비공개방 입장을 같은 패널에서 처리합니다. 비공개방이면 초대코드까지 입력하면 됩니다.

입장 직후 키 교환 암호문만 저장
공유 팁

입장코드 뒤에 #방장공개키지문을 함께 전달하면 참가자가 서버 응답 지문과 직접 비교할 수 있어 안전합니다.

Room Setup

새 채팅방 만들기

방 코드는 직접 지정하거나 비워 두고 랜덤 생성할 수 있습니다. 초대코드를 넣으면 비공개방으로 바뀝니다.

체크하지 않으면 30일 무접속 정리 정책만 적용됩니다.

저장 구조

방 생성 시 폴더를 하나 만들고 그 안에 메타, 참가자, 메시지를 파일로 분리 저장합니다. 이 구조는 단일 PHP 파일이어도 상태를 읽고 복구하기 쉽게 유지합니다.

How It Works

사용 흐름

초기 진입부터 암호화 대화가 열릴 때까지의 흐름입니다.

  1. 방장은 브라우저에서 공개키 쌍과 방 대칭 키를 만들고, 서버에는 방 메타와 공개키 정보만 저장합니다.
  2. 참가자는 입장 시 자신의 공개키를 올리고, 방장은 각 참가자 공개키로 방 키를 래핑해 전달합니다.
  3. 메시지는 브라우저에서 AES-GCM으로 암호화한 뒤 전송하며, 서버에는 암호문과 IV만 남습니다.
  4. 메시지 TTL이 지나면 정리되고, 방은 유지시간이 끝나거나 30일 무접속 상태가 되면 폴더 단위로 삭제됩니다.
Rules

현재 운영 규칙

지금 구현된 권한과 자동 정리 정책입니다.

메시지 삭제 권한
공개방에서는 방장만 임의 메시지를 삭제할 수 있고, 비공개방에서는 참가자 누구나 삭제할 수 있습니다.
메시지 수정 권한
메시지 수정은 작성자 본인만 가능하며, 수정됨 표시는 대화 목록에 남습니다.
자동 정리 정책
방 유지시간을 쓰지 않아도 마지막 접근 이후 30일이 지나면 방 폴더 전체가 제거됩니다.
Live Room

현재 채팅방

암호화 채널을 준비하는 중입니다.

공개방 참가자 모드 참가자 0명
입장 코드 -

공유용 코드는 우측 패널에서 바로 복사할 수 있습니다.

메시지 정책 기본 30초 자동삭제

메시지마다 개별 TTL을 다시 지정해서 보낼 수 있습니다.

방 보존 30일 무접속 시 자동 정리

별도 유지시간이 없으면 무접속 방만 정리합니다.

암호화 상태 키 배포 대기

키 교환이 끝나면 메시지를 브라우저에서 바로 복호화합니다.

Conversation

메시지 흐름

메시지는 암호화 후 전송되며, Ctrl+Enter로 바로 보낼 수 있습니다.

메시지 0건 삭제 규칙 확인 중
아직 대화가 열리지 않았습니다.

방을 만들거나 입장한 뒤 키 교환이 완료되면 메시지 영역이 활성화됩니다.