정적 사이트 기반 탈중앙 소셜 네트워킹 s@ (sAT Protocol)

2 weeks ago 9

  • 정적 웹사이트를 이용한 탈중앙 소셜 네트워킹 프로토콜로, 각 사용자가 자신의 데이터를 직접 소유하고 관리하는 구조
  • 모든 데이터는 암호화된 JSON 저장소에 보관되며, 브라우저 클라이언트가 피드를 집계하고 게시물을 발행
  • 서버나 릴레이 없이 친구 간 웹사이트와 브라우저 간 직접 통신으로 작동
  • 사용자의 도메인 이름이 곧 신원이며, HTTPS/TLS를 통해 인증
  • 단순한 구조로 자기 주권형 소셜 네트워크를 구현, 개인 간 신뢰 기반 교류에 초점

sAT Protocol 개요

  • s@는 정적 사이트 기반의 탈중앙 소셜 네트워킹 프로토콜로, 각 사용자가 자신의 웹사이트에 데이터를 저장
    • 모든 데이터는 암호화된 JSON 파일 형태로 저장되며, 브라우저 클라이언트가 이를 읽고 게시물 발행 및 피드 집계 수행
    • 중앙 서버나 릴레이 없이 작동하며, 데이터는 사용자의 사이트에서 친구의 브라우저로 직접 이동
  • 상호 팔로우 관계가 있어야 게시물 교류가 가능하며, 인플루언서 중심 구조를 배제
  • 프로토콜은 GitHub Pages 등 특정 호스팅 서비스에 종속되지 않음

신원(Identity)

  • 사용자의 도메인 이름이 신원 역할을 수행
  • HTTPS/TLS를 통해 도메인 소유자가 콘텐츠를 게시했음을 인증

디스커버리(Discovery)

  • https://{domain}/satellite/profile.json 경로에서 프로토콜 버전과 공개키를 제공 { "satproto_version": "0.1.0", "public_key": "<base64-encoded X25519 public key>" }
  • 기본 경로 /satellite/ 외에 다른 경로를 사용할 경우, .well-known/satproto.json 파일로 실제 저장소 위치 지정 가능

암호화 모델(Encryption Model)

  • 모든 사용자 데이터는 암호화된 JSON 저장소에 저장되며, 사용자와 팔로워만 복호화 가능
  • X25519 키쌍을 사용해 공개키를 profile.json에 게시하고, 개인키는 브라우저 localStorage에 저장
  • 게시물 데이터는 XChaCha20-Poly1305로 암호화되며, 콘텐츠 키는 팔로워별로 libsodium의 crypto_box_seal로 암호화
  • keys/_self.json 파일에는 사용자의 콘텐츠 키와 게시 비밀정보가 포함되어 있으며, 본인만 복호화 가능

키 회전 및 언팔로우

  • 언팔로우 시 새로운 콘텐츠 키를 생성하고 모든 게시물을 재암호화
  • 남은 팔로워에 대해 새 키 봉투를 생성하고 keys/_self.json 갱신
  • 언팔로우된 사용자는 더 이상 게시물을 복호화할 수 없음

복호화 흐름

  • 방문자가 친구의 사이트를 방문하면, 자신의 개인키로 keys/{follower-domain}.json을 복호화하여 콘텐츠 키 획득
  • 이후 posts/index.json과 개별 게시물(posts/{id}.json.enc)을 가져와 복호화

데이터 구조(Data Schema)

  • 각 게시물은 개별적으로 암호화된 파일로 저장되며, posts/index.json은 게시물 ID를 최신순으로 나열
  • 게시물 객체 예시: { "id": "20260309T141500Z-a1b2", "author": "alice.com", "created_at": "2026-03-09T14:15:00Z", "text": "Hello, decentralized world!", "reply_to": null, "reply_to_author": null }
  • 게시물 ID는 ISO8601 UTC 타임스탬프와 4자리 랜덤 해시로 구성

팔로우 목록(Follow List)

피드 집계(Feed Aggregation)

  • 클라이언트는 팔로우 목록을 읽고 각 팔로워의 게시물을 복호화하여 시간순 피드를 구성
  • 게시물은 created_at 기준 내림차순으로 정렬

댓글(Reply)

  • 댓글은 reply_to와 reply_to_author 필드가 설정된 게시물
  • 중첩 댓글은 지원하지 않으며, 최상위 게시물에만 직접 댓글 가능
  • 원 게시물을 볼 수 없는 경우(비팔로우 상태 등) 댓글은 표시되지 않음

게시(Publishing)

  • 새 게시물 생성 → 콘텐츠 키로 암호화 → 정적 사이트에 업로드 → posts/index.json 갱신
  • 업로드에는 GitHub Contents API 등 사용 가능
  • 게시 비밀정보는 keys/_self.json에 암호화되어 저장

정적 사이트 구조 예시

{domain}/satellite/ profile.json # 공개키 및 프로필 posts/ index.json # 게시물 ID 목록 {id}.json.enc # 암호화된 게시물 follows/ index.json # 팔로우 목록 keys/ _self.json # 콘텐츠 키 및 자격정보 {domain}.json # 팔로워별 콘텐츠 키

FAQ

  • “RSS + 암호화인가?” → 예
  • “AT Protocol에서 파이어호스 없는 버전인가?” → 예
  • “확장성 있는가?” → 아니오 (“우정도 확장되지 않는다”)
  • “s는 slow/shitty의 약자인가?” → 예
  • “자가 호스팅 가능한가?” → 예, 단 CORS 활성화 필요

Read Entire Article