1P by GN⁺ | ★ favorite | 댓글 1개
  • Bluesky 계정은 특정 앱에 묶이지 않고 atproto 기반의 여러 앱에서 사용할 수 있으며, DID(탈중앙 식별자) 가 앱과 분리된 신원 확인 기반을 제공함
  • DID는 did:<method>:<identifier> 형식이며, DID Document에 담긴 공개 키와 PDS 위치를 이용해 게시물 작성자와 계정의 연관성을 검증함
  • did:web은 도메인의 /.well-known/did.json을 조회하는 단순한 방식이지만, DNS·등록기관 의존성과 웹 서버 중단, 문서 변경 반영 지연에 취약함
  • Bluesky가 만든 did:plc는 ID를 특정 도메인에서 분리하고 plc.directory가 운영 부담을 맡지만, DNS 대신 plc.directory를 신뢰해야 하며 Bluesky에서는 블록체인 기반 DID 방식 등을 사용할 수 없음
  • 사용자는 추가 키 등록과 키 순환, 자체 PDS 운영을 통해 Bluesky가 만든 키를 제거하고 신원을 실질적으로 직접 통제할 수 있으며, 복잡한 키 관리를 모두에게 강제하지 않고 원하는 사람에게 선택권을 제공함

Bluesky 계정과 DID 기반 신원

  • “Bluesky 계정”은 Bluesky에서만 쓰는 계정이 아니라 ATmosphere의 여러 애플리케이션에서 사용할 수 있는 계정임
  • Bluesky와 다른 앱의 기반 프로토콜인 atproto는 사용자가 누구인지 나타내고 로그인이나 게시물 작성자를 확인하기 위해 DID를 사용함
  • W3C가 2022년에 표준화한 DID는 애플리케이션에서 신원의 기반으로 사용할 수 있는 탈중앙 식별자임
  • DID의 탈중앙성은 단일 기관이 유효한 DID 유형을 결정하는 대신, 사용자가 자신의 신원을 검증할 DID 메서드를 선택할 수 있다는 데 있음
  • 다만 애플리케이션이 모든 DID 메서드를 자동으로 처리하지는 못함
    • 메서드마다 지원 코드를 별도로 구현해야 함
    • 앱이 foo 메서드를 지원하지 않으면 did:foo:1243을 제시해도 해석할 수 없음

DID와 DID Document

  • 예시 DID did:plc:3danwc67lo7obz2fmdg6jxcr은 콜론으로 구분된 세 부분으로 구성됨
    • 스킴: did
    • 메서드: plc
    • 메서드별 식별자: 3danwc67lo7obz2fmdg6jxcr
  • DID를 사용하려면 이를 DID Document로 해석해야 함
  • DID Document는 DID 주체나 위임자가 자신을 인증하고 해당 DID와의 연관성을 증명할 수 있도록 암호학적 공개 키 등의 데이터를 담음
  • 예시 문서에는 신원 검증에 필요한 정보가 포함됨
    • id: DID 자체
    • alsoKnownAs: at://steveklabnik.com
    • verificationMethod: Multikey 유형과 publicKeyMultibase
    • service: AtprotoPersonalDataServer 유형의 PDS 엔드포인트
  • 임의의 게시물이 특정 사용자가 작성했다고 주장할 때, 문서의 검증 정보를 이용해 해당 주장의 진위를 확인할 수 있음
  • DID를 문서로 해석하는 절차는 메서드별 표준이 정함
    • did:plc는 PLC 표준을 따름
    • Bluesky가 지원하는 또 다른 방식인 did:web은 Web 방식으로 해석함

did:web의 해석 방식

  • did:web을 사용하는 사람은 매우 적지만 구조가 단순해 DID 해석 과정을 이해하기 쉬움
  • Liz Fong-Jones의 did:web:lizthegrey.com은 메서드별 식별자인 lizthegrey.com을 다음 URL 템플릿에 넣어 해석함
https://<id>/.well-known/did.json
  • 해당 URL에서 받은 DID Document에는 다음 정보가 담김
    • id: did:web:lizthegrey.com
    • alsoKnownAs: at://web.lizthegrey.com, did:plc:i4tfenpfog244rxry5uz4vtk
    • verificationMethod: atproto용 Multikey 공개 키
    • serviceEndpoint: https://pds.lizthegrey.com

did:web이 안고 있는 제약

  • did:webDNS와 도메인 등록기관에 의존함
    • 등록기관이 도메인을 회수하면 DID 통제권도 잃음
    • 도메인을 더 이상 사용하지 않거나 만료 후 다른 사람이 구매해도 신원을 잃을 수 있음
    • 등록기관 계정이 해킹돼 도메인을 탈취당하는 경우도 마찬가지임
  • DID Document를 제공하는 웹 서버를 계속 실행해야 하며, 서버가 중단되면 문서도 가져올 수 없음
  • DID Document 변경 사실을 클라이언트에 즉시 알릴 방법도 없음
    • 애플리케이션이 오래된 문서를 계속 사용할 수 있음
    • 문서 갱신과 애플리케이션 반영 사이의 지연으로 최신 문서를 다시 가져올 때까지 일시적인 문제가 생길 수 있음

did:plc가 바꾸는 신원 유지 방식

  • Bluesky는 did:web의 문제를 줄이기 위해 did:plc를 개발함
  • did:plc는 전체 DID를 다음 URL 템플릿에 넣어 DID Document를 가져옴
https://plc.directory/<did>;
  • URL을 조회한다는 점은 did:web과 같지만, 운영과 신원 유지 방식이 다름
    • DID가 특정 도메인에 묶이지 않아 steveklabnik.com을 만료시키고 steve.klabnik.com으로 옮겨도 동일한 DID를 유지할 수 있음
    • 웹 서버 운영은 사용자 대신 plc.directory가 맡으므로 운영 부담이 줄어듦
  • 신뢰 대상 자체가 사라지는 것은 아님
    • did:web에서는 DNS와 도메인 등록기관을 신뢰해야 함
    • did:plc에서는 plc.directory가 ID를 빼앗지 않고 탈취당하지 않을 것이라고 신뢰해야 함
  • DNS와 plc.directory 모두 신뢰할 수 없다고 보는 사용자는 블록체인 등으로 이름을 해석하는 다른 DID 메서드를 선택할 수 있음
  • 그러나 Bluesky가 이런 메서드를 지원하지 않으므로 Bluesky 애플리케이션에서는 사용할 수 없음

접근성 문제와 새로운 DID 방식

  • did:web을 직접 설정하려면 비전문 사용자에게 부담스러운 작업이 필요함
    • 도메인을 등록하고 지속적으로 비용을 지불해야 함
    • 웹 서버를 설정하고 DID Document용 JSON을 작성해야 함
    • 서버를 계속 가동해야 함
    • 개인 키를 저장하고 안전하게 관리해야 함
  • 이 과정은 일반적인 웹 앱 가입보다 훨씬 복잡해, 비전문 사용자도 플랫폼을 이용하게 하려는 Bluesky의 목표와 맞지 않음
  • plc.directory가 관련 작업을 관리하면 사용자가 이 단계를 직접 수행하지 않아도 됨
  • did:webvhdid:web을 확장해 일부 단점을 보완하려는 방식으로 1.0에 도달했지만, 구체적인 명세까지 비교 대상에 포함되지는 않음

Bluesky에서 신원을 직접 소유하는 방법

  • 기본 설정에서는 Bluesky가 사용자의 키 쌍을 생성하고 비밀 키에 접근할 수 있으므로, 어떤 의미에서는 Bluesky가 신원을 소유한다고 볼 수 있음
  • did:plc는 ID에 추가 키 쌍을 등록하고 서명 키를 순환할 수 있음
    • Bluesky가 생성한 키를 제거할 수 있음
    • 사용자가 직접 만든 키로 교체할 수 있음
  • 키를 바꾸는 것만으로 Bluesky 인프라와 완전히 분리되지는 않음
    • PDS가 게시물에 서명하려면 사용자의 키를 사용해야 함
    • Bluesky 관리형 PDS를 사용하면 일반적으로 키가 Bluesky 인프라에 저장됨
  • Bluesky와 신원을 분리하려면 자체 PDS를 운영한 뒤 키를 순환해야 함
    • 키가 사용자가 소유한 인프라에 저장됨
    • 이후 Bluesky는 해당 키를 통제하지 못함
  • 대부분의 사용자가 자체 PDS와 키 관리를 선택하지 않더라도, 동기가 있는 사용자가 신원을 실질적으로 소유할 수 있다는 점은 중요한 설계 속성임
  • 모든 사용자에게 직접 키 관리를 강제하기보다 원하는 사용자가 선택할 수 있게 하는 방식이 대부분의 사용자에게 적절함

댓글과 토론

Lobste.rs 의견들
  • plc.directory는 처음에는 Bluesky가 통제했지만, 현재 스위스 비영리단체로 독립하는 절차를 밟고 있음
  • 솔직히 DID는 대형 기술 기업의 통합 인증(SSO)보다 나은 해법이다. 다만 did:plc:처럼 일반인도 쓸 수 있어야 하며, 비영리단체 소유라도 중앙 기관을 완전히 신뢰할지는 고민해야 함
    Keybase를 재구현하면서 W3C DID와 W3C 검증 가능 자격증명(VC)을 지원하는 프로젝트를 개발 중이다. 인간임을 고유하면서도 비공개로 증명하고, 자신이 통제하는 탈중앙화 신원을 갖게 하는 것이 목표다
    • 혹시 FOKS를 개발 중인가, 아니면 다른 프로젝트인가?
      https://foks.pub/
  • 제목만 보고 DID 명세로 연결될 줄 알았는데, 실제 글도 짧고 유익함
    • 글의 첫 번째 링크가 바로 명세 링크
  • 오늘 알게 된 사실: DID는 Docker in Docker가 아니었음
    • Docker in Docker를 DID로 읽을 수도 있다는 걸 처음 알았다. 늘 DinD 또는 더 헷갈리는 dind로 줄여 들었는데, 직장 내 관행인지 일반적인 표기인지는 모르겠음
    • Direct Inward Dialing을 뜻하는 것도 아님
  • Bluesky를 사용하지 않는 독자를 위해 PDS가 무엇인지 정의해 줄 수 있나?
    • PDS는 Personal Data Server로, 게시물 같은 콘텐츠의 원본 서버를 뜻함
    • Bluesky/AT는 모든 사용자의 게시물을 단일 대형 데이터베이스에 넣는 대신, 각 사용자가 PDS라는 개별 데이터 저장소를 갖는 구조다. Bluesky가 제공하는 PDS를 쓰거나 직접 호스팅하거나 제3자 서비스를 이용할 수 있고, 계정 이력 전체를 유지한 채 PDS 사이를 투명하게 이전할 수도 있음
      Mastodon의 인스턴스와는 같지 않으며, AT와 ActivityPub의 개념은 일대일로 깔끔하게 대응하지 않음
  • did:web.well-known 서버를 호스팅해야 하고 데이터도 거의 정적이라면, 왜 TXT 레코드처럼 URL과 비슷하게 읽을 수 있고 캐시될 가능성이 높으며 우발적으로 중단될 가능성은 낮은 DNS를 직접 사용하지 않는가?
    DNS 의존성과 did.json 갱신을 쉽게 감지할 수 없다는 문제는 남지만, 특정 도메인을 개인의 신원과 연결하려는 목적이라면 구성 요소를 최소화하고 DNS 기능에 직접 연결하는 편이 나아 보인다. 이 방식이 작동하지 않거나 현실적으로 어려운 이유가 있는지 궁금함