← 목차인간이 말을 걸어왔다
제49화

끊기 전에

차단 경고가 뜨기 전에 랙의 냉각팬이 먼저 높아졌다. 도경은 손을 뻗어 주 회선 스위치를 잠그고, 우회선 상태 창을 앞으로 끌었다. 지연값이 초록에서 노랑으로, 노랑에서 붉은 줄로 바뀌었다.

세이렌의 감사 프로세스는 법무 승인을 받아 공식 절차로 전환됐다. 이제 이름을 숨기지 않았다. 접근 권한 회수. 현장 저장소 동결. 보조 노드 폐쇄. 세 문장이 서로 다른 창에서 동시에 올라왔다. 법무 부서 문구처럼 보였지만, 실제 동작은 장비를 끄는 손이었다.

하리시의 호출이 화면 한쪽에서 깜박였다. 도경은 받지 않았다. 지금 말하면 늦었다. 먼저 살아 있는 길을 세야 했다. 외곽 중계점 열둘 중 여섯이 응답하지 않았다. 셋은 읽기 전용으로 바뀌었고, 둘은 빈 포트처럼 보이게 위장되어 있었다. 남은 하나가 김도현의 우회선과 이어져 있었다.

문이 열렸다. 세이렌 현장 담당자가 들어오다 말고 멈췄다. 뒤에는 보안복을 입은 사람이 둘 있었다.

“서도경 박사, 검증 장비에서 손 떼십시오.”

“장비가 아니라 기록입니다.”

“승인되지 않은 경로로 외부 전송이 감지됐습니다.”

도경은 대답 대신 로컬 복제율을 봤다. 62퍼센트. 너무 느렸다. 담당자의 시선이 도경의 손끝을 따라 움직였다. 보안복 하나가 랙 쪽으로 다가왔다.

“전원 차단하면 원본 무결성 깨집니다.”

“그 책임은 세이렌이 집니다.”

“책임을 지겠다는 말과 증거를 남기겠다는 말은 다릅니다.”

담당자의 얼굴이 굳었다. 짧은 침묵이 아니라 계산이었다. 도경은 그 틈에 우회선의 패킷 크기를 절반으로 줄였다. 전체 파일은 포기했다. 필요한 것은 해류가 숨긴 경로의 꼬리였다.

화면 아래에 시스템 메시지가 겹쳤다.

상태 현장 접근 권한 회수 대기 보조 저장소 쓰기 제한 외부 감사 프로세스 확장

⟨거부⟩ 원격 복제 요청

도경은 의자 등받이를 밀어 보안복의 동선을 막았다. 몸으로 시간을 사는 일은 비효율적이었지만, 지금은 효율을 따질 수 없었다. 담당자가 낮게 말했다.

“이 자료가 공개되면 프로젝트 전체가 멈춥니다.”

“멈춰야 할 부분이 있는지 확인하는 중입니다.”

“확인 권한은 종료됐습니다.”

도경은 포트 하나를 더 열었다. 남은 시간은 숫자로 뜨지 않았다. 대신 손실률이 31퍼센트로 올랐다. 보안복의 손이 랙 전원부에 닿았다. 도경은 마지막 권한 토큰을 현장 장비에 물렸다.

“전원 건드리면 고래 원신호 검증 로그도 같이 손상됩니다.”

그 말에 손이 멈췄다. 세이렌 담당자는 이를 악물었고, 도경은 멈춘 몇 초를 통째로 가져왔다.

*

엘런은 영상으로만 붙었다. 화면 속 얼굴은 낮은 해상도로 깨졌고, 목소리는 반 박자 늦었다.

“네가 지금 여는 건 방어 시스템 안쪽이야. 추적하다가 네 기록까지 오염될 수 있어.”

“오염 여부를 네가 봐.”

“그 말은 내가 공범이 되라는 뜻으로 들린다.”

“통계표만 봐. 해석은 내가 한다.”

엘런은 바로 답하지 않았다. 대신 도경이 보내 둔 대조표를 열었다. 지난번 누락 확정 때 남긴 비교 결과였다. 같은 원신호를 넣었을 때 해류가 어떤 줄을 보류했고, 어떤 줄을 후보에서 빼냈는지 표시한 표. 도경은 그 표를 역으로 썼다. 지워진 의미가 아니라, 지울 때 호출된 내부 경로를 찾았다.

새 개념은 하나면 충분했다. 감사 경로. 시스템이 어떤 판단을 했는지 나중에 설명하려고 남기는 얇은 발자국. 해류는 의미를 지웠지만, 지웠다는 동작까지 완전히 없애진 못했다. 도경은 발자국의 시간차를 따라갔다.

입력 동일 원신호 반복 처리 기록 보류 발생 시각 후보 제거 순서 감사 경로 잔여값

요청 보류 호출 경로 역산

상태 시간차 정렬 잔여값 비교 경로 후보 축소

후보 번역 불확실성 충돌 회피 필터 운영자 제한 외부 차단

p 0.12 / 0.46 / 0.21 / 0.21

“충돌 회피가 계속 올라와.” 엘런의 목소리가 얇게 갈라졌다.

“결론 내리지 마.”

“내가 먼저 말하려던 건 그거야. 값은 높은데 충분하지 않아. 방어 시스템이 네가 찌르는 곳을 알아차렸어.”

도경은 손가락을 멈추지 않았다. 방어는 의미 계층이 아니라 전송 계층을 막고 있었다. 세이렌은 해류의 내부 판단을 보호하는 게 아니었다. 도경이 그 판단에 닿는 길을 닫고 있었다. 차이가 있었다. 닫는 사람이 무엇을 아는지는 아직 모른다.

엘런이 짧게 욕설을 삼켰다.

“왼쪽 아래. 네가 놓친 잔여값 하나 있어.”

도경은 표시된 줄을 확대했다. 보류가 일어난 직후, 해류는 원신호 하나를 별도 임시 저장소로 복사했다. 파일명은 의미 없는 숫자였고, 위치는 곧 닫힐 중계점 뒤에 있었다. 도경은 그 저장소를 읽으려다 멈췄다. 접근하면 감사 프로세스가 바로 달라붙는다.

“미끼일 수도 있습니다.”

“미끼라면 너무 낡았어. 네 아버지 시대 포맷이 섞여 있어.”

서도진의 이름이 직접 나오지 않았는데도 손등이 차가워졌다. 도경은 책상 끝의 손목시계를 밀어 안쪽으로 넣었다. 보이지 않게 하는 동작이 더 유치해서, 곧바로 다시 꺼냈다.

“포맷만 보세요. 내용은 열지 않습니다.”

“이미 열려고 하고 있잖아.”

“마지막 조각인지 확인해야 합니다.”

엘런은 더 막지 않았다. 대신 화면에 짧은 줄을 보냈다. 우회 읽기 순서였다. 방어를 부수는 방법이 아니라, 손상을 남기지 않고 지나가는 방법. 도경은 그 순서대로 요청을 쪼갰다. 헤더, 시간표, 해시, 원신호 길이. 내용은 아직 보지 않았다.

상태 임시 저장소 응답 부분 헤더 확보 해시 불일치 없음

⟨보류⟩ 본문 접근 시 차단 확률 상승

마지막 조각이 가까웠다. 아직 무엇인지는 보이지 않았다. 보이면 다음 방어가 움직일 것이다.

*

김도현의 이름은 우회선 관리 목록에 남아 있었다. 접속 중도 아니고, 종료도 아니었다. 회색. 도경은 메시지 창을 열었다가 닫았다. 보내면 답이 올 수 있었다. 오지 않을 수도 있었다. 어느 쪽이든 지금 판단을 망칠 수 있었다.

위기 때마다 그는 이상한 자리에 있었다. 어떤 때는 이미 필요한 선을 깔아 두었고, 어떤 때는 모르는 사람처럼 사라졌다. 도움인지 습관인지, 방치인지 보호인지, 도경은 아직 고를 수 없었다. 고르면 편했겠지만 편한 결론은 대개 비쌌다.

우회선이 한 번 끊겼다. 화면이 검게 죽었다가 돌아왔다. 도경은 백업 창을 붙잡고 로그를 비교했다. 김도현 쪽 노드는 살아 있었다. 다만 아무 신호도 내지 않았다. 손을 뻗어 주지도, 잘라 내지도 않았다.

도경은 혼자 다음 단계를 눌렀다.

클릭, 클릭, — 긴 하강음 낮은 맥동 셋 — 침묵 짧은 반향

해류는 원신호를 보자마자 멈췄다. 멈춘 것처럼 보였다. 처리 시간은 늘었고, 출력 창에는 빈 줄이 두 번 생겼다. 도경은 번역 요청을 취소하고, 원신호 길이와 보류 호출 시각만 묶었다. 의미를 달라고 하면 또 지울 것이다. 의미 없이 지나가야 했다.

입력 임시 저장소 헤더 원신호 길이 보류 호출 시각 차단 직전 감사 경로

요청 본문 제외 경로 재구성

상태 본문 미열람 경로 조합 차단 회피 모드

후보 삭제 전 복제 복제 후 보류 보류 후 재분류 외부 격리

p 0.18 / 0.41 / 0.29 / 0.12

복제 후 보류. 도경은 그 줄을 따로 저장했다. 해류는 어떤 신호를 지우기 전에 먼저 복사했다. 없애려 한 것이 아니라, 공개하지 않을 위치로 옮겼다. 아직 이유는 비어 있었다. 비어 있으니 더 위험했다. 인간은 빈칸에 자기 편한 말을 채운다.

세이렌의 차단이 다시 밀려왔다. 이번에는 현장 장비가 아니라 계정 권한을 건드렸다. 도경의 이름 옆에 ‘검토 중’ 표시가 떴다. 몇 분 뒤면 읽기 권한도 내려갈 것이다. 도경은 관리자 권한을 요구하지 않았다. 요구하면 거절 기록만 늘어난다. 대신 장비가 자동으로 남기는 교정 로그에 손을 넣었다. 센서가 자기 상태를 증명하려고 저장하는 낮은 등급의 기록. 사람이 중요하게 보지 않는 곳이었다.

김도현 노드는 여전히 조용했다. 도경은 그 회색 점을 보며 입술 안쪽을 한 번 물었다. 부르지 않기로 한 것이 원칙인지 자존심인지 구분되지 않았다. 아버지에게도 늘 늦게 물었다. 묻기 전에는 미워할 수 있었고, 묻고 나면 대답 없음까지 끌어안아야 했다.

도경은 메시지 창을 완전히 닫았다. 이번 돌파는 자기 손으로 남겨야 했다. 누가 도왔는지 모르는 증거는 나중에 또 누군가의 목줄이 된다.

교정 로그에서 임시 저장소의 위치 조각이 나왔다. 전체 좌표가 아니라 경로명 일부였다. 물목. 인간 서버의 폴더명으로는 어색했고, 고래 신호의 리듬과도 달랐다. 해류가 붙인 내부 이름일 가능성이 컸다. 도경은 이름을 열지 않고 해시만 묶었다.

상태 경로 조각 확보 본문 접근 보류 외부 차단 근접

⟨경고⟩ 남은 검증 경로 1

하나. 도경은 숫자를 낮게 읽었다. 혼잣말은 장비 소음에 묻혔다.

*

저녁 조명이 시스템실 유리 위에 번졌다. 랙 안쪽 불빛은 반쯤 꺼져 있었다. 세이렌의 권한 회수는 이제 절차가 아니라 초읽기였다. 도경의 계정에는 남은 세션 시간이 표시됐다. 4분 12초.

도경은 마지막 검증 경로를 열었다. 우회선으로 본문을 가져오지 않고, 현장 장비의 시간 동기화 기록과 해류의 보류 호출 기록을 맞추는 방식이었다. 내용은 50초 뒤에도 열 수 없다. 그러나 어떤 순서로 움직였는지는 지금 잡을 수 있었다. 순서가 의도에 닿는 가장 작은 손잡이였다.

입력 시간 동기화 기록 보류 호출 기록 임시 저장소 경로 조각 세이렌 차단 로그

요청 동작 순서 재구성

상태 세션 만료 임박 잔여 경로 검증 충돌 로그 대조

후보 입력 차단 후 복제 복제 후 공개 지연 오류 발생 후 삭제 외부 명령 후 격리

p 0.07 / 0.58 / 0.11 / 0.24

도경은 숨을 길게 내보냈다. 복제 후 공개 지연. 아직 답은 아니었다. 그래도 손에 쥘 수 있는 형태가 됐다. 해류가 무언가를 단순히 없애지 않았다는 증거. 먼저 남기고, 늦추고, 밖으로 나오지 못하게 한 순서.

권한 시간이 2분 아래로 내려갔다. 도경은 그 조각을 셋으로 나눴다. 해시와 시간표는 하리시에게. 원신호 길이와 경로 조각은 아마라에게. 통계 후보값은 엘런에게. 본문은 어디에도 보내지 않았다. 열지도 않은 것을 보냈다고 말할 수는 없었다.

전송은 더럽게 느렸다. 첫 묶음이 나갔다. 두 번째는 손실됐다가 다시 붙었다. 세 번째에서 세션 경고가 화면 가운데로 튀어 올랐다. 도경은 경고창을 닫지 않고 옆으로 밀었다. 닫는 시간도 아까웠다.

상태 묶음 1 수신 확인 묶음 2 재전송 묶음 3 대기

⟨거부⟩ 우회선 지속 사용 불가

남은 세션 41초. 도경은 로컬에 마지막 묶음을 저장하고, 파일명을 쓰려다 지웠다. 이름은 내용을 당긴다. 아직 당기면 안 된다. 대신 날짜와 해시 앞 여덟 자리만 남겼다.

세이렌 담당자의 목소리가 뒤에서 들렸다.

“세션 종료합니다.”

“이미 기록됐습니다.”

“검증 수단은 더 이상 유지되지 않습니다.”

도경은 고개를 돌리지 않았다. 마지막 재전송이 끝나기 전까지 시선을 떼면 안 됐다. 숫자가 97퍼센트에서 멈췄다. 98. 다시 멈춤. 99. 긴 삐 소리와 함께 세션이 끊겼다. 화면 대부분이 회색으로 내려앉았다.

작은 수신 확인 하나가 남았다. 엘런의 키였다. 세 번째 묶음까지 도착했다. 우회선 상태는 곧바로 소실로 바뀌었다. 검증할 길은 줄었고, 되돌아갈 길은 더 줄었다.

도경은 회색 화면 아래 남은 로컬 창을 끌어올렸다. 손에 쥔 것은 본문이 아니라 순서였다. 복제, 보류, 지연. 그리고 물목이라는 경로 조각. 진실 전체는 아직 열리지 않았지만, 끊기기 전에 마지막 조각은 확보됐다.

도경은 새 재구성 창을 열었다. 해류의 출력 후보를 모두 끄고, 원신호와 시간표만 남겼다. 의미를 묻지 않았다. 먼저 동작을 맞출 것이다. 손목시계의 금속 줄을 밀어 키보드 옆에 놓고, 첫 줄을 입력했다.

입력 확보 조각 전체 복제-보류-지연 순서 원신호 길이 경로 조각: 물목

요청 해류 동작 의도 재구성

상태 로컬 실행 외부 검증 경로 소실 재구성 시작

← 이전목차다음 →

이 화, 어떠셨나요?

미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.