열쇠
Hahoe Genesis Protocol (HGP)에서 원본을 무엇으로 잠그고, 누가 열고, 열쇠를 잃거나 기탁자가 세상을 떠나면 어떻게 되는지를 정한다. 원칙 3 「주인의 열쇠가 아니면 열리지 않는다」를 실제로 지키는 법이다.
0. 한 줄로
섹션 제목: “0. 한 줄로”원본은 파일마다 다른 열쇠로 잠그고, 그 열쇠를 다시 기탁자의 열쇠로 감싼다. 기탁자의 열쇠는 셋으로 나눠 맡기고 둘이 모여야 되살아난다: 기탁자 기기, 가족(승계자), 노드원. 노드원 혼자서는 열 수 없고, 기탁자는 외울 것이 없다.
1. 지키는 것
섹션 제목: “1. 지키는 것”- 노드원 혼자서는 원본을 열 수 없다 (원칙 3). 저장고 운영자, 서버를 턴 사람, 노드원에 자료를 요구하는 사람 모두 마찬가지다.
- 기탁자는 열쇠를 의식하지 않는다 (HGP-0005 2절). 복구 문구를 외우거나 종이를 지키게 하지 않는다. 폰의 지문·얼굴 인식으로 연다.
- 폰을 잃어도 기록을 잃지 않는다. 가족과 노드원이 함께 되찾아 준다.
- 봉인은 기탁자 혼자다. 승계자도, 되찾기를 도운 가족도 열지 못한다 (00-원칙 3절).
- 열쇠로 막는 구간과 약속으로 막는 구간을 나눠 적는다 (01-권한 1절 4번). 이 문서 7절에 모아 둔다.
2. 열쇠의 종류
섹션 제목: “2. 열쇠의 종류”| 열쇠 | 무엇을 하나 | 어디에 있나 | 9월 규격 |
|---|---|---|---|
| 내용 열쇠 | 원본 파일 하나를 잠근다. 파일마다 새로 만드는 무작위 열쇠 | 감싼 채로 저장고의 열쇠 장부에 | |
| 주인 열쇠 | 기탁자의 내용 열쇠들(봉인 빼고)을 감싼다. 서명 열쇠도 여기서 끌어낸다 | 기탁자 기기 안. 되찾기용 조각 셋 (4절) | 사람의 열쇠 |
| 관계 열쇠 | 범위 하나(관계, 조합)를 연다. 그 범위의 내용 열쇠를 한 번 더 감싼다 | 그 범위에 든 사람들의 주인 열쇠로 감싸서 | 관계의 열쇠 |
| 봉인 열쇠 | 봉인 기록의 내용 열쇠를 감싼다 | 기탁자 기기와, 인터넷에 붙지 않은 곳 하나. 조각을 나누지 않는다 | 차가운 것 (5절) |
| 서명 열쇠 | 기탁자가 지문에 서명한다 (5절) | 주인 열쇠에서 끌어낸다 |
- 「앱 열쇠」(결정 0011)는 이 문서의 열쇠가 아니다. 앱이 저장고에 들어가는 출입증이고, 원본을 풀지 못한다.
- 한 파일을 여는 길: 기기의 지문·얼굴 인식 → 주인 열쇠 → 그 파일의 내용 열쇠 → 원본. 관계 범위면 관계 열쇠를 한 번 더 거친다.
3. 잠그는 때와 곳
섹션 제목: “3. 잠그는 때와 곳”- 기기에서 잠근 뒤 보낸다. 녹음이 끝나면 기기가 원본 지문(
sha256_device)을 뜨고, 내용 열쇠로 잠그고, 잠근 파일의 지문까지 뜬 뒤 보낸다. 저장고는 잠근 파일만 받는다. - 저장고는 잠근 파일의 지문(보관 지문,
sha256_stored)을 떠서 기기가 보낸 값과 맞춰 본다. 다르면 저장하지 않는다 (02-지문 2절의 「두 번 뜬다」를 잠근 파일로 한다). - 저장고는 원본을 볼 수 없으므로 원본 지문을 다시 뜰 수 없다. 기기에서 잠그면 원본 지문(
sha256_store)은 기기가 뜬 값을 그대로 적는다. 원본 지문을 다시 맞춰 보는 일은 기탁자 기기가 열 때마다 한다 (02-지문 4절). - 장부에는
encryption: "user-key",event: "encrypted"가 남는다 (03-manifest 3·5절). - 기기에서 잠글 수 없는 경우(이미 찍어 둔 고문서 스캔 묶음 등)에는 저장고가 받는 즉시 잠그고 잠그기 전 사본을 지운다. 받은 순간부터 잠글 때까지는 약속으로 막는다.
4. 셋 중 둘: 되찾기와 승계
섹션 제목: “4. 셋 중 둘: 되찾기와 승계”주인 열쇠를 셋으로 나눈다. 둘이 모이면 주인 열쇠가 되살아나고, 하나로는 아무것도 알 수 없다 (샤미르 비밀 나누기). 노드원 대표 결정 (2026-10-13, 결정 0018).
| 조각 | 누가 갖나 | 어떻게 |
|---|---|---|
| 1 | 기탁자 | 기기 안 (주인 열쇠 자체와 함께) |
| 2 | 가족 (승계자) | 가족이 앱을 쓰면 그 사람의 주인 열쇠로 감싸서, 아니면 종이 카드(QR)로 |
| 3 | 노드원 | 노드원 열쇠로 잠가 데이터와 다른 곳에. 사본은 원본 두 곳 규칙대로 (결정 0010) |
- 가족을 정하지 않으면 조각 2 자리에 기탁자의 둘째 기기(다른 폰, 컴퓨터, 보안 열쇠)를 쓴다. 둘 다 없으면 폰을 잃을 때 되찾을 수 없다. 시작할 때 이것을 알린다.
- 조각 2를 가진 가족이 곧 승계자인 것을 기본으로 한다. 다르게 정할 수도 있다.
- 조각은 열쇠를 되살리는 데만 쓴다. 조각을 가진 가족은 그것만으로 아무것도 열지 못한다.
되찾기 (기탁자가 살아 있고 폰을 잃었을 때)
- 기탁자가 새 기기에서 되찾기를 청한다. 노드원은 신원을 확인한다.
- 가족이 자기 조각을 새 기기로 보낸다.
- 7일을 기다린다. 그동안 기탁자의 다른 기기와 가족에게 알린다. 누가 기탁자인 척 청한 것이면 그 사이에 막을 수 있다.
- 노드원이 자기 조각을 새 기기로 보낸다. 주인 열쇠는 새 기기 안에서만 되살아난다. 노드원과 가족은 서로의 조각을 보지 않는다.
- 새 기기는 주인 열쇠를 새로 만들고 조각을 다시 나눈다 (옛 조각은 쓸모없어진다).
- 되찾기를 했다는 사실과 시각은 지우지 않는 줄로 남는다 (HGP-0005 10절).
승계 (기탁자가 세상을 떠났을 때)
01-권한 2절의 절차 그대로다: 사망 확인, 승계자 신원 확인, 대기 기간, 실행 기록. 대기 기간은 30일로 한다. 그다음 승계자 조각과 노드원 조각으로 주인 열쇠를 승계자 기기에서 되살린다.
- 승계자가 여는 것은 봉인을 뺀 전부다. 봉인 열쇠는 조각에 들어 있지 않으므로 승계로 열리지 않는다 (00-원칙 3절 「승계자도 열지 못한다」).
- 승계는 범위를 바꾸지 않는다. 승계자는 범위를 넓히지 못한다 (01-권한 2절).
노드원이 사라지면 조각 3을 다음 수탁자에게 넘긴다. 넘기는 것은 조각이고, 넘긴 사실은 기록된다 (HGP-0003 10조, HGP-0005 8-1절). 넘기기 전이라도 기탁자 기기와 가족 조각, 둘이면 열쇠를 다시 나눌 수 있다.
5. 서명
섹션 제목: “5. 서명”02-지문 8절에서 열어 둔 「기탁자 서명」을 정한다 (결정 0018).
- Ed25519 (RFC 8032). 서명 열쇠는 주인 열쇠에서 끌어내고(HKDF, RFC 5869), 기기 안에서만 쓴다.
- 서명하는 것: 기록의 원본 지문과 기록 번호, 시각. 「이 사람이 이 기록을 맡겼다」는 증명이다.
- 공개 열쇠는 저장고에 두고, 바뀔 때마다(되찾기, 승계) 새 공개 열쇠와 그 까닭을 지우지 않는 줄로 남긴다.
- C2PA 방식(X.509 인증서)은 기관이 기탁자일 때 다시 본다.
- 등록부 줄의 저장고 서명(secp256k1, 결정 0016)과는 다르다. 그것은 저장고가 「올렸다」는 서명이다.
6. 범위와 열쇠
섹션 제목: “6. 범위와 열쇠”- 범위를 넓힌다 = 내용 열쇠를 새 관계 열쇠로 한 번 더 감싸 둔다. 원본은 옮기지 않는다 (HGP-0005 6절).
- 범위를 좁힌다 = 그 감싼 사본을 없앤다. 이미 열어 본 사람이 받아 간 것은 거둘 수 없다 (07-기탁 7절).
- 공개 = 원본은 잠근 채 두고, 공개용 사본(줄인 사본, 위치 정보 뺌)만 잠그지 않고 따로 둔다. 사본에는 어느 원본에서 어떻게 만들었는지가 따라붙는다 (02-지문 9절).
- 봉인 = 봉인 열쇠로만 감싼다. 감싼 열쇠는 온라인 서버에 두지 않는다 (HGP-0005 5절 「차가운 것」).
- 파기 = 그 기록의 내용 열쇠를 감싼 사본을 모두 없앤다 (01-권한 4절). 열쇠 장부의 백업에 남은 사본은 백업을 돌려쓰는 기간이 지나야 사라진다. 그 기간(예: 30일)을 파기 줄에 적는다. 잠긴 파일은 남아도 누구도 열지 못한다.
7. 열리는 순간: 약속으로 막는 구간
섹션 제목: “7. 열리는 순간: 약속으로 막는 구간”| 구간 | 무엇이 열리나 | 어떻게 막나 |
|---|---|---|
| 전사, 번역처럼 원본을 바깥 회사로 보낼 때 | 일 하나마다 기탁자 기기가 그 파일의 내용 열쇠를 서버에 잠깐 건넨다. 서버는 메모리에서만 풀어 보내고, 디스크와 로그에 남기지 않고, 일이 끝나면 버린다. 「자동 전사」를 켜 두면 녹음이 끝날 때 기기가 이 허락을 함께 보낸다 | 약속. 그 순간 서버 메모리에는 열린 원본이 있다. 보낸 기록은 sent_to (03-manifest 8절) |
| 기기에서 잠글 수 없어 저장고가 받자마자 잠글 때 | 받은 순간부터 잠글 때까지 | 약속 |
| 해석층 (전사본, 번역, 요약) | 지금은 잠그지 않는다. 범위대로 걸러 보여 준다 | 약속. 해석층 잠금은 secretary v1 전에 다시 정한다 |
| 공개·조합 범위의 열람용 사본 | 잠그지 않는다 (HGP-0005 5절 「뜨거운 것」) | 범위 거르기 |
| 되찾기 | 노드원과 가족이 짜면 기탁자 없이 주인 열쇠를 되살릴 수 있다 | 약속과 7일 알림과 지우지 않는 기록 |
이 표가 01-권한 6절 1번(「전사할 때 원본이 풀리는 순간」)의 답이다. 폰에서 전사 회사로 바로 보내는 길은 쓰지 않는다. 전사 회사의 열쇠(API 키)를 폰에 둘 수 없다.
8. 지금 어디까지
섹션 제목: “8. 지금 어디까지”| 어디 | 잠금 | 때 |
|---|---|---|
| secretary | 잠그지 않음 (encryption: "none"). 약속으로만 막는다 |
v0.2 (11/16)에 이 문서대로 |
| arkive | 잠그지 않음. 약속으로만 막는다 | secretary가 잠근 원본을 맡기기 시작할 때 받는 쪽부터 (결정 0004). arkive 자체 기탁자 열쇠는 로그인 판 다음에 정한다 |
| provenance | 잠그지 않음. 공개할 사진이 대부분이다 | arkive로 합칠 때 (2027-02) |
9. 권하는 방식 (구현은 자유)
섹션 제목: “9. 권하는 방식 (구현은 자유)”HGP-0005 11절대로, 이 문서는 지켜야 할 것을 정하고 기술은 구현이 고른다. secretary v0.2에 권하는 것:
| 하는 일 | 권하는 방식 | 등급 |
|---|---|---|
| 기기에서 주인 열쇠 열기 | W3C WebAuthn(패스키)의 PRF 확장 | 참조 |
| 파일 잠그기 | AES-256-GCM 또는 XChaCha20-Poly1305 | 참조 |
| 열쇠 감싸기 | HPKE (RFC 9180) | 참조 |
| 조각 나누기 | 샤미르 비밀 나누기 (셋 중 둘) | 참조 |
| 서명 | Ed25519 (RFC 8032), 열쇠 끌어내기 HKDF (RFC 5869) | 참조 |
| 파기 | NIST SP 800-88 「암호 지우기」(열쇠를 없애 지운 것과 같게 하기) | 참조 |
시험 도구로 확인하기 전에는 「준수」라고 쓰지 않는다. 열쇠와 맡김을 다루는 국제 표준은 아직 없다 (9월 외부 표준 매핑).
10. 확인할 것
섹션 제목: “10. 확인할 것”- 웹앱(PWA)에서 패스키 PRF가 secretary가 쓰는 폰들(안드로이드, 아이폰)에서 되는지. 안 되면 v0.2는 기기 안 열쇠 저장으로 시작하고 그 차이를 적는다.
- 가족 조각을 종이 카드로 줄 때, 카드를 잃은 가족에게 새 조각을 다시 주는 절차.
- 법적 후견 (01-권한 6절 2번): 기탁자가 살아 있으나 스스로 판단하기 어려워졌을 때 되찾기와 승계 어느 쪽을 따르나.
- 봉인 열쇠의 「인터넷에 붙지 않은 곳」을 일반 사용자에게 무엇으로 줄지 (보안 열쇠, 종이).