폐쇄망 현장 — 방산·국방 도메인 · 시간 동기화와 기록의 증거력 · 실습
배치가 큐보다 먼저 돌았다 — 시계가 2.4초 빨랐다
목표
표기가 제각각인 다섯 호스트의 로그를 한 축으로 모으고, 시각 계통에서 고립된 호스트를 찾고, 요청과 응답의 모순으로 시계 오차의 하한을 구한 뒤, 보정으로 설명되는 것과 설명되지 않는 것을 갈라 시각 신뢰성 진술서를 씁니다.
왜 중요한가
조사도 감사도 "무엇이 먼저 일어났는가" 를 묻습니다. 그 답은 기록의 시각에서 나오는데, 기록의 시각은 그것을 남긴 기계의 시계가 보여 준 값입니다. 2초쯤 어긋난 시계는 아무도 눈치채지 못한 채 원인과 결과를 뒤집습니다. 폐쇄망에서는 바깥 시각원이 없어 망 안의 시각원 하나에 모두가 맞추므로, 서로의 순서는 맞아도 절대 시각은 보증되지 않습니다. 진술서에 그 한계를 쓰지 않으면 나중에 그 문서 전체가 무너집니다.
왜 자료로 판정하는가
실습 파드에는 capability 가 없어 chronyc·ntpdate 를 쓸 수 없고 시스템 시계도 바꿀 수 없습니다. 그래서 이 실습은 동기화 상태 보고와 로그만으로 판정합니다. 실제 현장에서도 감리에 내는 것은 명령 출력이 아니라 이 판정의 결과이며, chronyc tracking 과 sources 의 출력이 여기 sync.json 이 놓인 자리를 차지합니다. 이 실습의 가정입니다.
단계
1. python3 로 /root/clock/data 에 sync.json·meta.json·로그 다섯 개·requests.csv 를 만듭니다.
2. 다섯 로그를 /root/clock/normalized.csv 에 host,seq,epoch_ms,evt 로 모으고, 오프셋 없는 로그를 UTC 로 잘못 읽었을 때의 영향을 /root/clock/naive.json 에 적습니다.
3. 호스트별 시각원 사슬을 /root/clock/chain.json 에, 선언된 시각원에 닿지 않는 호스트를 /root/clock/isolated.txt 에 적습니다.
4. 응답이 요청보다 앞선 건을 /root/clock/paradox.csv 에, 시계 오차의 하한을 /root/clock/bound.json 에 적습니다.
5. 한 호스트의 로그 안에서 시각이 되돌아간 자리를 /root/clock/backward.csv 에 적습니다.
6. 오프셋으로 보정한 시각을 /root/clock/corrected.csv 에, 보정 전후 모순 수를 /root/clock/paradox_after.json 에 적습니다.
7. 호스트마다 기록 신뢰 등급을 /root/clock/trust.csv 에 host,level,reason 으로 적습니다.
8. /root/clock/statement.json 과 /root/clock/statement.md 에 시각 신뢰성 진술서를 씁니다.
참고
- 로그 표기 규칙은
/root/clock/data/meta.json에 있습니다. 오프셋이 없는 로그를 UTC 로 읽으면 아홉 시간이 밀립니다. - 7단계 판정 규칙은 순서대로 적용합니다. 계통 미도달이면
설명안됨, 아니면 로그에 역행이 있을 때설명안됨, 아니면 보정 뒤에도 그 호스트가 낀 모순이 남으면설명안됨, 아니면 보정 전 모순에 낀 적이 있으면보정으로설명됨, 나머지는확인됨입니다.reason은 차례로계통미도달·역행·보정후모순·보정필요·없음입니다. - 보정은
참값 = 관측값 - offset_ms입니다. 부호를 뒤집으면 모순이 오히려 늘어납니다. - 흔한 실수 1:
epoch_ms를 실수로 두는 것. 정수 밀리초로 반올림해 적으세요. - 흔한 실수 2: 동기화를 타임스탬프 증명과 같은 것으로 쓰는 것. 둘은 다른 층이고 [RFC 3161](https://www.rfc-editor.org/rfc/rfc3161)이 뒤쪽 자리를 맡습니다.
- 표준 문서: [RFC 5905](https://www.rfc-editor.org/rfc/rfc5905), [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339), [NIST SP 800-92](https://csrc.nist.gov/pubs/sp/800/92/final).
단계 8개
- 동기화 보고와 다섯 호스트의 로그 만들기
- 표기 넷을 한 축으로 모으기
- 시각원 계통을 끝까지 따라가기
- 응답이 요청보다 앞선 건으로 오차의 하한 구하기
- 한 호스트 안에서 시각이 되돌아간 자리 찾기
- 오프셋으로 보정하고 남는 것 보기
- 호스트마다 기록 신뢰 등급 매기기
- 믿을 수 있는 것과 없는 것을 함께 적은 진술서 쓰기