Faying Protocol/1.0 — 부록 C 변경 이력
프로토콜 본문 내비게이션: 장 목차 | 이전 장 부록 B 기본 파라미터 예산
부록 C 변경 이력
이 이력은 Faying Protocol/1.0 초안이 집필 착수부터 확정에 이르기까지, 규격 본문과 부속 산출물에 어떤 변화가 있었는지 기록한다. 형식은 Keep a Changelog의 분류 관습(Added / Changed / Deprecated / Removed / Security)을 따르며, 앞부분에서 버전 번호를 어떻게 정하는지 먼저 설명한다.
출처에 대한 정직한 안내: 본 프로토콜의 1.0 초안은 spec 주도 흐름으로 한 번에 산출되었다(요구사항 → 설계 → 작업 목록 → 구현). 아직 여러 차례의 독립적인 프로토콜 위원회 회의를 거치지 않았다. 따라서 이 이력은 항목별 회의 결의와 정확한 날짜를 꾸며내지 않고, "무엇을 했는지, 왜 했는지, 어느 작업에 대응하는지"만 사실대로 기록한다. 아래 인용된 작업 번호(예: 1.6, 3.8, 5.6)는 구현 작업 계획의 실제 항목에 대응하며, 이를 근거로 각 변경의 산출 위치를 되짚을 수 있다. 이후 정식 위원회 평가 절차에 들어가면, 날짜와 결의 번호가 붙은 항목을 여기에 추가한다.
버전 번호를 어떻게 정하는가
프로토콜 버전 번호 매김의 권위 규칙은 본문 §1.7 버전 관리와 호환성을 참조한다(세 개의 직교 축: 프로토콜 버전 MAJOR.MINOR / 문서 상태 / 편집 판차. 협상과 호환성 규칙. 버전 번호 낙점과 실행자 주의사항). 이 부록은 이를 중복 정의하지 않고, 변경 이력과 관련된 두 가지만 보충한다:
- 이 이력은 §1.7.2의 MAJOR / MINOR 판단 기준에 따라 각 변경을 분류한다: 상호운용을 깨는 것은 MAJOR에, 하위 호환 증보는 MINOR에, 순수 텍스트 정오는 §1.7.4에 따라
Editorial로 귀속시키며 프로토콜 번호는 건드리지 않는다. - 현재는
Faying Protocol/1.0, 첫 번째 베이스라인이며 상태는 Final(2025-10-25 공개)이다.
명명에서, 산문과 버전 번호는 통일적으로 Faying Protocol/1.0을 쓰고, 초기의 FAP 약어는 이미 폐기되었다. 다만 schema 파일명 fap-1.0.cddl / fap-1.0.proto는 옛 접두사를 유지했는데, 순전히 파일명 안정성과 기존 참조를 깨지 않기 위함이다 — 이는 의도된 것이지 명명 번복이 아니다(§1.7.5 "schema 파일명은 편집 판차를 따라 개명하지 않음"과 일치).
[Faying Protocol/1.0] — Final(2025-10-25)
이것은 1.0의 첫 번째 정식 발표 버전으로, 2025-10-25에 초안 작업 영역에서 정식 발표 디렉터리로 전체가 일괄 이전되어 확정되었다. 아래는 변경 유형별로 분류하며, 각 항목에 그것을 산출한 작업 번호를 표기한다.
Added
본문(§1–§11 + 부록 A/B):
- §1 Overview: 프로토콜 명명, 위치, 여덟 가지 설계 목표 G1–G8, 목표와 Requirement 일대일 대응. §1.5.1이 "양방향 Faying은 모두 HP의 명시적 승인이 있어야 발효된다"는 이 핵심 단언을 확립한다.(작업 1.2)
- §2 Architecture: 네 장의 Mermaid 그림(프로토콜 스택, 엔티티 관계, 등급 계층, Bootstrap+Heartbeat+Action 시퀀스, IF 능동 발기의 Phase A0 경로 포함)과 여섯 가지 설계 원칙.(작업 1.3)
- §3 Components and Interfaces: 여섯 구성요소(MS / PC / AC / RR / LC / BBS)의 인터페이스와 불변식.(작업 1.4)
- §4 Data Models: CDDL 권위 정의, TypeScript 사람이 읽는 뷰, Disconnected 상태와 재연결 대사를 포함한 Mandate 상태 기계, endorsement 하위 구조.(작업 1.5)
- §5 Protocol Messages: 일곱 종 메시지(BOOTSTRAP / PRESENCE / GRADE_SWITCH / DELEGATE / REVOKE / FAYING_REQUEST / DISCLOSURE), 통일 인벨로프, 14항 오류 코드 — 그중 1010
E_HUMAN_WITNESS_REQUIRED, 1013E_ENDORSEMENT_INVALID, 1014E_FAYING_REQUEST_NOT_CONFIRMED를 신규 추가.(작업 1.6) - §6 Cryptography: 알고리즘 스위트 협상(PQC 협상 비트 포함), 키 파생, 서명 형식. endorsement 필드를 서명 입력에 편입.(작업 1.7)
- §7 Authorization Grades: G0–G4 다섯 단계 의미론, 트리거 매트릭스, 강등 단조성, 그리고 G1–G4 위에 중첩되는 §7.5 Endorsement Grades 하위 등급.(작업 1.8)
- §8 Lifecycle: 일곱 상태 생명주기(Disconnected 포함), 책임 귀속 시퀀스, §8.4 재연결 대사 트랜잭션.(작업 1.9)
- §9 Security Considerations: STRIDE, 재전송 공격 방지 / 하이재킹 방지 / 피싱 방지, 이탈 상태 식별, 실연 처리 매트릭스, 그리고 §9.10의 AI 시대 적대적 위협 목록 T1–T7.(작업 1.10)
- §10 Error Handling, §11 Open Questions, 부록 A/B: 오류 시나리오와 복구 경로, 미해결 과제 Q1–Q14, 용어표, 기본 파라미터 예산.(작업 1.11)
- 영문 규격 전문 번역.(작업 1.12)
부속 산출물:
- schema:
schemas/fap-1.0.cddl(권위),schemas/types.ts(TypeScript 사람이 읽는 뷰, Not Normative),schemas/fap-1.0.proto(대안 gRPC 바인딩, Not Normative).(작업 2.1–2.3) - 테스트 벡터
vectors/: BOOTSTRAP / PRESENCE / GRADE_SWITCH / DELEGATE / REVOKE, 오류 코드, 인코딩 등가, Endorsement, FAYING_REQUEST, DISCLOSURE, Disconnection 총 11종 커버.(작업 3.1–3.11) - 속성 테스트
pbt/: P1–P15 주 속성, 거기에 P16(Endorsed_Mandate), P17(Disconnection), P18(AI-Era) 세 족을 더해 커버.(작업 4.1–4.34) - 상호운용 컴플라이언스 스위트
conformance/: 인코딩 × 서명 알고리즘 × 해시 × 채널 × 구현 언어 5차원 매트릭스, TypeScript와 Rust 두 벌의 reference 구현 첨부.(작업 5.1–5.6) - 보안 공격 모의
conformance/attacks/: 재전송, 하이재킹, 피싱, 이탈 상태 식별, 그리고 T1/T3/T4/T5/T6 모의.(작업 6.1–6.10)
Changed
- 프로토콜 명명을 초기 초안의 "Faying Auth Protocol(FAP)"에서 Faying Protocol로 변경, 버전 번호는
Faying Protocol/1.0으로 표기.(§11 Q10에 대응, 결정 완료) - Faying 발기를 단방향(HP만 발기 가능)에서 양방향(HP 발기 + IF 발기)으로 확장하되, 발효 조건은 "HP 명확한 승인"이라는 한 가지로 통일 수렴.(작업 1.6, 3.9)
- 실연을 "실제 실연"과 "감지된 실연" 두 의미론으로 쪼개고, 프로토콜 결정은 감지된 실연만 보며, 불일치 창에 대해 비관적 추정을 한다.(작업 1.10, 3.11)
- 서명 입력을
H(Deterministic-CBOR(Envelope_without_signature))로 통일하여, CBOR 주 형식과 JSON 폴백이 이 기준 아래에서 등가로 상호운용된다.(작업 3.7, 5.2)
Deprecated
FAP/FAP/1.0/Faying Auth Protocol등 옛 명명, 그리고application/fap+json,POST /fap/v1/...등 옛 엔드포인트 형태는 일률적으로 폐기된다. 새 표기는application/faying-protocol+json과POST /faying-protocol/v1/{verb}를 쓴다. schema 파일명은 옛 접두사를 유지하는 유일한 예외다(위 "버전 번호를 어떻게 정하는가" 참조).
Removed
- 없음. 1.0은 첫 번째 베이스라인이므로 제거해야 할 기존 필드나 메시지가 없다.
Security
- AI 시대 적대적 위협의 프로토콜 수준 제약 신규 추가: T1 사회공학, T2 블랙박스 조작, T3 핵심 회피, T4 주의력 표류, T5 고정관념 신뢰 배양, T6 감사 홍수, T7 확장 슬롯. 각 항목은 Property P18.1–P18.7과 Requirement 13.1–13.7에 대응.(작업 1.10, 4.28–4.34, 6.6–6.10)
- 배서식 인가의 변조 방지 제약: endorsement이 서명 입력에 들어가, 어느 하위 필드든 바꾸면 Mandate 검증이 실패한다(
E_ATTESTATION_INVALID/E_ENDORSEMENT_INVALID).(작업 1.5, 3.8, 4.17–4.21) - 대칭적 폐기와 폐기 불가역: 폐기 경로의 도달성은 수립 경로보다 낮지 않고,
Revoked는 흡수 상태이며, 연쇄 폐기는 기본 활성화다.(작업 3.5, 4.5, 4.11, 4.15)
앞으로 어떻게 유지보수하는가
- 정식 평가에 들어가면, 각 위원회 결의를 여기에 한 줄씩 추가하고, 날짜·영향 장·트리거된 작업 번호를 명기하며, 위의 대응하는 Keep a Changelog 분류에 사람이 읽는 항목을 한 줄 보충한다.
- 버전 번호: §1.7에 따라 실행한다 — 하위 호환 증보는 MINOR로, 파괴적 변경은 MAJOR로 가며 MINOR를 0으로 되돌리고, 순수 텍스트 정오는 편집 판차(§1.7.4)로 가며 프로토콜 번호는 건드리지 않는다.
- 이후 정오와 판차 이전은 §1.7.4 / §1.7.5에 따라 처리하며, 이 이력은 본문과 함께 이전되고 판차에 맞춰 갱신된다.
- 한국어·영문 동종 변경은 같은 주기에 동기화하며, 모호하면 간체 중국어판(zh-CN)을 정본으로 한다.
