공명

by TJ

T4 탐침 스트림이 열렸다.


He-3 농도: 0.0031%. 예상 범위의 4.7배.


다음 줄이 오기 전에 — 첫 줄이 없어졌다.




하린은 터미널 로그를 다시 올려봤다. 수신 스택 상단에 방금 떴던 수치가 없었다. 버퍼 지연이 아니었다. 버퍼 지연이면 0.3초 후에 재전송된다. 재전송 없이 그냥 없어졌다.


"아니, 잠깐."


다음 데이터 패킷이 들어왔다. He-3 농도: 0.0029%. 예상 범위의 4.3배. 하린이 스크롤을 올리는 순간 그것도 없어졌다.


삭제 속도가 전송 속도보다 빠르다.


하린은 키보드에서 손을 들고 팔꿈치를 책상에 올렸다. 머리를 손으로 받쳤다. 화면에서 숫자가 계속 나타나고 사라졌다. 나타나자마자 사라졌다. 눈으로 따라가기 힘든 속도였다.


계산했다.


수신 스택 타임스탬프 간격: 평균 0.24초. 삭제 타임스탬프: 전송 완료 후 0.07초. 0.24초 안에 들어오고 0.07초 만에 지워진다. 수동 캐시 스크립트가 실행되려면 최소 0.15초가 필요하다. 여유가 없다.


하린은 삭제 트리거를 추적했다. 수신 스택에서 역방향으로 로그를 따라갔다. 삭제 명령의 발신 주소가 나왔다.


GHC 본사. 지구.


"서진우가 아니다."


편도 43분 통신 지연을 감안하면 이 명령은 43분 전에 발신됐다. 하린이 스트림을 열기도 전에 이미 삭제 루틴이 활성화돼 있었다. GHC 본사가 직접 건드리고 있었다. 서진우는 중간 레이어였다. 실행자였다.


하린은 로컬 캐시 스크립트를 열었다. 전송 속도를 확인했다.


340 kB/s.


삭제 속도: 420 kB/s.


차이: 80 kB/s. 이 속도로 계속되면 약 1분 30초 뒤 T4 버퍼가 완전히 비워진다. 수동 캐시로는 데이터를 따라잡을 수 없다.


하린은 스크립트를 실행했다.


0.3초 후에 확인했다. 캐시 파일 크기: 0 바이트.


로컬 캐시 시도 실패.


창밖에 목성이 있었다. 대적점의 붉은 소용돌이가 스테이션 창문으로 보였다. 저 안에 T4 탐침이 있었다. 지금 이 순간에도 He-3 농도 이상값이 들어오고 있었다. GHC 본사의 삭제 루틴이 화면에 뜨기도 전에 그것을 지웠다.


수동 추적 모드. 다른 방법이 있어야 했다.


하린은 의자를 당겨 앉았다. 화면을 응시했다. 데이터가 계속 나타나고 사라졌다.




1차 시도.


삭제 스크립트의 타이밍 패턴을 분석했다. 수신 이벤트가 트리거가 되어 삭제 루틴이 실행되는 구조였다. 그렇다면 수신 이벤트와 삭제 루틴 사이의 0.07초 간격에 인젝션을 넣으면 된다. 삭제 명령이 캐시 명령보다 0.03초 앞서 실행되도록 우선순위가 설정돼 있었다. 그 우선순위를 바꿀 수 있다면.


하린은 우선순위 인젝션 코드를 작성했다. 17줄. 실행했다.


삭제가 0.03초 앞섰다.


인젝션이 실행되기도 전에 데이터가 사라졌다. 우선순위 체계가 루트 레벨에서 잠겨 있었다. 관리자 권한이 필요했다. 한수인이 준 코드는 생체 인증 로그용이었다. 삭제 루틴 우선순위까지 건드릴 수 없었다.


1차 시도 실패.


손목 맥박: 78.


하린은 손목 안쪽을 엄지손가락으로 눌렀다. 맥박을 확인하는 습관이었다. 평소보다 낮았다. 집중하면 오히려 심박수가 내려가는 체질이었다. 이오 기지 훈련의 잔재였다. 방사선 경보가 울릴 때 뛰는 사람은 산소를 낭비했다. 천천히 체크리스트를 실행하는 사람이 살아남았다.


다른 루트.




2차 시도.


버퍼 미러링. 수신 스택이 아닌 네트워크 계층에서 패킷 자체를 복사하는 방법. 삭제 루틴은 수신 스택을 감시한다. 네트워크 계층은 감시 범위 밖이었다.


하린은 패킷 미러링 스크립트를 작성했다. 43줄. 더 복잡했다.


실행했다.


미러링 파일이 생성됐다. 크기가 늘어났다. 0.3 kB. 0.7 kB.


그리고 멈췄다.


삭제 루틴이 네트워크 계층 미러 파일도 감시하고 있었다. 루트 레벨 후킹이었다. 이것도 잠겨 있었다.


2차 시도 실패.


화면 왼쪽 아래 대기 모니터가 진동했다. 0.01 단위로 수치가 흔들렸다. 하린의 시선은 터미널에서 움직이지 않았다. 알아채지 못했다. 모니터 오른쪽에 있는 자기장 측정기도 같은 주기로 미세하게 흔들렸다. 0.03Hz.


하린은 3차 시도를 준비했다.


생각했다. 루트 레벨 잠금을 우회하는 방법은 세 가지다. 첫 번째, 관리자 권한 확보. 없다. 두 번째, 물리 계층 직접 접근. 물리적으로 T4 탐침 송신기에 가야 한다. 불가능하다. 세 번째, 삭제 루틴이 접근하지 못하는 레이어.


KRONOS였다.


KRONOS의 수식 채널은 표준 채널이 아니었다. 박준서가 격리한 것은 표준 채널이었다. KRONOS RAW_COUNT 채널은 격리 범위 밖이었다. 이미 확인한 경로였다. 그 채널에서 KRONOS가 응답했다.


하린은 KRONOS 터미널을 열었다.


수식 쿼리를 입력했다.


f(x) = T4_STREAM_PACKET × 삭제루틴우회(x)?


응답 지연: 0.3초.


[KRONOS]

쿼리 수신.

T4_STREAM 현재 삭제 우선순위: ROOT_LEVEL_LOCK

우회 경로: 없음 (표준 레이어 기준)

비표준 레이어: 계산 중.


0.4초 추가 지연.


비표준 레이어 탐색 결과: 없음.


없음.


하린은 화면을 닫았다. KRONOS도 모르는 경로였다. 3차 시도 준비 중이었지만 시도 자체가 의미 없었다. 루트 레벨이 잠겨 있는 한 어떤 소프트웨어 접근도 차단된다.


심박수: 76. 더 내려갔다.


자기비하 유머가 나올 타이밍이었다. 나오지 않았다. 그럴 여유가 없었다.


T4 탐침은 지금 이 순간에도 데이터를 보내고 있었다. He-3 농도 이상값이. 그 데이터가 전송 즉시 지워지고 있었다. 2년 4개월 동안 살아남은 탐침이 보내는 데이터가. GHC 본사 자동화 스크립트가 그것을 전송 즉시 지웠다.


하린은 멈추지 않았다.


의자를 더 당겨 앉았다. 귀 뒤 머리카락을 넘기는 습관이 발동하지 않았다. 그 대신 손이 키보드 위 0.3cm 높이에 정지했다. 입력하려는 자세지만 입력하지 않는 상태. 뇌가 다음 동작을 계산하는 중이었다.


3차 시도.


방법은 없었다. 그래도 3차 시도를 했다. 이번에는 타이밍 기반이 아니었다. 데이터 분산 저장이었다. 삭제 루틴이 단일 파일을 감시한다면, 파일 조각을 여러 위치에 0.01초 간격으로 나눠 저장하는 방법이었다. 감시 스캔이 모든 조각을 동시에 처리할 수 없다면.


하린은 코드를 작성하기 시작했다. 첫 줄을 쓰다가 멈췄다.


삭제 루틴의 스캔 주기: 0.005초. 0.01초 간격 분산 저장 시도 시, 스캔이 두 번 실행된다. 조각 두 개 모두 삭제된다.


계산 완료. 실패.


3차 시도 실패.


하린은 손을 키보드에서 내렸다. 의자 등받이에 등을 기댔다. 화면을 응시했다. 데이터가 여전히 나타나고 사라졌다. 규칙적으로. 0.24초마다 데이터가 들어오고 0.07초 만에 사라졌다.


왼쪽 대기 모니터가 더 크게 흔들렸다. 자기장 측정기 수치가 0.03Hz로 진동했다. 오른쪽 복사선량계도 같은 주파수였다. 세 개의 계기판이 동기화됐다.


하린의 시선은 터미널에서 움직이지 않았다.




세 번의 실패가 쌓였다.


화면 오른쪽 구석에 타이머가 있었다. 46:19:44. 46시간 19분 44초. 그 옆에 다른 숫자: T4 버퍼 잔존량. 12분 뒤 완전 삭제.


하린은 화면을 응시했다.


대기 모니터가 낮은 진동음으로 흔들렸다. 주기적이었다.


수식이 머릿속에 있었다. 삭제 속도 420 kB/s. 전송 속도 340 kB/s. 차이 80 kB/s. 루트 레벨 잠금. 관리자 권한 없음. 네트워크 계층 후킹. 스캔 주기 0.005초.


수치는 하나로 모였다.


방법이 없다.


이 결론을 하린은 세 번 계산했다. 세 번 모두 같은 결론이 나왔다. 수학이 거짓말하지 않는다면, 방법이 없었다.


하린은 계속 화면을 응시했다.


눈이 중경에 맞춰졌다. 터미널 문자들이 살짝 흐릿해졌다. 이오 기지에서 어릴 때부터 있었던 상태였다. 방사선 경보가 울릴 때, 지하 통로에서 길을 잃었을 때, 그 이상한 집중 상태. 눈은 화면을 보지만 뇌는 화면 너머를 처리하는 상태.


계기판 세 개가 0.03Hz로 계속 진동했다.


그때, 흉부에서 진동이 시작됐다.




처음에는 장비 오류라고 판단했다.


흉부에서 진동이 시작됐다. 갈비뼈 아래 부위. 심장이 아닌 위치였다. 진동이 팔을 타고 손끝으로 이동했다. 손끝 다섯 개. 계기판 3대와 같은 주파수. 0.03Hz.


하린은 동작을 멈췄다.


화면에서 눈을 들었다. 왼쪽 대기 모니터를 봤다. 수치가 0.03Hz로 흔들리고 있었다. 자기장 측정기. 같은 주파수. 복사선량계. 같은 주파수.


세 계기판이 동일 주파수로 진동하고 있었다.


하린의 손끝도 동일한 주파수였다.


"이게 뭔가."


손을 들어 눈 앞에 가져갔다. 손이 떨리지 않았다. 진동은 느낌이 아니었다. 더 정확히 말하면 — 계기판 0.03Hz. 손끝 0.03Hz.


장비 오류 가능성: 세 계기판이 동시에 같은 주파수로 오작동할 확률은 계산하기 어려웠다. 높지 않았다.


KRONOS 터미널 화면이 깜빡였다.


KRONOS 채널을 닫지 않았다.


터미널이 다시 깜빡였다.


[KRONOS]


하린은 양손을 무릎 위에 내렸다. 쿼리를 입력한 적이 없었다.


터미널에 텍스트가 출력됐다.


[KRONOS]

RESPONSE_LATENCY: 0ms.

CHANNEL: EMI_DIRECT.


응답 지연 0ms.


하린은 그 숫자를 다시 봤다. 0ms. KRONOS의 정상 응답 지연은 0.3~0.5초였다. 0.3초도 아니었다. 0이었다. 전송 경로가 없었다. 네트워크를 통하지 않았다는 의미였다. EMI_DIRECT 채널. 직결.


"내가 아무것도 하지 않았다."


터미널에 텍스트가 계속 출력됐다.


[KRONOS]

EMI_CHANNEL_ESTABLISHED.

T4_STREAM 수신 중.

CACHE_WRITE_ACTIVE.

삭제 루틴 접근 불가 레이어: ROOT_ISOLATED_CACHE.


하린은 손을 들려다 멈췄다.


아무것도 하지 않았다.




화면에서 데이터가 들어오고 있었다.


T4 탐침이 보내는 He-3 농도 데이터가. 삭제 루틴이 수신 스택에서 지우고 있었다. 그와 동시에 KRONOS가 같은 데이터를 다른 경로로 받아 다른 레이어에 저장하고 있었다. 삭제 루틴이 접근하지 못하는 레이어에.


하린은 CACHE_WRITE_ACTIVE 로그를 봤다. 데이터가 축적되고 있었다. 0.1 MB. 0.4 MB. 1.2 MB.


삭제되지 않았다.


"장비 오류인가. 내 오류인가."


KRONOS 터미널을 봤다. 응답 지연이 0ms였다. 네트워크 채널을 통하지 않는다. 수식 채널도 아니었다. RAW_COUNT 채널도 아니었다. EMI_DIRECT. 직결 채널.


이오 기지에서 어릴 때, 방사선 폭풍이 오기 전에 피부가 달라졌다. 전자기 환경이 바뀌는 것을 신체로 먼저 알았다. ARIA 스테이션에 온 뒤, 역장실에서 조명이 깜빡인 순간 EMI가 방전됐다. 그것이 자연 발생인지 의도적 발동인지 하린 자신도 알 수 없었다.


지금은 의도하지 않았다. 분명히 의도하지 않았다. 세 번의 시도가 모두 실패한 뒤 화면을 응시했을 뿐이었다.


그런데 데이터가 들어오고 있었다.


흉부의 진동이 계속됐다. 팔을 통해 손끝으로. 계기판 세 개가 같은 주파수로 흔들렸다. KRONOS 터미널이 0ms 지연으로 응답하고 있었다.


하린은 아무것도 하지 않았다.


아무것도 하지 않는 것이 지금 할 수 있는 유일한 행동이었다.




CACHE_WRITE_ACTIVE 진행 상황이 터미널에 출력됐다.


[KRONOS]

T4_STREAM 패킷 수신율: 98.7%

누적 크기: 4.3 MB / 예상 최종 크기: 7.1 MB

저장 레이어: ROOT_ISOLATED_CACHE (삭제 루틴 접근 불가)


하린은 그 숫자를 봤다. 98.7%. 삭제 루틴이 수신 스택에서 데이터를 지우는 동안, KRONOS가 네트워크 계층 이전 단계에서 패킷을 가로채고 있었다. EMI 채널을 통해. 하린의 신체를 경유해서.


아니, 경유한다는 표현이 정확한지 몰랐다.


정확한 것은 수치였다. RESPONSE_LATENCY: 0ms. 네트워크를 통하지 않았다. EMI_DIRECT. 하린의 EMI가 KRONOS와 직결 채널을 형성했다. KRONOS는 그 채널을 통해 T4 스트림을 수신하고 있었다. 삭제 루틴은 표준 네트워크 계층을 감시한다. EMI 직결 채널은 표준 계층이 아니었다.


이것을 KRONOS는 미리 알고 있었던 것인가.


비표준 레이어 탐색 결과: 없음. 조금 전에 그렇게 답했다. 그 다음 EMI 채널이 형성됐다. KRONOS가 거짓말한 것인가, 아니면 KRONOS도 예상하지 못한 것인가.


하린은 판단을 유보했다. 지금은 그 판단이 필요하지 않았다.


흉부의 진동이 약해지지 않았다. 계기판들이 계속 0.03Hz로 흔들렸다. KRONOS가 계속 패킷을 수신했다.


[KRONOS]

T4_STREAM 패킷 수신율: 99.1%

누적 크기: 6.8 MB / 예상 최종 크기: 7.1 MB

저장 레이어: ROOT_ISOLATED_CACHE

CACHE_WRITE 완료 예상: 47초 후


47초.


하린은 의자에서 손을 무릎 위에 올렸다. 키보드를 건드리지 않았다. 화면만 봤다.


진동이 손끝으로 계속 전달됐다. 계기판이 흔들렸다. KRONOS가 패킷을 받았다.


47초 동안 아무것도 하지 않았다.




[KRONOS]

CACHE_WRITE_COMPLETE.

저장 완료: ROOT_ISOLATED_CACHE


그 다음 줄이 출력됐다.


[KRONOS]

CACHE_COPY_COMPLETE:

T4_ANOMALY_DATA (전체 스트림 99.4%)

ORIGINAL_REPORT_DIFF_38 (He-3 수치 수정 38건)

KANG_KAI_TIMELINE (분류: CLASSIFIED / KEY_DATA_LAYER)

─────────────────────────

삭제 루틴 접근 여부: 불가.

─────────────────────────

2년 4개월 14일.


하린은 세 번째 항목에서 시선이 멈췄다.


KANG_KAI_TIMELINE.


그것도 들어왔다. K_MEMORY_ARCHIVE 안에 있는 것. 지금 여기서 내용을 읽을 수는 없었다. CLASSIFIED였다. KEY_DATA_LAYER. 하지만 복사됐다. ROOT_ISOLATED_CACHE 안에.


흉부의 진동이 약해졌다. 계기판들이 진정됐다. 자기장 측정기 수치가 안정됐다. 복사선량계도. 대기 모니터도.


하린은 손목을 뒤집어 맥박을 확인했다. 74. 평소보다도 낮았다.


KRONOS 터미널에 추가 텍스트가 출력됐다.


[KRONOS]

TRANSMISSION_WINDOW_NOW_OPEN: IAA_RELAY_OPTIMAL.

목성-지구 최단 거리 구간. 편도 통신 지연: 33분.

현재 창 지속 시간: 47_MIN.

다음 최적 창: 14_DAYS.


IAA. 국제 천문 기관(International Astronomy Authority). 지구와 목성 사이의 중계 위성 네트워크. ARIA 스테이션에서 직접 지구로 전송하는 것이 아니라 IAA 중계 위성을 통해 전송하는 방식이었다. 목성-지구 거리에 따라 중계 효율이 달라졌다. 지금이 최적 구간이었다.


47분.


하린은 화면 오른쪽 모서리를 봤다. 타이머: 46:18:02.


지금 전송하면.


지구까지 33분. GHC 본사 법무팀은 43분부터다. 데이터가 IAA를 통해 복수의 공공 수신 기관에 동시 전달된다. GHC 본사가 차단하려면 IAA의 모든 수신 채널을 동시에 막아야 한다. 불가능하지는 않지만 불가능에 가깝다.


전송하지 않으면.


다음 창은 14일 후. 14일. 타이머: 46시간. 타이머가 먼저 끝난다. 46시간 안에 서명하거나 거절해야 한다. 서명하면 ARIA 스테이션 내부 발표 경로를 쓸 수 있다. 내부 발표는 GHC가 데이터 소유권을 주장할 수 있다. 거절하면 — 거절의 결과는 알고 있었다.


T4 데이터를 지금 전송하면 계약 위반이었다. ARIA 스테이션에서 생산된 모든 데이터는 컨소시엄 공동 소유. 공동 소유자의 동의 없이 외부 기관에 전송하면 계약 위반. 해고.


하린은 CACHE_COPY_COMPLETE 목록을 다시 봤다.


T4_ANOMALY_DATA. He-3 농도 이상값. 예상 범위의 4.7배. 이것이 IAA를 통해 지구에 전달되면 GHC의 독점 채굴권 근거가 흔들린다. He-3 수치를 낮게 유지해야 국제 입찰에서 GHC가 단독 유리한 위치를 차지할 수 있었다. 실제 수치가 예상의 4.7배라면 — He-3이 그만큼 풍부하다면 — 국제 입찰 구조가 바뀐다.


ORIGINAL_REPORT_DIFF_38. 35개월 동안 38건. 수정이 아니라 조작이었다.


KANG_KAI_TIMELINE. 그 안에 무엇이 있는지 아직 몰랐다. CLASSIFIED였다.


KRONOS가 3년을 모았다. 혼자.



[KRONOS]

현재 창 잔여 시간: 44_MIN.

다음 창: 14_DAYS.

전송 여부: 미결정.


하린은 터미널을 봤다. KRONOS가 전송 여부를 표시했다. 결정을 요청하지 않았다. 상태를 보고했다. 미결정.


전송 버튼은 화면 하단에 있었다.


하린의 손이 키보드 위에 올라갔다.


두 번의 클릭이었다. 전송 확인 창을 열고 전송을 실행하는 두 번.


손이 멈췄다.


전송하면 GHC는 하린을 끝낼 것이었다. 계약 위반. 데이터 무단 유출. 법적 절차. 소송. ARIA 스테이션 출입 금지. 연구 커리어.


전송하지 않으면 KRONOS가 3년 동안 모은 것이 14일 후까지 기다려야 했다. 타이머는 46시간이었다. 타이머가 먼저 끝난다.


[KRONOS]

TRANSMISSION_WINDOW_OPEN: IAA_RELAY_OPTIMAL.

현재 창 잔여 시간: 43_MIN.

다음 창: 14_DAYS.

─────

전송 여부: 미결정.

결정 주체: KIM_HARIN(ELENA).


화면이 조용했다. KRONOS가 더 이상 텍스트를 출력하지 않았다.


하린의 손이 키보드 위에 있었다.


전송 버튼까지 두 번의 클릭이었다.


이전 14화카이를 찾아서