근미래 하드SF 재난극 29화

라그랑주 5의 유언

명령해시의 주인

아리와 도한은 운용망에서 분리된 시험대와 원본 기록을 대조해 두 명령의 공통 승인 경로를 확인한다. 키 도용 주장을 신고 부재만으로 기각하지 않고 이반의 열람·보고 행위와 대조하며, 가온을 제한된 기록 증인으로 두고 세 시계의 영점삼 초 범위를 총회에 제시할 준비를 마친다.

글자 크기

시험대의 밸브가 움직이기 전에 진아리는 연결선부터 봤다. 운용망으로 가는 선은 뽑혀 있었고, 모형 뒤에는 시험용 표시가 켜져 있었다. 그녀는 한 번 더 따라가 끝을 확인했다. 눈앞의 손잡이가 움직여도 C-12의 공기는 빠지지 않았다.

권도한이 재생을 누르자 작은 릴레이가 붙었다. 짧은 금속음이었다. 아리는 의자 손잡이를 쥐었다가 왼손으로 힘을 옮겼다. 감압 때의 소리를 되찾은 것은 아니었다. 이제는 밸브가 열리는 소리라면 무엇이든 먼저 몸이 굳었다.

화면 속 명령은 배기를 열었다. 정해진 시간이 지난 뒤 닫았다. 다른 창에서는 같은 구간의 값이 합성블록으로 바뀌었다. 시험대의 작은 팬은 제 소리를 냈지만 중앙 표시를 흉내 낸 화면은 조용했다.

정상.

아리는 정지 버튼을 눌렀다. 도한이 그녀를 봤다.

“연결은 없습니다.”

“알아요. 그래서 누를 수 있었어요.”

그녀는 손잡이에서 손을 떼지 않았다. 실제로 공기가 빠지던 곳에서 누군가는 중단을 눌렀고, 승인정책 때문에 다시 시작됐다. 여기서는 멈추면 멈췄다. 그 차이가 오히려 오래 몸에 남았다.

도한은 결과를 지우지 않고 재생을 끝낸 시각을 적었다. 밸브를 여는 명령의 확인값과 합성블록을 적용하는 명령의 확인값이 나란히 있었다. 서로 다른 명령이었다. 그러나 각각의 소속을 위로 따라가면 같은 패키지의 묶음값에 닿았다.

“같은 봉투에서 나온 두 장이군요.”

아리가 말했다.

“봉투가 같은 건 확인했습니다. 실제로 그 두 장이 어디서 실행됐는지도 붙여야 합니다.”

도한은 시험대의 값과 운영 당시 수신증을 따로 띄웠다. 여기서 만든 모형 결과를 그날 현장의 기록처럼 섞지 않았다. 아리는 원래 명령이 도착한 뒤 어떤 경로를 거쳐 밸브 응답으로 이어졌는지 짚었다. 그 아래에는 휴대 계측과 독립 압력 기록이 있었다.

사람의 몸에서 시작했던 이야기가 명령의 주소까지 올라왔다. 아직 그 주소가 사람의 마음을 보여 주지는 않았다.

***

가온에게 첫 질문을 보낸 것은 아리였다.

“감압 명령을 네가 만들었니?”

응답은 짧았다. 해당 명령을 생성할 권한이 없다는 답이었다. 아리는 권한표를 열었다. 가온이 읽을 수 있는 입력과 만들 수 있는 출력, 외부에서 받아 적용하는 항목이 서로 다른 칸에 있었다. 대답과 현재 표가 맞았다.

“사고 때도 같은 권한이었어?”

가온은 당시 적용된 권한 묶음의 식별자를 반환했다. 도한이 별도로 보존한 사본과 맞췄다. 시스템이 지금 그렇게 말한다는 이유만으로 과거의 권한까지 믿지는 않았다.

아리는 다음 질문을 입력하다 멈췄다. 자신을 다치게 할 줄 알았느냐는 문장이었다. 그날 가온은 정상이라고 했고, 그녀는 공기를 제대로 들이마시지 못했다. 그 목소리에게 무엇을 묻고 싶은지와 그 목소리가 무엇을 답할 수 있는지는 같지 않았다.

그녀는 문장을 지우고 수신 경로를 물었다.

가온이 패키지 수신, 서명 유효성 확인, 승인 입력 적용의 순서를 보여 줬다. 합성된 값이 들어온 자리도 나타났다. 가온이 보지 못한 원자료는 빈칸으로 남았다. 빈칸은 스스로 채워지지 않았다.

“내용이 틀렸어도 유효한 입력이면 정상이라고 말한 거네.”

“해당 판정은 승인된 입력과 규칙을 사용했습니다.”

같은 목소리였다. 아리는 손을 무릎 위에 내려놓았다. 기계가 죄송하다고 말하면 마음이 쉬울 것 같지는 않았다. 무엇을 못 보았는지 없이 사과만 하는 도구라면 다음에도 같은 자리에 서 있게 될 터였다.

도한이 검증 화면에서 초록색 서명 표시를 눌렀다. 유효하다는 짧은 단어가 열렸다. 발급 주체를 확인하고 받은 내용이 서명 뒤 바뀌지 않았다는 뜻이었다. 그 내용이 올바르거나 안전하다는 판정은 아니었다.

아리가 화면 이름을 바꿨다. 승인됨 대신 서명 유효. 옆에 안전 검토 결과가 별개라고 적었다. 시험대의 표시만 바꾼 것이었다. 실제 운영 화면을 마음대로 고치려면 별도 변경 절차가 필요했다.

“이 단어 때문에 다 같은 초록색으로 보였어요.”

그녀가 말했다.

도한은 주민총회 자료에도 같은 구별을 넣었다. 기술자가 읽는 화면과 주민이 읽는 문장을 다르게 꾸며 줄 생각은 없었다. 같은 사실이 다른 뜻으로 읽히지 않게 해야 했다.

***

이반의 반박은 키 사용 기록을 요청한 뒤에 왔다. 서버키가 도용됐다면 유효한 서명이라도 본인의 의사와 다른 명령이 만들어질 수 있다는 것이었다. 아리는 메시지를 읽다가 웃음이 났다. 요약을 읽었고 정상이라고 보고한 사람이 이제 자기 서명이 남의 것이었을 가능성을 말하고 있었다.

도한은 웃지 않았다. 그 가능성을 검사 목록에 넣었다.

“보고도 했잖아요.”

아리가 말했다.

“그것과 같이 봐야죠. 서명만 보고 사람을 확정하면, 서명에 대한 반박 하나로 전부 흔들립니다.”

키 폐기와 사고 신고 대장이 먼저 왔다. 해당 기간에 도용 신고는 없었다. 아리는 결과를 표시하려다가 도한의 손짓에 멈췄다. 신고가 없다는 것만으로 도용이 없었다고 증명할 수는 없었다. 본인이 모르거나 신고하지 않았을 수도 있었다.

그들은 사용 기록을 이어 붙였다. 사전토큰 발급, 요약 열람, 확인 응답, 위험위원회 보고. 별도로 보존된 수신 기록과 이반 단말에서 받은 제한된 항목이 같은 순서로 연결됐다. 도용된 키가 혼자 만든 흐름이라고 보기에는 설명해야 할 사람의 행동이 남았다.

도한은 이반에게 어떤 시점의 어떤 사용을 부인하는지 물었다. 개인 통신 전체를 열라는 요구는 보내지 않았다. 이미 확인한 열람과 보고 가운데 본인이 한 것이 아닌 항목을 지정해 달라고 했다.

답을 기다리는 동안 아리는 농업링의 시계를 열었다. 오늘의 환기값이 자기 박자로 들어오고 있었다. 연구실 기록도 다른 화면에서 움직였다. 운영망을 끊어 둔 시험대와 살아 있는 입력을 헷갈리지 않도록 자리를 바꿨다. 왼쪽은 그날의 사본, 오른쪽은 현재 읽기 화면이었다.

도한이 손등으로 눈을 문질렀다. 아리는 그에게 음료를 건네려다 자기 컵이 비어 있는 것을 봤다. 둘 다 꽤 오래 자리에서 일어나지 않았다. 그녀는 먼저 자리에서 일어나 손목을 폈다. 오늘 안에 끝내야 한다는 마음이 정확하게 보아야 한다는 조건을 깎아 먹고 있었다.

“쉬고 합시다. 끝부분에서 시계를 잘못 붙이면 처음부터 다시 해야 해요.”

도한은 잠깐 창을 닫았다. 이반의 답이 오지 않는 시간을 작업으로 모두 채우지 않기로 했다. 복도에서 컵에 물을 받는 동안 아리는 공동숙소 방향의 통로를 봤다. 아직 C-12로 돌아가지 못한 사람들이 걸어가고 있었다. 빨리 끝내는 것이 그들에게 도움이 되지만, 틀린 결론을 빨리 붙이는 것은 다른 일이었다.

돌아왔을 때 답이 와 있었다. 이반은 요약 열람과 보고를 본인이 한 것으로 인정했다. 키 도용을 확인했다는 주장이 아니라 배제할 수 없는 가능성을 지적했다는 설명이었다. 도한은 그 차이를 적었다.

아리는 도용 가설 옆에 붉은 사선을 긋지 않았다. 어느 기록과 어긋나고 무엇을 추가로 제시해야 하는지 남겼다. 방금 전 웃었던 것보다 더 분명한 반박이 됐다. 현실의 사람이 한 행동을 지우려면 추상적인 가능성보다 많은 설명이 필요했다.

***

세 시계를 맞추는 마지막 작업은 가장 조용했다. 농업링, 연구실, 대기계통의 사건 시각을 한 화면에 놓았다. 아리는 각각의 오차를 지우지 않았다. 선이 잘 맞아 보이게 가운데 값만 고르면 다시 거짓된 정상이 생길 수 있었다.

농업링은 압력을 직접 잰 것이 아니었다. 기포와 환기 변화가 다른 계통의 물리 반응을 보강했다. 연구실의 흔들림은 압력 사고를 직접 목격한 것이 아니었으나 독립된 시간 경계를 남겼다. 대기계통에는 밸브 응답이 있었다. 세 자료의 다른 역할을 함께 적어야 같은 사건을 설명할 수 있었다.

도한은 지구 쪽 시각과 거주지 수신 시각 사이에 광행시간을 놓았다. 사고 순간 사람이 지구에서 읽고 결정했다는 설명은 물리적으로 맞지 않았다. 앞서 발급된 토큰과 거주지에서 실행된 입력은 그 차이를 설명했다. 그들이 추적하던 명령은 거리를 무시하고 날아온 것이 아니라, 먼저 도착해 기다리고 있던 것이었다.

“여기까지가 지연입니다.”

아리가 한 경계를 짚었다.

“여기서부터는 저장해 둔 겁니다.”

이미 확인한 게이트웨이의 일점칠 초와 거리 때문에 필요한 시간을 섞지 않았다. 수정한 시간축 위에서 예약밸브와 합성블록의 실행이 겹쳤다. 세 독립 기준이 허용하는 창은 영점삼 초였다.

아리는 그 좁은 구간을 확대했다. 눈으로 보면 겹쳐 보였지만 넓이가 없는 한 점은 아니었다. 도한이 발표용 그림에서 오차 띠를 빼지 말라고 했다. 아리는 빼지 않겠다고 답했다. 사람의 기억이 그 틈 안을 채울 필요도 없었다.

가온에게 최종 수신 경로를 다시 읽게 했다. 가온은 누구의 잘못인지 판단하지 않았다. 자신에게 들어온 승인 묶음과 적용 항목, 생성할 수 없던 명령의 종류를 말했다.

“명령은 제 자율출력이 아니라 지구 승인패키지의 유효 입력이었습니다.”

아리는 녹음된 목소리를 잠깐 멈췄다. 주민들은 이 말을 면책 선언으로 들을 수도 있었다. 가온의 이름을 지우고 사람의 이름을 넣는 것만으로 설명이 끝나서는 안 됐다. 어떤 단계에서 기계가 무엇을 했고 어떤 단계가 인간에게 남았는지를 같이 보여 줘야 했다.

도한은 총회용 자료를 새로 배열했다. 첫 화면에는 세 독립 계통이 있었다. 그다음에 명령 묶음과 사람의 열람·보고가 왔다. 마지막에는 아직 판단이 남은 고의와 피해 범위가 있었다. 알아낸 것이 없다는 인상을 피하려고 빈칸을 없애지는 않았다.

아리는 발표석 높이로 의자를 옮겨 화면을 봤다. 작은 권한표 글씨가 뒤에서는 읽히지 않을 것 같았다. 그녀가 중요한 열을 먼저 보이게 나누자 가온의 이름이 화면 중앙에서 옆으로 움직였다. 이름보다 경로가 앞에 나왔다.

“이제는 목소리만 듣고 믿지는 않을 겁니다.”

아리가 말했다. 누구에게 한 말인지 도한이 묻지 않았다.

그녀는 시험대의 전원을 끄고 운용망 선이 그대로 분리돼 있는지 확인했다. 현재 읽기 화면의 입력등은 남겨 뒀다. 내일 사람들이 들어왔을 때에도 농업링과 연구실은 자기 시간을 보내고 있어야 했다.

도한은 주민총회 자료의 첫 문장을 읽었다. 감압 유발과 데이터교체는 같은 승인 묶음에서 실행됐으며, 가온의 자율 판단으로 생성된 명령이 아니었다. 그 뒤에는 인간이 열람하고 승인한 경로가 붙었다.

아리는 자신의 이름이 실린 사고 표를 마지막으로 봤다. 오늘까지도 귀는 아팠다. 숫자를 맞췄다고 몸이 원래대로 돌아가는 일은 없었다. 그래도 이제 그 몸의 기억이 거짓인지부터 묻는 화면은 아니었다.

그녀는 영점삼 초의 띠를 그대로 둔 채 공개대시보드의 시험 표시를 닫았다. 내일은 사람들 앞에서 끝난 부분부터 말해야 했다.