요약

  • 유즈넷의 취소(cancel) 자체가 뉴스 시스템을 통해 배포되는 하나의 제어 기사였습니다. 취소는 Message-ID로 대상을 지정했지만 네트워크상의 모든 사본을 회수할 수는 없었습니다.
  • 각 서빙 에이전트는 자체 권한 검사를 적용했으며, 요청을 수락하거나 무시하거나 사전 기록할 수 있었습니다.Supersedes도 동일한 철회 논리를 사용했습니다.
  • Cancel-Lock과 Cancel-Key는 나중에 철회 승인을 위한 암호학적 사전 약속을 제공했지만, 기사 전체의 무결성, 보편적 신원 확인 또는 강제 삭제를 보장하지는 않았습니다.

세 개의 사이트, 하나의 요청, 존재하지 않는 전역 상태

한 게시물이 유즈넷을 통해 퍼지기 시작했다고 가정해 봅시다. 한 사이트에서는 이미 로컬 스풀에 들어 있습니다. 다른 사이트에서는 관리자가 원격 취소를 수락하지 않기로 결정했습니다. 세 번째 사이트에서는 라우팅이 본문보다 취소 기사를 먼저 전달했습니다.cancel <Message-ID>를 담은 제어 기사는 철회하려는 콘텐츠와 같은 뉴스 배포 인프라를 따라 이동하지만, 세 가지 서로 다른 결과를 낳습니다.

첫 번째 서빙 에이전트는 대상을 사용할 수 없게 만듭니다. 두 번째는 자신의 사본을 그대로 둡니다. 세 번째는 작은 부정 지식 조각을 저장합니다. 지정된 기사가 나중에 나타나면 거부하라는 것입니다. 요청은 공통이지만, 상태와 권한은 로컬입니다.

이러한 분리는 중앙 기능으로 여겨지던 것을 둘러싼 우연한 공백이 아니었습니다. 1983년에 발표된RFC 850은 제어 메시지가 일반 USENET 메시지와 동일한 메커니즘으로 이동한다고 기술했습니다. 또한 구현자와 관리자에게 이를 자동으로 실행할지 사람의 판단에 넘길지 결정을 남겨두었습니다. 취소는 단일 마스터 사본에 내려지는 명령이 아니라, 수신자가 무엇을 할 수 있는지에 대한 뉴스로 네트워크에 진입했습니다.

“cancel”이라는 단어는 이 아키텍처를 가릴 수 있습니다. 중앙 문서 저장소에서는 사용자가 하나의 인증된 요청으로 권위 있는 기록을 변경할 것이라고 기대할 수 있습니다. 유즈넷에는 그런 기록이 없었습니다. 유즈넷은 기사를 교환하는 저장소들의 연합체였습니다. 프로토콜은 철회 요청을 운반하고 대상을 식별할 수 있었지만, 모든 복제본에 대한 관할권을 만들어낼 수는 없었습니다.

Message-ID는 대상을 지정했지만 청구자를 증명하지 않았다

취소의 피연산자는 Message-ID였습니다. 초기 사양에서cancel <message ID>는 사이트에 해당 기사가 로컬에 존재하는 경우 이를 취소해 달라고 요청했습니다.RFC 1036은 1987년에 그 형식을 유지했고, 전달을 로컬 역량에 묶었습니다. 기사를 취소할 수 없는 시스템은 요청을 이웃에게 전달하지 말아야 한다는 것입니다.

식별자는 한 가지 문제를 깔끔하게 해결했습니다. 철회는 사본이 서로 다른 디스크, 경로, 도착 순서에 있더라도 동일한 논리적 기사를 가리켜야 했습니다. Message-ID가 그 안정적인 이름을 공급했습니다. 그러나 다음 질문에는 답하지 못했습니다. 이 요청자가 왜 사이트가 서빙하는 내용을 변경할 권한을 가져야 하는가?

초기 넷뉴스는 실용적으로 답했습니다. 저자나 로컬 슈퍼유저가 취소할 수 있었고, 구현체는 Sender나 From 필드를 비교했습니다. 협력 사이트들 사이에서 기사 헤더가 자유롭게 이동하던 환경에서의 운영상 검사였습니다. 강력한 인증 시스템은 아니었습니다. 원래 발신자와 비슷한 문자열은 헤더에 대한 증거일 뿐, 동일한 사람이나 신뢰된 에이전트가 나중의 요청을 발행했다는 증명이 아닙니다.

성숙한 아키텍처는 이 한계를 명시적으로 만들었습니다.RFC 5537은 필수 Sender/From 비교를 제거했습니다. 이는 보안을 제공하지 않고 은폐를 조장했기 때문입니다. 기본 아키텍처는 그 대신 보편적인 발신자 신원 서비스를 도입하지 않았습니다. 권한 검사는 로컬이거나, 표준화되지 않았거나, 사람의 판단에 맡겨질 수 있었습니다. 수신 에이전트는 제어 기사에 따라 행동할 의무가 결코 없었습니다.

여기가 결정적인 역사적 전환점입니다. 사양은 쉽게 복제 가능한 신원 필드가 충분한 보안 경계라는 가장을 버렸습니다. 유즈넷을 중앙 집중화함으로써 거버넌스 문제를 해결하지 않았습니다. 대신 경계를 드러내 각 사이트가 자체적인 권한 결정을 내릴 수 있게 했습니다.

취소는 취소 대상보다 먼저 도착할 수 있었다

배포는 하나의 전역 순서를 보존하지 않습니다. 취소 기사가 더 빠른 경로를 타고 어떤 사이트의 피드에 먼저 들어가거나, 원본이 지연되는 동안 먼저 도착할 수 있습니다. 따라서 RFC 5537은 사전 취소(pre-cancellation)를 기술합니다. 서빙 에이전트는 대상 Message-ID를 기억하고, 원본이 나중에 나타나면 거부합니다.

기억된 식별자는 복제 시스템의 묘비(tombstone)처럼 동작합니다. 대상이 지금은 없더라도 특정 객체를 받아들여서는 안 된다는 뜻입니다. 이것이 없으면 서버는 취소를 수락한 뒤 그 사건을 잊고, 늦게 도착한 사본을 받아들여 게시물을 부활시킨 것처럼 보일 수 있습니다.

그러나 묘비는 로컬입니다. 다른 서버는 취소를 받지 못할 수도 있고, 사전 취소 기록을 너무 일찍 만료시킬 수도 있고, 그런 기록을 사용하지 않기로 할 수도 있습니다. 취소가 원본을 본 인구에 도달하도록 비슷한 Newsgroups 필드를 사용하는 것이 권장되지만, 동일한 전달이 보장되지는 않습니다. 중재(moderated) 뉴스그룹에서는 제어 기사가 해당 커뮤니티의 Approved 필드 규칙도 통과해야 합니다.

같은 분리가Supersedes에도 적용됩니다.RFC 5536은 이전 기사를 지목하는 이 필드를 정의하고, RFC 5537은 서빙 에이전트에 그 철회 효과를 취소와 동일한 권한 검사로 처리하도록 지시합니다. 대체 기사는 마법적인 소유권 증거가 아닙니다. 새 콘텐츠에 이전 Message-ID에 관한 요청을 더한 것입니다.

제어 기사는 악용 표면을 만들었다

다른 메시지를 사라지게 할 수 있는 메시지는 정당한 게시자와 공격자 모두에게 가치가 있습니다. 위조된 취소는 발언을 억압하거나 뉴스그룹을 교란할 수 있었습니다. 광범위한 자동 취소는 스팸에 대응할 수 있었지만, 한 저자가 실수를 고치는 수준을 훨씬 넘어선 정책 선택을 담을 수도 있었습니다.

RFC 2635는 반복되거나 대규모로 교차 게시된 넷뉴스 메시지에 대한 운영 대응 중 하나로 취소봇(canclebot)을 기록합니다. 이는 관리자들이 원치 않는 배포의 압력을 다루는 도구를 개발했다는 증거입니다. 모든 봇에 보편적 권한을 부여하는 헌장은 아닙니다. 취소봇조차도 로컬 정책의 세계로 요청을 보냈습니다.

RFC 5537은 인증 문제의 결과를 언급합니다. 많은 사이트가 악용과 권한 판단의 어려움 때문에 취소와 Supersedes를 무시했다는 것입니다. 거부는 반드시 프로토콜의 실패는 아니었습니다. 위조 가능한 제어 평면에 대한 하나의 가능한 정책 대응이었습니다.

이 때문에 취소는 인터넷 제도 설계의 유용한 사례가 됩니다. 열린 전송 계층은 하나의 주권자에 합의하지 않고도 요청을 조정할 수 있습니다. 그 유연성은 네트워크를 연합 상태로 유지하지만, 어려운 판단을 가장자리로 밀어냅니다. 자동 실행은 위조 비용을 높이고, 일괄 거부는 실수 수정과 스팸 억제 비용을 높입니다.

락은 키가 필요해지기 전에 약속되어 있었다

2018년에 발표된RFC 8315는 더 좁은 암호학적 답을 공급했습니다. 원본 프로토 기사는 비밀 재료에서 파생되되 그 비밀을 드러내지 않는 해시인Cancel-Lock을 담을 수 있습니다. 나중의 취소 기사나 Supersedes가 있는 기사는Cancel-Key를 담습니다. 참여 에이전트는 키를 변환하고 원본 기사에 이미 약속된 락과 일치하는지 검사합니다.

시점이 중요합니다. 청구자는 불편한 사본을 지우기로 결정한 뒤에야 권한을 만들어내는 것이 아닙니다. 철회 능력은 기사가 시스템에 진입하는 시점에 준비됩니다. 게시자, 게시 에이전트, 중재자 또는 주입 에이전트가 락을 가질 수 있어, 서로 다른 정당한 행위자들이 각자의 철회 경로를 유지할 수 있습니다. 주입 이후의 릴레이는 락을 재작성해서는 안 됩니다. 여러 락이 존재할 때, 유효한 락 하나에 대응하는 비밀이 검증 절차상 취소 승인에 충분할 수 있습니다.

이 메커니즘은 정확히 하나의 질문에 답합니다. 나중의 요청자가 이전 기사에 배치된 철회 약속에 묶인 지식을 보여주는가? 그러나 이웃한 모든 질문에는 답하지 않습니다. RFC 8315는 Cancel-Lock이 기사 전체의 무결성을 제공하지 않는다고 밝힙니다. 다른 부분은 변경되었을 수 있습니다. 이는 민사 신원을 게시물에 묶지 않습니다. 로컬 사이트가 더 많은 증거를 요구하거나 모든 취소를 무시하는 것을 막지 못합니다. 그리고 참여하지 않는 아카이브나 서버에는 도달할 수 없습니다.

IANA Netnews Parameters 레지스트리는 해시 알고리즘 이름과 용도 상태를 기록합니다. SHA-256은 RFC 8315가 기술하는 필수 알고리즘이며, 레지스트리는 폐기된(obsolete) MD5 항목과 제한적 사용의 SHA-1을 포함한 다른 상태들도 나열합니다. 등록은 해석을 조율할 뿐, 몇 개의 서버가 이 필드를 배포하는지 또는 증명이 얼마나 자주 성공하는지는 보여주지 않습니다.

철회, 권한 승인, 삭제는 서로 다른 기록이다

전체 사슬에는 최소 다섯 가지 사실이 담겨 있습니다. 누군가 철회 요청을 만들었다. 요청은 Message-ID를 지목했다. 한 사이트가 이를 받았다. 사이트는 권한 증거를 수락하거나 거부했다. 사이트는 자신의 가용성 상태를 변경했거나 변경하지 않았다. 이 중 어떤 사실 하나만으로도 모든 사본이 사라졌음을 증명하지 못합니다.

아카이브는 명백한 한계지만 유일한 것은 아닙니다. 게이트웨이가 기사를 다른 시스템으로 변환했을 수 있습니다. 독자가 저장했을 수 있습니다. 어떤 피어는 취소가 전달되지 않은 경로를 통해 원본을 받았을 수 있습니다. 아카이브나 배포 동작을 요청하는 프로토콜 필드는 자율적 저장소들의 열린 집합에 정책을 강제할 수 없습니다.

따라서 Cancel-Key 검증이 성공한 후의 정직한 주장은 소박합니다. 이 참여 에이전트가 대상 기사의 락에 상대적으로 철회가 승인되었음을 보여주는 증거를 발견했다는 것입니다. 로컬 삭제 후의 정직한 주장도 소박합니다. 이 에이전트가 더 이상 자신의 사본을 서빙하지 않는다는 것입니다. “네트워크가 잊었다”는 주장은 증명, 정책, 복제, 보존을 결합해 어느 것도 지지할 수 없는 진술이 됩니다.

유즈넷의 설계는 복제된 데이터 위에 단일 “되돌리기” 제어를 보여주는 인터페이스에 대한 경고로 남아 있습니다. 버튼은 요청을 발신할 수 있습니다. 서명이나 프리이미지는 이를 승인할 수 있습니다. 큐는 이를 운반할 수 있습니다. 실행할 수 있는 것은 복제본의 보유자뿐이고, 그들의 합의조차 자신들의 통제를 벗어난 사본을 회수할 수 없습니다.

출처