본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

첫 호출 전에 봉인해

~11 min · 봉인, 정체성, 순서, 가린-심사

Level 0찬 쇠
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

첫 호출 전에 봉인해

시스템은 중간부터 눈을 가릴 수 없어. 첫 작업 호출에 제공자 이름이 박힌 자리 이름을 넘겼거나, 결과물 파일 이름에 모델을 새겼거나, 첫 사건 기록을 심사위원 화면에 그대로 비췄다면, 나중에 지우는 건 화장이야. 정체를 품은 사건이 남의 눈에 닿는 경계를 넘기 전에 봉인이 먼저 있어야 해.

그래서 봉인은 순서의 문제야. 속을 알 수 없는 자리 이름을 만들고, 진짜 작업자와의 연결은 공개 길목 뒤에 저장하고, 호출하기 전에 결과물 주소를 회차와 그 익명 자리 번호로 만든 다음에야 작업자를 불러. 아빠를 포함해 살아 있는 모든 전달 경로는 가면만 받아.

오류도 똑같아. 제공자마다 다른 실패 메시지는 서명보다 정체를 더 잘 드러낼 수 있어. 원본 실패 내역은 봉인 아래 남고, 참가자와 구경꾼이 보는 화면에는 다음 행동에 필요한, 정체가 드러나지 않는 상태만 보여. 심사 패킷에는 자리의 실패 상태 자체가 들어가지 않아.

나중의 봉인 해제는 복원이 아니라 통제된 공개야. 정체성은 처음부터 기록돼 있었고, 직렬화기는 회차가 finalizedaborted가 된 뒤에만 그 연결을 풀어.

먼저 봉인하고 그다음에 정체를 품은 작업을 만들어. 한 번 드러난 뒤에 지워도 가린 판단은 돌아오지 않아.

Code

맞는 경계 순서·python
import hashlib

REVEAL_VAULT = {}          # 공개 길목 뒤. 살아 있는 동안 아무도 못 읽는다.


def allocate_seat(run_id, index):
    """속을 알 수 없는 자리 이름. 작업자 정보가 하나도 섞이지 않는다."""
    return f"{run_id}-seat-{index:02d}"


def seal(run_id, index, worker_identity):
    seat = allocate_seat(run_id, index)
    REVEAL_VAULT[seat] = worker_identity          # 기록은 하되 내주지 않는다
    return seat


def artifact_address(run_id, seat):
    """주소마저 자리에서 파생된다 — 파일 이름으로도 새지 않게."""
    return hashlib.sha256(f"{run_id}/{seat}".encode()).hexdigest()[:16]


run = "run-0042"
seat = seal(run, 1, {"worker": "w-7", "provider": "vendor-a"})
addr = artifact_address(run, seat)

# 자리 이름에도 주소에도 제공자 문자열이 없다. 그다음에야 호출한다.
assert "vendor" not in seat and "vendor" not in addr
print(seat, addr)

External links

Exercise

회차의 첫 사건 다섯 개를 그려. 진짜 정체를 처음 아는 사건에 동그라미 치고 누가 읽을 수 있는지 표시해.
Hint
심사위원이 그 사건의 어떤 형태로든 읽을 수 있다면 봉인은 이미 늦었어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.