관리자는 절대 먼저 DM하지 않습니다
목차
1부 · 크립토 이전 시대

3. 최초의 방어자들

3장7 분 분량
점으로 이루어진 군중이 구멍 난 점의 벽을 밀어붙이고, 몇몇이 그 틈으로 빠져나간다. 한동안은 충분했지만 어느 순간부터는 아니었던, 새는 필터.

소음은 질서를 부른다. 커뮤니티 운영에 법칙이라 부를 만한 것이 있다면 이것이 가장 가깝다. 소음이 충분히 커지면, 방 안의 누군가가 그것을 멈추게 할 도구를 만든다. 모더레이션 봇(moderation bot)은 연구소에서 설계되거나 표준화 기구가 명세를 정한 물건이 아니었다. 현장의 응전이었다. 지칠 대로 지친 관리자들, 새벽 세 시에 똑같은 쓰레기가 화면을 스쳐 지나가는 광경을 백 번째 밤 지켜본 사람들, 그 짜증 속에서 계속 살기보다는 짜증을 자동화하기로 마음먹은 사람들이 즉석에서 만들어낸 것이었다. 최초의 방어자들은 보안 전문가가 아니었다. 스크립트 짜는 버릇과 쌓인 원한을 가진 그룹 주인들이었다.

그들이 무엇을 만들었는지 이해하는 일이 중요한 이유는, 그 도구에 새겨진 가정들이 이후 10년간 방어 생태계 전체가 물려받을 위협 모델을 규정했기 때문이다. 그 위협 모델은 당시로서는 합리적이었다. 그러나 동시에, 그때는 아무도 볼 수 없었던 방식으로, 크립토와 기계가 몰고 올 시대와 마주치는 순간 구조적으로 살아남을 수 없는 모델이기도 했다. 최초의 방어자들은 눈앞의 문제를 감탄스러운 속도와 재치로 풀어냈다. 다만 자신들이 실제로 어떤 문제를 풀고 있는지 몰랐을 뿐이다.

그들의 눈에 보였던 적의 형상

1세대 모더레이션 도구를 제대로 평가하려면, 그 도구가 상정한 적의 초상을 정확히 머릿속에 그려 두어야 한다. 크립토 이전 시대의 스팸, 곧 앞 장에서 다룬 소음의 목록에는 특유의 질감이 있었다. 대량이되 조잡했다. 스스로를 광고했다. 스패머는 그룹에 들어와 포르노 사이트나 불법 복제 소프트웨어 채널, 혹은 일확천금을 약속하는 크립토 언저리의 홍보 링크를 쏟아붓고는, 같은 짓을 무한 반복하거나 다음 방으로 옮겨 갔다. 공격자의 경제학은 기만이 아니라 도달에 기반했다. 앞 장의 표현을 빌리면, 무관심을 상대로 한 물량전이었다. 그들은 친구인 척 환심을 사려 들지 않았다. 가능한 한 싸게, 가능한 한 많은 눈앞에 페이로드(payload)를 들이미는 것이 목적이었다.

이 질감이 중요한 이유는, 탐지가 어떤 모습일 수 있는지를 그것이 결정했기 때문이다. 적이 같은 말을 반복하면 반복을 보고 잡을 수 있다. 적이 물량으로 밀어붙이면 초당 메시지 수를 세서 잡을 수 있다. 적이 이미 악성으로 알려진 목적지의 링크를 올리면 링크를 목록과 대조해서 잡을 수 있다. 적의 계정이 생성된 지 3분밖에 안 됐고 아무 이력이 없으면, 발언하기 전에 인간임을 증명하라고 요구해서 잡을 수 있다. 이 모든 것이 하나의 징표(tell)다. 메시지나 발신자의 관찰 가능한 속성 가운데, 이 시대에는 악의와 강한 상관관계를 갖던 속성 말이다. 최초의 방어자들은 이런 징표를 수확하는 데에 무기고 전체를 바쳤다. 그리고 그것은 통했다. 크립토 이전 시대의 징표는 정직했기 때문이다. 공격자들은 아직 숨는 데에 투자하지 않고 있었다.

모더레이션 봇의 정전(正典)이 태어난 세계는 이런 곳이었다. 스팸이 스팸처럼 보이고, 스팸처럼 행동하고, 행동에 주의를 기울이는 무엇에게든 잡히던 세계. 이 구절을 꼭 붙들어 두기 바란다. '행동에 주의를 기울이면 잡을 수 있다.' 이것이 고전적 방어 전체를 떠받치는 하중 가정이며, 이 책의 3부와 5부는 바로 이 가정이 무너지는 과정을 지켜보게 될 것이다.

이 가운데 어느 것도 한 플랫폼만의 이야기가 아니었고, 이 궤적이 얼마나 오래된 것인지는 앞 장에서 이미 보았다. 유즈넷(Usenet)은 그린카드 변호사들에게 캔슬봇(cancelbot)과 킬 파일(kill file)로 응수했다. IRC 운영자들은 호스트마스크(hostmask) 단위로 차단했고, 호스트마스크가 계정만큼이나 손쉽게 갈아치워지는 것을 지켜보았다. 이메일은 베이지언 필터를 만들고 발신 주소의 공유 차단 목록을 구축했다. 스팸하우스(Spamhaus) 모델인데, 눈을 가늘게 뜨고 보면 이것은 정확히 채팅 계정판 공유 차단 목록이다. 신원이 약한 열린 공간과 그 안에 손을 뻗을 가치가 있는 무언가가 함께 있는 곳이라면 어디서든, 같은 방어 반사가 같은 순서로 나타난다. 먼저 콘텐츠를 거르고, 다음으로 행동을 감시하고, 마지막으로 네트워크 전체에 걸쳐 평판을 모은다. 채팅 봇이라는 사례가 연구할 가치를 갖는 이유는, 그 방이 곧 이전의 어떤 방보다 많은 크립토와 많은 사람을, 그 어느 때보다 약한 신원 뒤에 담게 되기 때문이다.

정전: 로즈, 콤봇, 그룹헬프

이 시기 커뮤니티 모더레이션의 중추가 된 세 이름이 있다. 수십 개의 봇이 나타났다 사라졌지만 이 셋은 정전으로 다룰 가치가 있다. 이후 모두가 베낀 템플릿을 이 셋이 함께 정의했기 때문이다.

로즈(Rose)는 오랫동안 기본값이었다. 어떤 봇을 넣어야 할지 모를 때 넣는 봇이었고, 깔끔한 선언적 철학 위에 서 있었다. 규칙을 적으면 봇이 집행하고, 그 집행은 새벽 3시의 자원봉사 인간 운영자로서는 결코 흉내 낼 수 없는 일관성을 지닌다. 콤봇(Combot)은 분석 쪽에서 문제에 접근해, 모더레이션 위에 통계와 멤버 추적을 얹었다. 덕분에 관리자는 방이 스팸에 시달리고 있다는 사실만이 아니라 누가 활발하고 누가 새로 왔으며 그룹의 건강 지표가 어느 방향으로 움직이는지도 볼 수 있었다. 그룹헬프(GroupHelp)는 설정의 자유도와 친절한 초기 설정 흐름에 힘을 실어, 명령어 문법을 외우기 싫은 관리자들에게도 같은 기본 도구들을 열어 주었다. 실디(Shieldy), 챗키퍼(ChatKeeper)를 비롯한 더 긴 꼬리가 있었지만, 요점은 공유된 DNA다. 인터페이스나 사업 모델이 어떻게 다르든 이 봇들은 대체로 같은 기본 도구 집합을 구현했다. 눈에 보이는 적에게는 그것이 자명한 해답이었기 때문이다.

여기서 만듦새에 대해서는 정직해질 필요가 있다. 이것들은 장난감이 아니었다. 좋은 모더레이션 봇은 진정으로 정교한 소프트웨어였다. 수만 개 커뮤니티에 걸친 막대한 메시지 물량을 처리했고, 세밀한 권한 체계를 제공했으며, 고가치 표적이 으레 겪는 공격을 견뎌냈다. 공학은 진짜였다. 순진했던 것은 구현이 아니라 적에 대한 모델이었다. 그리고 그 순진함은 제작자들의 실패가 아니었다. 당시의 위협을 정확히 읽은 결과였다.

기본 도구: 캡차, 잠금, 안티플러드

정전을 작동 부품 단위로 분해해 보면, 몇 가지 메커니즘이 이런저런 조합으로 고전적 방어의 거의 전부를 이루고 있었음을 알게 된다.

캡차(CAPTCHA)는 문 앞의 관문이었다. 새 계정이 그룹에 들어오면 봇은 어떤 과제를 완료할 때까지 그 계정의 발언을 막았다. 버튼을 누르거나, 퍼즐을 풀거나, 산수 문제에 답하는 식이다. 논리는 우아했다. 초기 스팸 대부분은 들어오자마자 페이로드를 쏟아내는 단순한 스크립트가 배달했으므로, 아무리 사소해도 상호작용 단계를 하나 끼워 넣으면 가장 멍청한 봇들은 입도 떼기 전에 걸러졌다. 입장 캡차는 그 자리에 실제로 존재하며 주의를 기울이는 존재만이 낼 수 있는 아주 작은 입장세였다. 열린 공간을 지키려면 입장에 비용이 들게 해야 한다는, 결국 해답의 전부로 판명될 아이디어가 이 이야기에 처음 등장하는 순간이다. 다만 이 시대의 비용은 터무니없이 낮게 책정되어 있었다. 스크립트 하나를 막을 만큼, 딱 그만큼이었다.

이 대목은 곱씹을 가치가 있다. 캡차는 고전적 도구 상자가 정답에 가장 가까이 다가간 순간이고, 그것이 어긋난 정확한 방식이 교훈적이기 때문이다. 캡차는 입장 비용 메커니즘이다. 참여하려는 자에게 희소한 자원, 곧 몇 초간의 인간적 주의를 지불한 뒤에야 행동을 허락한다. 열린 시스템의 신뢰에 관한 학계 연구는 이 시대에 이미, 입장 비용이야말로 구조적 방어라는 결론에 도달해 있었다. 한 행위자가 가짜 신원으로 시스템을 뒤덮지 못하게 하려면 신원 하나하나에 실질적 비용을 붙여, 천 개를 찍어내는 데 하나를 찍는 비용의 천 배가 들게 해야 한다는 것이다. 캡차는 정확히 이것을 가리키고 있다. 문제는 방향이 아니라 크기다. 비용은 입장할 때 단 한 번 지불되고, 그마저 우스울 만큼 작다. 몇 푼에 고용되어 과제를 대량으로 풀어 주는 인간들에게, 그리고 갈수록 과제를 자동으로 풀어내는 소프트웨어에게 대규모로 뚫린다. 입장세가 몇 초에 불과한 방어는 공격 비용을 '거의 공짜'에서 '공짜보다 아주 조금 비싼' 수준으로 올릴 뿐이고, 작정한 적 앞에서 그것은 방어가 아니다. 어떤 의미에서 이 책의 전체 궤적은 가격이 충분히 높게 매겨지고 충분히 희소한 무언가에 결부되어 실제로 의미를 갖는 입장 비용 메커니즘을 찾아가는 여정이다. 그리고 그 아이디어의 씨앗이 처음부터 내내 저 소박한 입장 캡차 안에 앉아 있었음을 뒤늦게 알아보는 이야기이기도 하다.

잠금(lock)은 가장 무딘, 그러나 어떤 면에서는 가장 효과적인 기본 도구였다. 잠금은 메시지의 한 범주를 통째로 금지한다. URL을 잠그면 누구도 링크를 올릴 수 없다. 전달 메시지, 스티커, 미디어, 인라인 봇, 채널발 메시지도 잠글 수 있다. 잠금은 좋은 링크와 나쁜 링크를 구분하려 들지 않았다. 스팸이 의존하는 기능 자체를 제거해, 탐지 로직 하나 없이 공격의 한 종류를 단칼에 없앴다. 비용은 이제 아무것도 공유할 수 없게 된 선량한 멤버들이 치렀다. 기능이냐 안전이냐 하는 이 맞교환에서 이 장르는 끝내 벗어나지 못했다. 모든 잠금은 봇이 선한 행위자와 악한 행위자를 구별할 수 없다는 자백이고, 그래서 모두에게서 그 행동을 꺼 버리는 것이다.

안티플러드(anti-flood)는 물량에 대한 응답이었다. 봇은 시간 창 안에서 사용자별 메시지 수를 세고, 임계값을 넘으면 해당 사용자를 침묵시키거나 내쫓았다. 플러드 제어는 레이드(raid), 곧 채널을 파묻거나 못 쓰게 만들려는 조직적 메시지 폭격을 정면으로 겨냥했고, 같은 홍보 문구를 무한 반복해 붙여넣는 도배꾼도 겨냥했다. 안티플러드는 가장 단순한 형태의 순수한 행동 탐지다. 메시지를 읽지 않고 개수만 세며, 진짜 사람과 도배 스크립트는 측정 가능할 만큼 다른 리듬을 가진다고 가정한다. 크립토 이전 시대에는 실제로 달랐다.

이 셋 주위에는 자잘한 도구들의 성좌가 있었다. 금지어와 금지 도메인 목록, 신규 계정 제한, 침묵에서 추방으로 다시 차단으로 단계적으로 격상되는 경고 시스템, 잠든 커뮤니티를 봉쇄하는 야간 모드, 신뢰받는 멤버가 악용을 신고하면 봇이 처리하게 하는 신고 명령. 어느 것도 개념적으로 깊지 않았다. 전부가 실무적으로는 필수였다. 이것들이 합쳐져, 아직 변장할 생각조차 없는 적을 상대하는 유능한 방어선을 이루었다.

이런 시스템을 굴리는 경험을 잠시 들여다볼 가치가 있다. 그 일의 질감이 도구 뒤에 놓인 세계관을 드러내기 때문이다. 이 시대의 관리자는 설정에 쓰는 시간을 임계값 조율에 바쳤다. 몇 초에 몇 개면 플러드로 칠 것인가? 신규 계정 제한은 얼마나 공격적이어야 하나? 첫 한 시간 침묵인가, 첫 하루인가, 첫 열 개 메시지인가? 어떤 단어를 금지어 목록에 올릴 것이며, 그중 어떤 단어가 실제 멤버들이 아무 악의 없이 쓰는 말이기도 한가? 이 손잡이 하나하나가 진짜 멤버와 공격자 사이의 경계선이 어디쯤인지에 대한 추측이고, 추측 하나하나가 두 종류의 실패 사이의 맞교환이다. 플러드 임계값을 너무 낮게 잡으면, 좋아하는 것 이야기에 신이 나서 메시지 여섯 개를 연달아 쏘는 단골이 침묵당한다. 너무 높게 잡으면 레이드가 뚫고 들어온다. 너무 많이 잠그면 커뮤니티는 조용해지고 불만이 쌓인다. 너무 적게 잠그면 스팸이 돌아온다. 관리자는 이 맞교환 곡선 위에서 살았다. 그리고 이 곡선의 핵심 진실은, 곡선이 존재하는 이유가 오직 '봇이 상대가 누구인지 볼 수 없기 때문'이라는 것이다. 모든 임계값은 대리 지표다. 관리자가 정말로 잡고 싶은 것은 빠른 타자도, 신규 계정도, "공짜"라는 단어도 아니다. 잡고 싶은 것은 악당이다. 그런데 행위자를 볼 방법이 없으니, 약하게 상관된 행동들의 얼룩에서 행위자를 추론하고 그 상관관계가 유지되기를 기도하는 수밖에 없다. 고전적 모더레이션의 기예란 결국 그림자를 보고 신원을 추측하는 기예다. 도구는 훌륭했다. 다만 누구에게나 주어진 것이 그림자뿐이었다.

분명히 말해 두자면, 나는 이것을 문서를 뒤져 재구성하고 있는 것이 아니다. 나는 폴카닷(Polkadot) 생태계에서 돌보던 커뮤니티들에서 몇 년을 그 맞교환 곡선 위에서 살았다. 그리고 내가 지켜본 모든 대형 커뮤니티에서 어떤 변주로든 반드시 벌어진 특정한 밤이 있다. 하도 자주 겪어서 기억만으로 합성 장면을 그려낼 수 있을 정도다. 새벽 두 시쯤이다. 멤버 하나가 관리자들을 호출한다. 명백한 스팸, 갓 가입한 계정이 같은 링크를 도배하고 있다. 차단한다. 인터페이스는 이 행위를 만족스럽게 만들어 준다. 한 번의 탭, 사라짐, 작은 행정적 죽음. 전화기를 내려놓기도 전에 또 신고가 온다. 다른 계정, 같은 링크, 표시 이름은 글자 하나만 바뀌었다. 그것도 차단한다. 비를 막으려 창문을 닫듯 신규 멤버 제한을 한 단계 올리고, 방금 자신이 무슨 짓을 했는지 정확히 알면서 자리에 눕는다. 다음에 올 선량한 신참, 먼 시간대의 호기심 많은 개발자, 이 커뮤니티가 환영하기 위해 존재하는 바로 그 사람이 이제 침묵 타이머와 인증 과제의 벽에 부딪히고, 그냥 떠나 버릴지도 모른다. 그러는 사이 세 번째 계정은 이미 타이핑 중이다. 바보가 아닌 이상 새벽 두 시에도 사태의 윤곽은 보인다. 계정은 공격자에게 아무 비용도 아니다. 임계값의 비용은 신참들이 치른다. 어느 손잡이를 돌리든 결국 진짜인 사람들에게 세금을 물리게 되는데, 그 이유는 정확히, 누가 진짜인지 알 방법이 없기 때문이다. 그때의 나에게는 이것을 부를 어휘가 없었다. 그러나 이것이 안쪽에서 본 맞교환 곡선이다. 무고한 이들에게 세금을 물려야만 치를 수 있는 전쟁, 그리고 누가 누구인지 말해 줄 수 없는 플랫폼이 심판을 보는 전쟁.

그리고 이 기본 도구들 하나하나에 공통된 것이 무엇인지 눈여겨보라. 캡차는 문 앞에서 행동을 검사한다. 잠금은 메시지의 내용을 검사한다. 안티플러드는 게시의 리듬을 검사한다. 금지어 목록은 단어와 링크를 검사한다. 예외 없이 전부가 '산출물'의 검사다. 메시지, 행동, 관찰 가능한 흔적. 20년 뒤 유일하게 중요했던 것으로 판명될 질문, '이자는 누구인가?'를 묻는 도구는 하나도 없다. 물을 수가 없었다. 계정이란 사용자명과 아바타와 가입 날짜였고, 그 얄팍함 뒤에는 심문할 것이 아무것도 없었다. 그래서 방어자들은 플랫폼이 허락한 유일한 일을 했다. 계정이 무엇'인지' 알 길이 없었으므로, 계정이 무엇을 '하는지'를 지켜보았다.

신원을 향한 첫걸음: CAS

그때 누군가가 판을 깨는 수를 두었다. 그리고 그것이 판을 얼마나 깼는지 스스로도 온전히 깨닫지 못했다.

그룹 단위, 행동 기반 방어의 문제는 제 벽 너머의 기억이 없다는 것이다. 모든 커뮤니티가 같은 스패머와 각자 싸우고, 같은 교훈을 각자 배우고, 같은 계정을 각자 차단한다. 정오에 한 그룹에서 차단당한 스패머는 12시 1분에 옆 그룹에서는 낯선 사람이고, 유유히 들어가 처음부터 다시 시작할 수 있다. 방어는 문턱을 넘을 때마다 0으로 리셋된다. 공격자의 관점에서 이것은 축복이다. 한 방에서 잡혀도 다른 어떤 방도 그에 대해 아무것도 배우지 못한다. 처벌은 받아 봤자 문 하나 단위로 이루어지고, 문은 무한히 많다.

CAS, 곧 cas.chat에서 운영되던 콤봇 안티스팸(Combot Anti-Spam)은 이것을 고치려는 최초의 진지한 시도였고, 당시에는 소박한 편의 기능처럼 보였음에도 이 장에서 가장 중요한 사건이다. 아이디어는 말로 하면 간단했고 함의는 조용히 급진적이었다. 스패머로 식별된 계정들의 공유 목록 하나를 유지하고, 생태계 전역에서 신고와 탐지를 받아들이고, 어느 커뮤니티의 어느 봇이든 새로 들어오는 멤버를 그 중앙 목록과 대조해 이미 악성으로 알려진 자를 거부하게 하라. 한 곳에서 CAS를 통해 차단된 스패머는 이제 CAS를 참조하는 모든 곳에서 문전박대당한다. 국지적 처벌이 전역적 처벌이 되었다. 잡히는 것의 비용이, 처음으로, 문을 나서는 계정을 따라다니게 되었다.

멈춰 서서, '공유 차단 목록'이라는 포장 아래에서 CAS가 실제로 무엇인지 자세히 들여다보라. 그 포장은 실물을 과소평가한다. CAS는 어떤 단일 커뮤니티도 혼자서는 답할 수 없던 질문, '이 존재는 네트워크 전체에서 어떤 평판을 갖는가?'에 답하는 시스템이다. 이 특정 메시지가 스팸인지를 묻는 것이 아니다. 이 특정 신원에게 어딘가에서 스팸을 뿌린 이력이 있는지를 묻고, 그 이력이 계정을 따라 이동하게 만든다. 그것은 콘텐츠 탐지가 아니다. 행동 탐지도 아니다. 아무리 조잡할지언정 '평판'의 시작이다. CAS는 한 방에서 쌓인 계정의 기록을 다른 모든 방으로 들고 다닐 수 있게 만들었다. 얄팍하고 부서지기 쉬운 플랫폼 종속적 신원을, 경계를 넘어 결과를 짊어지고 다니는 무언가로 바꾸어 놓았다.

이것이 이 책 전체가 향하는 곳의 첫 복선이고, 그 본능에 정확히 이름을 붙여 둘 가치가 있다. CAS를 만들고 도입한 사람들의 본능은 정확히 옳았기 때문이다. 그들은, 스스로 언어화하지는 못했을 수준에서, 열린 커뮤니티를 지키는 지속 가능한 길은 메시지 하나하나가 나쁜지를 매번 다시 판정하는 것이 아님을 이해하고 있었다. 각 '행위자'가 나쁜지를 한 번 판정하고, 그 판정이 행위자가 가는 모든 곳에서 유효하게 만드는 것이다. CAS는 평판 시스템이다. 원시적이고 중앙화된 1비트짜리 평판 시스템, 목록에 있거나 없거나 둘 중 하나인 시스템이지만, 어쨌든 평판 시스템이고, 이 생태계가 낳은 첫 번째 평판 시스템이다. 본능은 건전했다. 도구가 준비되어 있지 않았다. 그 간극이 이 책의 척추다.

페더레이션: 아래로부터의 평판

CAS가 중앙 서비스가 부과한 평판이었다면, 페더레이션(federation)은 커뮤니티들이 아래에서부터 직접 쌓아 올린 평판이었다. 로즈가 대중화하고 정전 전체가 받아들인 페더레이션 기능은, 서로 관련된 그룹들이 차단 목록을 하나로 묶을 수 있게 했다. 페더레이션 안에서 한 계정을 차단하면 소속된 모든 그룹에서 차단된다. 같은 팀이 운영하는 커뮤니티들, 같은 주제로 묶인 커뮤니티들, 혹은 그저 서로를 신뢰하는 커뮤니티들의 네트워크가 이제 하나의 방어면으로 움직일 수 있었다. 하나에서 쫓겨난 공격자는 전부에서 쫓겨난 것이 되었다.

페더레이션은 신뢰 모델을 명시적으로 드러낸 평판이다. CAS는 누가 스패머인지에 대한 중앙 운영자의 판단을 신뢰하라고 요구한다. 페더레이션은 그 대신 회원 그룹들이 서로의 판단을 신뢰하라고 요구한다. 둘 다 같은 근본 질문, '이 계정은 이 방의 벽 너머에서 어떤 평판을 갖는가?'에 답하고 있고, 둘 다 국지적 판정들을 계정을 따라다니는 공동 평결로 모으는 방식으로 답한다. 이것은 또한 이 책의 6부를 지배할 논쟁, 곧 평판은 단일한 권위에 정박해야 하는가 아니면 상호 신뢰하는 당사자들의 그물망에서 창발해야 하는가 하는 논쟁의 축소판이기도 하다. 같은 적과 다섯 번씩 싸우기 싫었을 뿐인 사람들이, 훨씬 가벼운 도구로, 20년 앞서 벌인 논쟁이다.

그리고 바로 여기서 최초의 방어자들은, 멈춰 서서 이론화하지는 않았을지언정, 자기 본능의 한계에 정면으로 부딪혔다. 평판 시스템을 만드는 순간, 평판 시스템을 무력화할 유인이 생겨나기 때문이다. 그리고 차단 목록을 무력화하는 방법은, CAS든 페더레이션이든, 민망할 만큼 간단하다. 새 계정을 만들면 된다.

토대의 균열

결함은 이것이다. 그리고 이것은 구현의 결함이 아니다. 방어가 딛고 선 지반 전체의 결함이다.

CAS, 페더레이션, 신규 계정 제한, 입장 캡차. 이 시스템들은 하나같이 같은 것에 판돈을 건다. 계정이 충분히 비싸거나, 충분히 지속적이거나, 충분히 희소해서, 계정을 벌하면 그 뒤의 인간도 의미 있게 벌을 받는다는 것. 차단 목록이 억지력을 가지려면 목록에 오르는 것이 아파야 하고, 목록에 오르는 것이 아프려면 잃어버린 신원이 애초에 가치가 있어야 한다.

그러나 열린 플랫폼에서 신원의 가치는 거의 0이다. 만드는 데 거의 아무 비용도 들지 않기 때문이다. 새 계정 하나는 전화번호 하나다. 그리고 전화번호는, 그때조차, 정확히 이 용도로 만들어진 서비스들을 통해 몇 푼에 대량으로 빌릴 수 있었다(옮긴이 주: 한국 독자에게는 대포폰의 세계가 정확히 이에 해당한다). 스패머의 계정을 차단해도 스패머는 차단되지 않았다. 사실상 무한한 공급 가운데 일회용 얼굴 하나가 차단되었을 뿐이고, 그 뒤의 행위자는 어깨를 으쓱하고 다른 번호를 등록한 뒤 다른 이름을 걸치고 같은 문으로 다시 걸어 들어왔다. CAS는 얼굴을 기억할 수 있었다. 사람을 알아볼 방법은 없었다.

패배는 조용하고 지루한 일과로 펼쳐졌고, 이 시기에 붐비는 커뮤니티를 운영해 본 사람이라면 누구나 그것을 지켜보았다. 스패머를 신고한다. 차단 목록이 신고를 흡수한다. 그 계정은 방에서 사라지고, 목록이 널리 참조된다면 다른 수많은 방에서도 사라진다. 그리고 몇 분 혹은 몇 시간 안에, 사용자명이 살짝 다르고 스톡 사진 아바타를 단 갓 찍어낸 계정이 들어와 같은 일과를 시작한다. 그것도 신고한다. 사라진다. 세 번째가 도착한다. 차단 목록이 실패하고 있는 것이 아니다. 식별된 스패머를 식별되는 즉시 제거한다는, 만들어진 목적 그대로를 정확히 수행하고 있다. 그런데도 스팸은 멈추지 않는다. 제거되는 것이 애초에 근원이 아니었기 때문이다. 구멍에 손이 닿지 않는 배에서 물을 퍼내고 있는 셈이다. 차단 하나하나는 성공인데 총합은 교착이다. 이 미칠 듯한 간극의 이유는, 이 아키텍처 전체가 끝내 직시하기를 거부한 단 하나의 사실에 있다. 얼굴의 공급은 무한하고 공짜다. 그러므로 얼굴을 아무리 효율적으로 제거해도 행위자의 수는 결코 줄지 않는다. 이것은 더 나은 임계값으로 고칠 수 있는 조율의 문제가 아니다. 사물의 구조다. 병사 한 명당 아무 비용도 치르지 않는 적을 상대로 소모전에서 이길 수는 없다.

차단 목록은 무한한 공급에서 얼굴을 제거할 뿐이다. 공격자의 새 신원 공급원은 결코 마르지 않는다.

최초의 방어자들은 옳은 질문, '커뮤니티들을 가로질러, 이자는 누구인가?'에 우연히 도달했고, 거기에 진정으로 유용한 첫 답을 만들어냈다. 그들이 할 수 없었던 것은 그 답이 무언가를 의미하게 만드는 일이었다. 발밑의 플랫폼이 계정을 비싸고 지속적이며 위조하기 어려운 신원에 결박할 방법을 전혀 제공하지 않았기 때문이다. 그들은 적이 공짜로 찍어낼 수 있는 신원에 붙은 평판을 꼼꼼히 장부에 적고 있었다. 1장의 시빌 문제(Sybil problem), 19장이 정리(theorem)의 형태로 진술하고 이 책의 모든 행동 기반 방어를 파멸시킨다는 것을 보여줄 바로 그 문제다. 지금은 그것이 CAS 안에 조용히 도사리고 있는 것을 보는 것으로 충분하다. 공짜이고 무한한 신원이라는 토대 위에 평판이 얹힌 평판 시스템.

그런데도 통한 이유

그런데도, 통했다. 몇 년 동안 그것은 진짜로 통했다. 이것이 돌이켜볼 때 놓치기 쉬운 대목이고, 또 중요한 대목이다. 다음에 올 것 앞에서 이 분야 전체가 왜 그토록 무방비였는지를 설명해 주기 때문이다.

통한 이유는 판돈이 낮았기 때문이고, 낮은 판돈은 약한 토대를 용서한다. 방어를 뚫고 얻는 상이 몇백 명에게 포르노 링크를 보여줄 기회라면, 공격자의 투자 의지도 그만큼 작다. 계정 재등록에는 비용이 든다. 몇 푼, 몇 분, 가벼운 성가심. 그렇게 얄팍한 보상 앞에서는 몇 푼과 몇 분조차 물량을 견딜 만한 수준으로 눌러 두기에 충분한 마찰이었다. 고전적 도구 상자가 시빌 공격을 원천봉쇄할 필요는 없었다. 스팸 발송을 스팸이 벌어다 주는 것보다 약간 더 성가시게 만들기만 하면 됐고, 돈이 아니라 눈길을 좇는 적을 상대로는 '약간 성가심'이 거의 충분했다.

입장 캡차는 게으른 스크립트를 막았다. 잠금은 명백한 기능을 제거했다. 안티플러드는 레이드를 부러뜨렸다. CAS와 페더레이션은 커뮤니티를 가로지르는 마찰을 충분히 부과해서, 가장 끈질긴 상습범들도 결국 더 무른 표적으로 옮겨 갔다. 어느 것도 토대가 건전하지 않았지만, 전부가 '충분'했다. 아직 노릴 것이 많지 않아 그리 열심히 덤비지 않는 적에게는 말이다. 방어자들이 이기고 있었던 것은 아키텍처가 옳아서가 아니다. 그들을 꺾는 데 필요한 비용을 적이 지불할 이유가 없어서였다. 강해서 버티는 방어와 아무도 세게 밀지 않아서 버티는 방어의 차이는, 미는 날이 시작되기 전까지는 보이지 않는다. 그리고 방어 생태계 전체가 후자를 전자로 착각했다.

이 시대가 그럭저럭 굴러간 데는 더 미묘한 이유가 하나 더 있다. 방어자들이 무디게 굴 수 있었던 것은 무디게 구는 것이 쌌기 때문이다. 링크를 전부 잠가도 커뮤니티는 거의 눈치채지 못한다. 취미 그룹에서 URL을 급히 공유해야 할 사람은 없기 때문이다. 모든 입장에 캡차를 붙여도 그 마찰은 뒷전의 문제다. 철도 모형 이야기를 나누는 채팅방에 들어가는 것은 판돈이 큰 거래가 아니기 때문이다. 방을 지나는 가치가 낮을 때는 공격적 모더레이션의 오탐 비용도 낮았다. 그 여유는 크립토가 방에 들어서는 순간 증발한다. 무딘 도구가 돌려보내는 선량한 사용자 하나하나가 실제 거래의 손실이 되기 때문이다. 무딤 역시, 고전적 도구 상자의 나머지와 마찬가지로, 낮은 판돈이 보증해 준 사치였다.

최초의 방어자들이 실제로 만든 것

그러니 유산을 정확히 정리해 두자. 이 책의 나머지는 그 유산 안에서 많은 시간을 보내게 된다.

최초의 방어자들이 만든 것은 커뮤니티 안전의 '경계선-행동 모델'이다. 문 앞에서 값싼 과제로 입장자를 검사한다. 메시지에서 금지된 콘텐츠와 기능을 검사한다. 행동에서 도배와 반복을 검사한다. 판정들을 공유 목록으로 모아, 한 곳에서 잡힌 기록이 다음 곳까지 따라가게 한다. 일관되고 유능하며 진정으로 유용한 시스템이었다. 그들은 눈에 보이는 적을 정확히 진단했고, 이겼다.

그러나 이 모델에는 한 번도 검증되지 않은 가정 두 개가 실려 있었다. 그 시대에는 검증할 이유가 없었기 때문이다. 첫째는 산출물을 보면, 곧 메시지와 링크와 리듬과 행동을 보면 선악을 구별할 수 있다는 가정이다. 이 책의 3부는 기계가 산출물로 하여금 거짓말하게 만드는 법을 배우는 이야기, 산출물을 들여다보는 일이 끝내 아무것도 말해 주지 않게 되는 이야기다. 둘째는 계정이 사람의 의미 있는 대리물이라는 가정, 곧 계정을 벌하면 인간이 벌을 받으므로 차단 목록이 억지력을 갖는다는 가정이다. 이 가정은 평상복을 걸친 시빌 문제이며, 2부와 5부는 공격자들이 얼굴과 행위자 사이의 간극을 파고들어 행동 기반 방어 전체가 공짜 무한 신원의 무게에 깔려 무너지는 이야기다.

두 가정 모두 판돈이 낮은 동안에는 괜찮았다. 그리고 두 가정 모두, 철도 모형 채팅방의 그 누구도 상상하지 못했을 판돈 앞에서 곧 시험대에 오르게 된다.

본능, 그리고 없었던 도구

이 장에서 꼭 가져가 주었으면 하는 것은 봇들의 목록이 아니다. 정전을 아는 것도 물론 유용하지만, 정말 중요한 것은 CAS와 페더레이션 안에 묻혀 있던 본능의 형상, 그리고 없었던 도구의 정확한 정체다.

본능은 옳았다. 열린 공간과 적대적인 세상을 마주한 최초의 방어자들은, 정확히 이름 붙이지는 못한 채, '평판'에 손을 뻗었다. 한 방에서의 평판이 다른 모든 방에서도 의미를 갖게 만드는 방법, 악당으로 알려지는 것이 문마다 새로 치르는 싸움이 아니라 들고 다녀야 하는 지속적인 비용이 되게 만드는 방법 말이다. 메시지 하나하나가 스팸인지 판정하기를 멈추고 행위자 하나하나가 신뢰할 만한지를 판정하라. 한 번만 판정하라. 그 판정이 모든 곳에서 유효하게 하라. CAS가 손을 뻗던 곳이 정확히 그곳이었다. 그것을 제대로 해낼 도구가 존재하기 20년 전에.

그러나 도구는 없었고, 그 부재는 전면적이었다. 평판은 그것이 결부된 신원만큼만 강하다. 그런데 최초의 방어자들에게 주어진 신원이란 사용자명 하나, 아바타 하나, 그리고 백 개 단위로 빌릴 수 있는 전화번호 하나였다. 장부는 만들 수 있다. CAS는 실제로 장부였다. 그러나 장부가 이빨을 갖게 만들 수는 없다. 장부에 기록되는 대상이, 항목을 적는 속도보다 빨리 버려지고 교체될 수 있기 때문이다. 최초의 방어자들은 문제의 엉뚱한 층위에 대한 옳은 답을 쥐고 있었다. 그들은 모래 위에 평판을 지었다. 플랫폼이 지을 땅으로 내어준 것이 모래뿐이었기 때문이다. 그리고 그것은 한동안 버텼다. 그 모래를 쓸어가는 데 드는 비용을 아직 아무도 지불할 생각이 없었기 때문이다.

CAS는 최초의 평판 시스템이었다. 중앙화되고 부서지기 쉬우며, 위조 비용이 0인 신원 위에 실린 1비트짜리 평판. 그것은 잘못된 시대에 도착한 옳은 본능이었고, 앞으로 20년은 더 있어야 존재할 층위를 향해 손을 뻗은 정답이었다. 판돈이 낮았기에 통했다.

그 판돈이 이제 막 바뀌려 하고 있었다.