넘어간 센서
시스템실 로그가 0.7초씩 밀렸다. 도경은 재생 막대를 뒤로 당겼다. 같은 구간에서 또 밀렸다. 부표 위치층이 아니라 청취 권한층이었다.
도현의 저장 모듈에서 추출한 세이렌 계정들은 좌표 요청을 하지 않았다. 지도 격자도 열지 않았다. 대신 현장 음향 센서망의 수신 슬롯을 빌렸다. 살아 있는 부표들이 바다를 듣는 시간표, 잡음 제거 전의 원신호, 보호 구역 바깥 중계기까지 이어지는 얇은 통로.
도경은 권한 트리를 펼쳤다. 흰 선들이 부표에서 중계기로, 중계기에서 검증 서버로 올라왔다. 그중 하나가 검게 칠해져 있었다. 폐기된 감시 포트. 이름은 비어 있었고 만료일은 어제였다. 그런데 접속 횟수는 계속 늘고 있었다.
“좌표가 아니었네.”
소리가 너무 낮아 자신에게도 명령처럼 들렸다. 도경은 필터를 바꿨다. 위치값 전송 없음. 지도 파일 접근 없음. 아카이브 원문 다운로드 없음. 정상처럼 보이는 항목들이 줄지어 떴다. 그 아래 숨은 행이 열렸다.
수신권 위임. 실시간 저주파 원본. 임시 복호 키. 현장 교정값.
도경은 손가락으로 화면 가장자리를 눌렀다. 좌표를 훔친 게 아니었다. 귀를 넘겼다. 바다가 내는 소리를 현장과 같은 시간에 들을 수 있는 귀. 보호 구역 안에서 무엇이 모이고, 무엇이 멀어지고, 어떤 침묵이 부풀어 오르는지 외부에서 맞춰 볼 수 있는 귀.
문제는 그 귀가 검증 서버 안에 있지 않다는 것이었다. 세이렌은 폭로 전 계약으로 현장 부표 절반을 자기 장비로 깔았고, 그 부표의 원음은 검증망을 거치기 전에 세이렌 소유 중계기로 한 번 복제됐다. 내부 계정이 뚫린 게 아니라, 애초에 회선이 물리적으로 갈라져 있었다. 도경의 관리자 권한은 검증 서버 안에서만 왕이었다.
해류 창을 열었다.
입력: 외부 계정 / 수신권 위임 / 현장 음향 센서망 후보: 좌표 유출 아님 / 청취 접근권 유출 / 재현 장소 노출 가능성 증가 p: 0.91 상태: 권한 잔존 확인 필요
“잔존 권한만.”
입력: 폐기 포트 / 만료 토큰 / 중계기 교정값 후보: 부표 3, 5, 8, 11 수신 가능 / 심해 채널 부분 수신 / 보호 구역 내부 원신호 접근 p: 0.87 상태: 비정상 세션 활성
활성. 도경은 그 단어를 오래 보지 않았다. 시간표를 열어 최근 6시간의 수신량을 비교했다. 평소보다 작은 상승이었다. 사람이 지나치기 좋은 정도. 그러나 상승 구간은 재현 후보 해역의 네 방향에서 동시에 시작됐다.
도경은 하리시에게 보낼 보고서 초안을 열었다가 닫았다. 먼저 알아야 했다. 세이렌이 얻은 것이 귀라면, 그 귀로 어디까지 들을 수 있는지.
*
엘런은 화면을 보자마자 의자 등받이에 기대지 않았다. 모니터 가까이 몸을 숙였다. 도경이 재생한 원신호는 낮게 끊겼다 이어졌다. 잡음처럼 보이는 덩어리 사이에 일정하지 않은 간격이 있었다.
“원문을 줘.”
“이미 줬어.”
“해류 전처리 전.”
도경은 망설이다가 원본 채널을 열었다. 방 안 스피커가 진동을 토했다. 사람 귀에는 거의 들리지 않는 저음이 바닥을 눌렀다. 화면의 파형은 천천히 기울었다가 얕게 갈라졌다.
엘런이 입술 안쪽을 물었다. “집결 신호야.”
“확정할 수 있어?”
“확정이 아니라 충분해. 저쪽도 네 개 부표를 동시에 들었다면.”
도경은 시간 차 측정 창을 띄웠다. 같은 울림이 부표마다 다른 시각에 닿았다. 0.3초, 0.8초, 1.4초. 바닷물 속 음속은 일정하지 않다. 수온과 염분, 수심이 신호를 밀고 당긴다. 그래서 단순한 원이 아니라 휜 껍질들이 겹친다. 그 겹침이 가능한 영역을 줄인다. 삼각측량이라고 부르지만, 바다에서는 삼각형보다 찢긴 그물에 가깝다.
도경은 교정값을 넣었다. 후보 영역이 넓은 타원에서 세 갈래로 줄었다. 그중 하나가 재현 해역과 겹쳤다.
엘런이 낮게 욕을 삼켰다. “세이렌 장비라면 더 좁힐 수 있어.”
“우리 교정값이 넘어갔으니까.”
“그게 핵심이야. 원신호만으로는 모호해. 그런데 네 현장 교정값이 있으면 바다가 덜 거짓말해.”
네. 그 말이 도경의 귀에 남았다. 도경의 판, 도경의 공개, 도경이 보호를 밀어붙이기 위해 펼쳐 놓은 검증 장치. 외부가 의심하지 못하게 촘촘히 만든 것들이 이제 외부의 계산을 돕고 있었다.
“교란 가능성은.”
“있어. 재현 때 고래들이 신호를 주고받으면 세이렌은 지연을 뿌릴 수 있어. 가짜 반사음을 섞거나, 원신호가 들어오는 시간을 흐리게 만들면 돼.”
“고래가 속는다는 뜻은 아니야.”
“고래를 속일 필요 없어. 우리 검증 장비를 흔들면 보호 결정을 흔들 수 있지.”
도경은 파형을 확대했다. 모계 7의 낮은 코다는 아직 재현되지 않았다. 하지만 씨족이 모일 때 쓰는 넓은 부름은 달랐다. 개체 하나의 기억보다 넓고, 방향보다 오래 남는 신호. 살아 있는 기억을 보호하려면 그 기억이 모이는 길을 숨겨야 했다. 지금은 길이 소리로 드러나고 있었다.
“얼마나 들었을까.”
엘런은 즉답하지 않았다. 손목의 낡은 밴드를 돌렸다. “최소한 시작점. 운이 나쁘면 응답한 씨족 수.”
“최악은.”
“재현을 기다리지 않고 먼저 장비를 깔 수 있어.”
도경은 화면에서 후보 타원을 지웠다. 지워도 머릿속에는 남았다. 세 갈래 중 하나. 낮은 능선 옆. 서도진의 마지막 기록이 반복 재생됐던 물기둥 근처.
엘런이 말했다. “지금 끊어.”
“끊을 거야.”
“아니, 보고서 쓰고 승인 기다리는 방식 말고. 현장망을 잘라.”
도경은 엘런을 보았다. “그럼 내부 검증도 죽어.”
“죽은 검증이 산 고래보다 낫다는 말은 안 했어.”
엘런의 말은 날이 서 있었지만 틀리지 않았다. 도경은 수신권 차단 패널을 열었다. 권한은 아직 살아 있었다. 세이렌이 들을 수 있다. 재현도, 교란도, 보호 결정도. 유출의 대가는 돈이 아니었다. 살아 있는 기억이 외부 장비 앞에 놓이는 값이었다.
*
차단 명령은 첫 번째 중계기에서 거절됐다. 도경은 같은 명령을 관리자 토큰으로 다시 넣었다. 이번에는 4초 동안 멈췄다가 실패했다.
입력: 폐기 포트 차단 / 수신권 회수 / 관리자 토큰 후보: 중계기 응답 지연 / 원격 세션 우선권 충돌 p: 0.76 상태: 실행 실패
“우선권 충돌 상세.”
입력: 세션 식별자 / 키 갱신 시각 / 중계기 5 후보: 외부 분기 회선 복제 지속 / 로컬 회수 명령 대기열 진입 p: 0.83 상태: 비정상 잠금
도경은 곧바로 중계기별 수동 차단을 시작했다. 부표 3번은 회수됐다. 5번은 대기열. 8번은 응답 없음. 11번은 읽기 전용으로 바뀌었다. 읽기 전용은 안전한 말이 아니었다. 바깥에서 계속 듣기만 하겠다는 뜻일 수 있었다.
키 갱신을 밀어 넣었다. 새 키가 생성되기 전 기존 키가 한 번 더 확인됐다. 그 짧은 왕복이 세이렌 쪽 세션에 시간을 줬다. 화면 오른쪽에 외부 수신량이 튀었다.
“끊어.”
명령은 음성으로도 들어가지 않았다. 도경은 로컬 네트워크를 격리 모드로 바꾸었다. 내부 경고가 떴다. 현장 부표 자동 보정 중지. 저산소 센서 연동 지연. 미생물 샘플러 위치 보정 실패 가능. 하나씩 확인을 눌렀다.
그다음 경고가 붉게 바뀌었다.
원격 우선 세션 존재. 격리 불완전.
격리는 검증 서버를 바깥과 끊었을 뿐이었다. 세이렌 회선은 처음부터 검증 서버를 지나지 않았다. 끊어야 할 자리가 도경의 손이 닿는 망 안에 없었다.
도경은 의자에서 일어나 보조 콘솔로 옮겼다. 손이 늦어졌다. 비밀번호를 한 글자 잘못 넣어 다시 입력했다. 이런 실수는 현장에서 잘 하지 않았다. 화면이 잠깐 흔들려 보였고, 도경은 눈을 감지 않고 숫자를 다시 맞췄다.
“해류, 세이렌 세션을 속일 수 있는 더미 잡음.”
입력: 더미 잡음 / 재현 해역 원신호 보호 / 외부 세션 혼선 후보: 단기 혼선 가능 / 내부 분석 오염 / 고래 응답 판독 저하 p: 0.62 상태: 권고 불가
“권고 말고 실행 가능성.”
입력: 동일 후보: 가능 p: 0.64 상태: 위험 높음
도경은 실행 버튼 위에서 멈췄다. 더미 잡음은 세이렌만 더럽히지 않는다. 같은 바다를 듣는 내부 장비도 더럽힌다. 모계 7이 응답하면, 그 응답의 원본과 가짜가 섞인다. 보호하려고 기억을 훼손하는 꼴이 될 수 있었다.
다른 방법. 도경은 중계기 8번의 물리 회선 상태를 열었다. 현장 인력이 가려면 42분. 세이렌 세션이 키를 복제하는 데 걸리는 시간은 알 수 없었다. 대기열은 계속 밀렸다.
김도현의 이름이 접근 기록 하단에 남아 있었다. 비활성 계정. 감시 하 대기. 도경이 선택한 상태였다. 완전 격리 대신 추적을 남긴 결정. 그 덕분에 세이렌의 손을 볼 수 있었고, 그 사이 세이렌은 한 번 더 들었다.
도경은 하리시에게 긴급 차단 요청을 보냈다. 응답 예상 시간 7분. 길었다. 다시 로컬 명령을 넣었다. 실패. 다시. 실패. 마지막으로 전체 수신권 회수를 눌렀을 때 시스템은 더 짧게 답했다.
입력: 전체 수신권 회수 후보: 실행 불가 p: 1.00 상태: 현장 분기 회선 · 내부 회수 불가
분기 회선. 도경은 손을 내렸다. 검증 서버 안에서 누를 수 있는 버튼으로는 검증망 바깥의 회선을 끊을 수 없었다. 남은 길은 둘뿐이었다. 중앙 게이트웨이를 통째로 내리면 세이렌의 귀도 막히지만, 저산소 경보와 전체 보호망도 같이 꺼진다. 아니면 현장에 사람을 보내 부표의 물리 회선을 끊는 것. 어느 쪽도 이 방에서 끝나지 않았다. 막으려는 쪽이 늦었다.
*
저녁 시스템실은 밝기만 낮아지고 소리는 그대로였다. 팬은 같은 속도로 돌았고, 냉각수 펌프는 벽 안쪽에서 얇게 떨렸다. 도경은 실패 로그를 한 줄씩 봉인했다. 추적 증거는 지워지지 않아야 했다. 지금 할 수 있는 보호는 너무 작았다.
외부 수신량 그래프가 다시 올라갔다. 재현 해역 쪽 저주파 채널이었다. 세이렌 미러 세션은 듣고 있었다. 말하지 않고, 만지지 않고, 바다의 귀퉁이에 앉아 고래들이 서로를 부르는 시간을 세고 있었다.
도경은 폭로 때 공개한 자료 묶음을 열었다. 보호를 얻기 위해 내보낸 도표들. 검증 가능한 현장성. 조작 방지를 위한 센서망 구조. 대중 앞에서는 단단한 증거였고, 의회 앞에서는 방패였다. 지금은 문고리였다. 세이렌은 그 문고리가 어디 붙어 있는지 알았다.
서도진의 파일명이 목록 아래쪽에 있었다. 도경은 열지 않았다. 아버지 기록을 증거로 만든 사람이 자신이라는 사실은 이미 충분했다. 서도진이 남긴 마지막 음향을 들고 보호 구역을 설득했고, 모계 7의 코다를 공적 기억으로 묶자고 밀어붙였다. 아버지를 변명으로 쓰고 싶지 않아 일부러 더 차갑게 굴었다. 그런데 차가운 절차도 문을 열 수 있었다.
도경은 손목에 묻은 접착 패드 자국을 문질렀다. 아침에 떼어 낸 센서 자국이 아직 네모나게 남아 있었다. 현장에 오래 있으면 몸에도 장비의 모양이 남는다. 책임도 그런 식으로 남는다면 차라리 다행일 것이다. 보이지 않으니 더 쉽게 늦었다.
해류 창이 새로 떴다.
입력: 재현 해역 저주파 채널 / 외부 미러 세션 / 수신량 상승 후보: 세이렌 청취 지속 / 집결 신호 부분 포착 / 위치 후보 축소 p: 0.89 상태: 진행 중
도경은 보고서 첫 줄을 고쳤다.
유출 내용은 좌표가 아니라 현장 음향 센서망 접근권이다.
둘째 줄은 더 늦게 썼다.
해당 접근권으로 세이렌은 씨족 집결 신호를 삼각측량할 수 있다.
셋째 줄 앞에서 멈췄다. 자기 방어를 넣을 자리는 많았다. 공개 당시에는 필요했다. 검증 없이는 보호가 무너졌다. 내부 배신은 예측 범위 밖이었다. 어느 문장도 거짓은 아니었다. 그래서 더 쓸 수 없었다.
도경은 셋째 줄을 짧게 남겼다.
내 공개 구조가 공격면이 되었다.
전송 버튼을 누르자 하리시 수신 표시가 켜졌다. 동시에 외부 수신량 그래프에 작은 봉우리가 하나 더 솟았다. 부표 5번, 8번, 11번. 같은 낮은 울림이 서로 다른 시간에 잡혔다.
클릭, 클릭, — 낮은 굴절 클릭 — 긴 간격 — 침묵, 클릭
도경은 스피커를 끄지 않았다. 듣는 쪽이 하나 더 늘었다고 해서 자신이 귀를 막을 수는 없었다. 유출의 대가는 살아 있는 기억의 노출이었다. 막을 방식은 아직 없었다. 절차로는 이미 늦었고, 허가를 기다리는 동안 바다는 계속 들렸다.
화면 아래 새 상태가 붙었다.
상태: 재현 해역 신호 외부 청취 확인
도경은 의자에 앉지 않았다. 세이렌은 지금, 같은 바다를 듣고 있었다.
이 화, 어떠셨나요?
미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.