LabHub
배우기 러닝패스 코스

은행 현장의 언어 · 누가 언제 무엇을 바꿨는가 · 실습

한도를 올린 사람을 증명하기

LabHub 에서 이어서 보기

목표

제자리 UPDATE 로 사라진 증거를 숫자로 드러내고, 정규 직렬화와 해시 사슬로 추가만 되는 감사 기록을 만든 뒤, 협력사 반출본의 변조를 찾아내고 HMAC 과 상관 ID 까지 붙여 증적 묶음을 냅니다.

왜 중요한가

감사에서 다투는 것은 값이 아니라 경위입니다. 현재 한도만 저장하는 시스템은 "누가 언제 왜 올렸나" 에 답할 수 없고, 그 답이 없으면 맞는 값도 설명할 수 없는 값이 됩니다.
해시 사슬은 기록을 고칠 수 없게 만드는 장치가 아니라 고치면 드러나게 만드는 장치입니다. 그래서 같은 사건이 늘 같은 바이트가 되는 정규 직렬화가 먼저 필요하고, 사슬을 통째로 다시 계산하는 위조를 막으려면 열쇠가 필요합니다.
채점기는 여러분이 적어 낸 해시를 믿지 않습니다. 원본에서 처음부터 다시 계산해 대조하고, 실행마다 다른 난수 벡터와 새로 만든 사슬로 여러분의 도구를 시험합니다.

단계

1. 재료 스크립트를 /root/audit/gen_audit.py 로 저장해 실행하고 /root/audit/core.db/root/audit/vendor_chain.jsonl 을 만듭니다.
2. 월초 스냅샷과 현재 한도를 대사해 사라진 증거를 /root/audit/lost.txt 에 changed·ticketed·untraceable·mismatched·raised_total 로 적습니다.
3. /root/audit/canon.py 를 만들어 표준 입력의 JSON 줄마다 정규 직렬화한 바이트의 sha256 을 한 줄씩 냅니다.
4. /root/audit/build_chain.py 로 app_log 400줄을 /root/audit/audit.db 의 audit_log 표에 해시 사슬로 옮깁니다.
5. /root/audit/verify_chain.py 로 협력사 반출본을 검증하고 찾은 자리를 /root/audit/tamper.txt 에 적습니다.
6. /root/audit/hmac.key/root/audit/mac_chain.py 로 사슬 위에 MAC 을 얹어 /root/audit/audit_mac.jsonl 을 만듭니다.
7. 상관 ID 로 사건을 요청 단위로 되묶어 /root/audit/corr.txt 에 적습니다.
8. /root/audit/evidence/manifest.json/root/audit/audit_report.md 로 증적 묶음을 냅니다.

참고

단계 8개

  1. 한도 스냅샷과 협력사 반출본 만들기
  2. 제자리 UPDATE 가 지운 것을 세기
  3. 같은 사건을 늘 같은 바이트로 만들기
  4. 로그 400줄을 해시 사슬로 묶기
  5. 협력사 반출본에서 손이 탄 자리 찾기
  6. 사슬 위에 열쇠를 얹기
  7. 사건 하나를 요청 하나로 되묶기
  8. 증적 묶음과 보고서 내기