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

새는 손의 정체

시스템실 문이 닫히자 공조음이 얇게 갈라졌다. 도경은 보존 저장소의 잠금 시간을 먼저 확인했다. 하리시가 건 제한은 송신과 좌표 조회에 걸려 있었다. 로그 보존에는 아직 틈이 남아 있었다.

세 점. 보호 구역 가장자리의 부표 둘, 모계 7이 최근 내려간 수심선 하나. 전날까지 내부 검증망에만 있던 후보였다. 세이렌 쪽 외부망에서 같은 범위의 탐색 패턴이 되돌아왔다. 너무 좁았다. 우연한 해양 조사로 보기엔 질문이 정확했다.

도경은 외부 수신 패킷의 시간표를 펼쳤다. 세이렌 장비는 직접 좌표를 묻지 않았다. 부표의 상태 조회를 가장해 수심, 수온, 잡음 밀도만 긁었다. 그 값들을 합치면 재연 후보를 거의 복원할 수 있었다. 누군가 원문을 넘기지 않고도 위치를 알려 준 셈이었다.

“해류, 외부망 질의와 내부 조회의 간격.”

입력: 부표 상태 조회 / 외부 수신 패턴 / 보호 구역 후보 후보: 3분 12초 / 3분 19초 / 3분 21초 p: 0.87 상태: 연동 가능

3분대. 사람이 보고 옮기기엔 짧고, 자동 연계치고는 일부러 느렸다. 도경은 시간축을 더 잘랐다. 인증 성공, 임시 캐시 생성, 부표 상태 열람, 외부망 탐색. 네 줄이 작은 톱니처럼 맞물렸다.

공용 계정이면 여기서 끝이었다. 회의실 단말, 송신실 공용 노드, 야간 교대 계정. 그중 하나가 찍히면 누구든 방어할 수 있었다. 함께 쓰는 권한이었다고. 비상 절차였다고. 로그가 누락됐다고.

도경은 원본을 건드리지 않고 미러 저장소를 만들었다. 해시값을 붙이고, 읽기 전용 봉인을 걸었다. 손끝이 키 위에서 한번 멈췄다. 너무 늦게 잡은 것 같았다. 그렇다고 놓을 수는 없었다. 세이렌은 이미 바깥에서 같은 바다를 보고 있었다.

내부 조회자의 이름은 아직 마스킹되어 있었다. 대신 장비 지문이 남았다. 운영체제 빌드, 드라이버 오류, 음향 모듈 버전. 공용 단말처럼 보이게 섞어 놓았지만, 한 줄이 맞지 않았다.

도경은 그 줄을 확대했다. 지워진 이름보다 더 오래 남는 흔적이었다.

*

서버 랙 뒤쪽의 보조 콘솔은 화면이 낮았다. 도경은 무릎을 굽혀 케이블 포트를 확인했다. 공용 노드라면 접근 기록이 넓게 흩어진다. 여러 손이 같은 문을 열고 닫기 때문이다. 이번 기록은 달랐다. 문은 공용이었지만 손잡이에 묻은 흠은 하나였다.

고유 계정 흔적은 이름만이 아니었다. 계정마다 암호키를 갱신하는 시간, 로컬 캐시에 남는 압축 방식, 실패한 재시도 간격이 달랐다. 사람의 습관처럼 남지만, 습관보다 더 엄격했다. 시스템은 사용자를 지우려 해도 장비가 만든 작은 버릇을 다 지우지 못했다.

도경은 인증 로그의 마스킹 전 단계를 요청했다.

입력: 인증 로그 세부 / 권한 범위 / 보존 봉인 후보: 일부 열람 가능 / 개인 식별 제한 p: 0.64 상태: 제한

“식별명 말고 서명값만.”

입력: 계정 서명값 / 장비 지문 / 캐시 생성 규칙 후보: 대조 가능 p: 0.91 상태: 처리

표가 떠올랐다. 세 줄은 공용 계정으로 묶였다. 하나는 옆으로 빠졌다. 공용 권한을 빌려 들어왔지만, 세션 시작 전에 개인 장비에서 만든 임시 토큰이었다. 그 토큰은 사라졌어야 했다. 그런데 부표 7번이 오류를 내며 재전송했고, 오류 묶음 안에 원래 서명이 남았다.

도경은 숨을 짧게 내보냈다. 이름은 아직 없었다. 그래도 대조할 수 있었다.

김도현의 정비 단말. 음향 드라이버 수정판. 야간 패치 때 그가 직접 넣은 압축 옵션. 세 줄이 차례로 맞았다. 마지막으로 남은 것은 키 갱신 간격이었다. 11분마다 한 번. 다른 엔지니어들은 10분 또는 15분이었다. 도현은 배터리 절약 때문에 11분으로 바꿨다고 했었다. 쓸데없이 정확한 설명까지 떠올랐다.

도경은 대조표를 다시 돌렸다. 다른 후보를 넣었다. 하리시, 아마라, 엘런, 마르코, 송신실 공용 관리자. 모두 어긋났다. 김도현만 남았다.

화면 아래에 해류가 새 줄을 띄웠다.

입력: 서명값 / 장비 지문 / 계정 갱신 간격 후보: 김도현 정비 단말 p: 0.96 상태: 일치

도경은 p값을 보지 않으려 했지만 숫자는 눈에 박혔다. 0.96. 내부 대응으로는 충분했다. 그러나 법정 증거로는 아니었다. 장비 지문도 개인 토큰도 복제되거나 도용될 수 있었고, 이 숫자는 해류의 계산이지 하드웨어 서명의 독립 확인이 아니었다. 도경은 대면 뒤 엘런에게 원본 로그 재검증을 걸기로 메모했다.

“공용 권한 가능성.”

입력: 동일 시간 공용 계정 / 개인 토큰 잔여 / 부표 오류 로그 후보: 공용 권한 단독 설명 불가 p: 0.98 상태: 배제

이번엔 안 덮였다. 공용 권한이라는 넓은 천으로 가릴 수 없는 자국이었다. 도경은 증거 묶음 이름을 바꾸었다. ‘보호 구역 유출 가능성’에서 ‘개인 토큰 연계’로. 저장 버튼을 누르기 전에 손등을 책상 아래에 대었다. 금속은 차가웠다.

김도현.

입 밖으로 내지 않았다. 이름은 화면에서 이미 충분히 크게 떠 있었다.

*

도경은 파일을 닫지 못했다. 닫으면 바로 다음 행동을 해야 했다. 열어 둔 채로 있으면 몇 초 더 검증이라는 이름을 붙일 수 있었다.

김도현은 오래 판단 불가였다. 너무 많은 장면이 서로를 막았다. 우회선이 죽었던 날의 현장 기록이 먼저 떠올랐다. 우회선이 죽었을 때, 도현이 백업 전원을 억지로 물려 모계 7의 응답 구간을 살렸다. 그때 그가 없었다면 서도진 기록의 겹침도, 최근 이동로의 변화도 놓쳤을 것이다.

도경은 당시 수리 로그를 불러왔다. 케이블을 자르고, 접점을 긁고, 물에 젖은 모듈을 말리던 손. 영상 속 도현은 짜증을 냈고, 욕을 삼켰고, 결국 살려 냈다. 그런 사람이 왜 같은 위치를 밖으로 흘렸는지 질문이 생겼다. 질문은 답이 아니었다.

증거 창과 수리 영상이 나란히 놓였다. 한쪽은 구했고, 한쪽은 팔았다. 너무 단정한 문장이 떠올라 도경은 바로 지웠다. 팔았다고 쓰려면 대가를 알아야 했다. 넘겼다고 쓰려면 의도를 알아야 했다. 지금 잡은 것은 행동뿐이었다. 행동은 충분히 무거웠다.

아버지의 방수시계가 떠올랐다. 서랍 안의 버클, 닦이지 않은 소금 선. 서도진도 기록만 남기고 이유를 남기지 않았다. 이유가 없으면 남은 사람은 증거를 붙잡고 미워해야 했다. 도경은 그 방식에 익숙했다. 익숙하다는 사실이 싫었다.

도현에게 보낼 메시지 창을 열었다가 닫았다. 글로 물으면 지울 시간이 생긴다. 하리시에게 먼저 넘기면 절차는 바로 움직인다. 권한 정지, 장비 회수, 격리 조사. 맞는 순서였다. 그런데 도경은 아직 한 가지를 직접 확인해야 했다. 왜가 아니라, 부정하는지. 증거 앞에서 어떤 말을 먼저 꺼내는지.

해류가 수리 영상 위에 새 알림을 띄웠다.

입력: 유출 추정 시간 / 김도현 근무표 / 송신실 출입 후보: 근무 외 접근 / 원격 세션 / 현장 출입 없음 p: 0.88 상태: 추가 확인 필요

“현장 출입 없음.”

원격이었다. 도현은 같은 건물 안에서, 혹은 숙소에서, 공용 권한을 거쳐 개인 토큰을 남겼다. 문을 열고 들어온 흔적이 없으니 아무도 보지 못했다. 도경도 못 봤다. 회의실에서 그가 케이블만 보던 장면이 다시 왔다. 손톱 옆 살이 뜯겨 있었다. 그때는 죄책감인지 피로인지 구분할 수 없었다. 지금도 얼굴만으로는 못 한다.

도경은 수리 영상을 껐다. 도움을 준 기록은 사라지지 않았다. 유출 기록도 사라지지 않았다. 둘을 한 사람이 만들었다는 사실만 새로 생겼다.

판단 불가라는 칸은 비어 있지 않았다. 도경이 차마 닫지 못한 칸이었다. 이제 닫아야 했다.

*

저녁 조명으로 바뀐 복도는 푸른색이 덜했다. 도경은 증거 묶음을 두 곳에 봉인했다. 하나는 개인 검증 저장소, 하나는 하리시에게 보낼 제한 패키지. 전송 버튼 위에서 멈췄다가, 아직 누르지 않았다.

순서가 중요했다. 먼저 대면하고, 즉시 보고한다. 시간이 길어지면 증거가 지워질 수 있었다. 그래서 로컬 봉인을 걸었고, 자동 전송 타이머를 20분 뒤로 맞췄다. 도경이 취소하지 않으면 하리시에게 간다. 도현이 장비를 만질 틈을 주지 않는 선이었다. 안전한 순서는 아니었다. 봉인 패키지를 지금 곧장 하리시에게 넘기고 이유만 묻는 게 옳았다. 20분을 자기 손에 쥐는 건 증거를 지울 틈도, 도주할 틈도 같이 남기는 일이었다. 도경은 그걸 알면서 타이머를 눌렀다. 또 한 번, 판단을 자기 손안에 두었다.

해류에 마지막으로 물었다.

“김도현 계정 즉시 잠금 시 손실.”

입력: 김도현 정비 권한 / 보호 구역 센서망 / 야간 장애 대응 후보: 부표 3개 원격 복구 지연 / 송신 잠금 유지 가능 / 유출 차단 가능 p: 0.79 상태: 손실 제한

“대면 중 원격 접속 시도 감시.”

입력: 개인 토큰 서명값 / 공용 노드 / 외부망 탐색 패턴 후보: 감시 가능 / 차단은 상위 권한 필요 p: 0.93 상태: 대기

도경은 파일을 암호화하고 화면을 껐다. 검은 화면에 얼굴이 흐리게 비쳤다. 피곤한 얼굴이었다. 보고서 문장처럼 정리되지 않은 얼굴. 도경은 머리끈을 다시 묶었다. 손이 한 번 헛돌았지만 다시 묶었다.

복도 끝 송신실에서 낮은 진동이 벽을 타고 왔다. 실제 송신은 잠겨 있었다. 장비 냉각기의 떨림뿐이었다. 그래도 몸은 소리를 먼저 구분했다. 부르면 온다. 이미 누군가 위치를 불렀다. 이제 도경은 사람을 불러내야 했다.

도현의 위치는 정비 베이에 찍혀 있었다. 야간 근무가 아니었다. 출입 사유는 ‘부표 오류 점검’. 거짓말일 수도 있고, 진짜일 수도 있었다. 둘 다 더 나빴다.

도경은 제한 패키지의 타이머를 다시 확인했다. 19분 12초. 충분하지도, 길지도 않았다. 증거는 손 안에 있었고, 이유는 없었다. 답은 한 방향으로 좁혀졌다. 모든 증거가 김도현을 가리켰다. 그러나 왜인지는 비어 있었고, 그 빈칸은 입으로 물어야 했다.

문이 열리자 시스템실의 차가운 공기가 뒤로 빠졌다. 도경은 정비 베이 쪽으로 걸었다. 손에는 단말 하나만 들었다. 화면은 꺼져 있었지만, 안쪽에는 공용 권한으로도 덮이지 않은 김도현의 서명이 잠겨 있었다.

← 이전목차다음 →

이 화, 어떠셨나요?

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