v0.0
M-of-N 다중 서명 승인 워크플로우 설계서¶
1. Executive Summary¶
본 문서는 D'CENT 엔터프라이즈 콜드월렛 커스터디 솔루션의 M-of-N 다중 서명 승인 워크플로우를 설계한다. 체인 유형별 최적 다중 서명 방식을 결정하고, 서명 수집 흐름(순차/병렬/하이브리드), 임계값 검증, 타임아웃 정책, 서명자 관리, 긴급 승인 체계, 에어갭 환경에서의 서명 수집 흐름을 상세히 정의한다.
핵심 설계 결정: - Bitcoin: MuSig2 (BIP-327) — N-of-N Schnorr 집계 서명. 온체인 효율 극대화, 프라이버시 보장 - EVM 체인: Smart Contract Multisig (Safe 기반) — M-of-N 유연성, ERC-4337 통합 가능 - Cross-chain 확장: MPC-TSS — Phase 4 EXT-02 범위에서 설계 (본 문서에서는 방향성만 언급)
제외 방식 (CLAUDE.md 준수): - Shamir's Secret Sharing (SSS): 키 복구 시 전체 시크릿 재구성 → 단일 장애점 → 서명 키 분할에 사용 금지 - 전통적 P2SH/P2WSH 멀티시그: 높은 수수료, 온체인 프라이버시 노출, 경쟁사 대비 기술 열위
2. 다중 서명 방식 결정 프레임워크¶
2.1. 체인별 다중 서명 방식 매핑¶
| 체인 유형 | 다중 서명 방식 | 구조 | 온체인 표현 | 프라이버시 |
|---|---|---|---|---|
| Bitcoin | MuSig2 (BIP-327) | N-of-N | 단일 Schnorr 서명 (64 bytes) | 높음 (일반 TX와 구분 불가) |
| Ethereum (EVM) | Smart Contract Multisig (Safe) | M-of-N | 컨트랙트 호출 (execTransaction) | 중간 (컨트랙트 주소 공개) |
| Cross-chain | MPC-TSS (향후) | T-of-N | 단일 서명 (체인 무관) | 높음 |
2.2. 의사결정 매트릭스¶
| 평가 기준 | MuSig2 (BTC) | Smart Contract (EVM) | MPC-TSS | P2SH Multisig (레거시) |
|---|---|---|---|---|
| 온체인 효율 | 최고 (단일 서명) | 높음 (컨트랙트 1회 호출) | 최고 (단일 서명) | 낮음 (M개 서명 + 스크립트) |
| 프라이버시 | 최고 (구분 불가) | 중간 (Safe 주소 공개) | 높음 | 낮음 (멀티시그 가시) |
| 유연성 (M-of-N) | 제한 (N-of-N만) | 높음 (자유로운 M/N) | 높음 (T-of-N) | 높음 (자유로운 M/N) |
| 구현 복잡성 | 높음 (2라운드 프로토콜) | 중간 (검증된 컨트랙트) | 매우 높음 | 낮음 |
| 에어갭 호환성 | 높음 (PSBT + BIP-373) | 높음 (EIP-712 서명) | 중간 (인터랙티브) | 높음 |
| 생태계 성숙도 | 성숙 (Ledger 구현 완료) | 매우 성숙 (Safe: $100B+) | 성숙 (Fireblocks 등) | 레거시 |
| D'CENT 선택 | BTC 주 방식 | EVM 주 방식 | Phase 4 범위 | 미채택 |
2.3. Bitcoin MuSig2 심화: N-of-N 제약과 대응¶
MuSig2의 N-of-N 제약: MuSig2는 구조적으로 N-of-N만 지원한다. 모든 서명자가 참여해야 집계 서명이 완성된다.
엔터프라이즈에서의 M-of-N 니즈 대응: | 전략 | 설명 | 적합 시나리오 | |------|------|-------------| | 키 트리 (Taproot) | 복수의 N-of-N MuSig2 키를 Taproot 스크립트 트리에 조합 | 2-of-3: {AB, AC, BC} 3개 MuSig2 리프 | | 정책 기반 보완 | N-of-N MuSig2 + 대시보드 정책 엔진으로 승인 통제 | 모든 서명자가 참여하되, 정책으로 불필요 서명자 승인 면제 | | 레거시 폴백 | 복잡한 M-of-N이 필수인 경우 P2WSH 멀티시그 사용 | 호환성 우선 시나리오 |
권장: 키 트리(Taproot Script Path) 방식으로 M-of-N을 구현. 온체인에서는 사용된 리프의 MuSig2 서명만 노출되어 효율과 프라이버시를 모두 확보.
3. M-of-N 승인 워크플로우 상세¶
3.1. 서명 수집 모드¶
3.1.1. 순차(Sequential) 모드¶
승인 요청 생성
│
▼
승인자 1 (최고 직급) ──승인──▶ 기록
│ │
▼ ▼
승인자 2 (차상위) ──────승인──▶ 기록
│ │
▼ ▼
승인자 3 ──────────────승인──▶ 기록
│
▼
M개 승인 도달 → 서명 수집 시작
특징: - 지정된 순서대로 승인자가 차례로 승인 - 이전 승인자가 완료해야 다음 승인자에게 알림 발송 - 적합: 계층적 통제 구조, 금액 기반 에스컬레이션 (CEO → CFO → 재무담당) - 단점: 총 소요 시간 = 각 승인자 응답 시간의 합
순서 결정 기준: | 기준 | 설명 | |------|------| | 역할 계층 | Super Admin → Admin → Approver 순 | | 금액 기반 | 고액: CFO 우선 → CTO → CISO | | 지정 순서 | 정책에서 명시적 순서 지정 |
3.1.2. 병렬(Parallel) 모드¶
승인 요청 생성
│
├──▶ 승인자 1 ──승인──▶ ┐
├──▶ 승인자 2 ──승인──▶ ├──▶ M개 도달 → 완성
├──▶ 승인자 3 ──승인──▶ ┘
└──▶ 승인자 4 ──대기──▶ (이미 M개 도달, 불필요)
특징: - 모든 승인자에게 동시에 알림 발송 - 가장 먼저 응답하는 M명의 승인으로 완성 - 적합: 속도 우선, 동일 권한 수준의 승인자 그룹 - 단점: 승인 순서 통제 불가, 특정 인원의 필수 참여 보장 어려움
3.1.3. 하이브리드 모드¶
1차 승인 계층 (순차)
│
▼
관리자 승인 (1명 필수) ──승인──▶
│
▼
2차 서명 계층 (병렬)
│
├──▶ 서명자 A ──서명──▶ ┐
├──▶ 서명자 B ──서명──▶ ├──▶ M-1개 서명 도달 → 완성
└──▶ 서명자 C ──서명──▶ ┘
특징: - 1차 계층: 관리자/고위 승인자의 순차 승인으로 거버넌스 통제 - 2차 계층: 일반 서명자의 병렬 서명 수집으로 속도 확보 - 적합: 거버넌스 + 효율 동시 요구, 대부분의 엔터프라이즈 시나리오 - 권장: 기본 서명 수집 모드로 하이브리드 모드 설정
3.2. 임계값(Threshold) 검증 로직¶
3.2.1. 검증 프로세스¶
서명 수신 시:
1. 서명자 인증 확인 (유효한 Approver 역할 + 활성 상태)
2. 서명 유효성 검증 (공개키 매칭, 데이터 무결성)
3. 중복 서명 확인 (동일 서명자의 이중 서명 방지)
4. 임계값 카운터 증가 (approved_count += 1)
5. 임계값 도달 확인 (approved_count >= M)
├─ 미도달: 다음 승인자 대기
└─ 도달: 상태 전이 → READY_TO_SIGN 또는 FULLY_SIGNED
3.2.2. 임계값 설정 정책¶
| M-of-N 설정 | 적합 시나리오 | 최소 보안 수준 |
|---|---|---|
| 2-of-3 | 소규모 기업, 일상 운영 | 기본 (AC-TX-01 최소 충족) |
| 3-of-5 | 중견 기업, 중요 자산 관리 | 높음 |
| 4-of-7 | 대기업, 고가 자산 | 매우 높음 |
| 5-of-9 | 기관 투자자, 수탁 서비스 | 최고 |
제약 조건: - M >= 2 (AC-TX-01: 최소 2-of-N 필수) - N >= M + 1 (1명 이상의 여유 서명자 보장 — 가용성) - N <= 15 (에어갭 서명 수집의 실용적 한계)
3.3. 타임아웃 정책¶
3.3.1. 단계별 타임아웃¶
| 단계 | 기본 타임아웃 | 설정 범위 | 초과 시 처리 |
|---|---|---|---|
| 승인 대기 (Approve) | 24시간 | 1시간-7일 | 자동 만료 → EXPIRED |
| 서명 대기 (Sign) | 4시간 | 30분-24시간 | 자동 만료 → SIGN_EXPIRED |
| 전체 트랜잭션 | 48시간 | 2시간-14일 | 자동 만료 → EXPIRED |
| 긴급 트랜잭션 | 2시간 | 15분-4시간 | 자동 만료 + 에스컬레이션 |
3.3.2. 타임아웃 처리 흐름¶
타임아웃 발생
│
├─ 일반 트랜잭션:
│ ├─ 자동 만료
│ ├─ Initiator에게 알림
│ ├─ 감사 로그 기록 (만료 사유, 미승인 승인자 목록)
│ └─ 재요청 가능
│
└─ 긴급 트랜잭션:
├─ 에스컬레이션: 상위 관리자에게 긴급 알림
├─ 대체 승인자 자동 지정 (설정 시)
└─ 감사 로그 기록 (에스컬레이션 이력)
3.4. 서명 순서 정책¶
| 옵션 | 설명 | 적합 시나리오 |
|---|---|---|
| 고정 순서 | 정책에 정의된 순서로만 서명 가능 | 규제 요구, 순차 에스컬레이션 |
| 자유 순서 | 서명자 순서 무관, M개 도달 시 완성 | 글로벌 팀, 시간대 다양 |
| 조건부 순서 | 특정 역할(예: CISO)은 반드시 포함, 나머지 자유 | 거버넌스 필수 인원 + 유연성 |
권장: 조건부 순서를 기본 정책으로 채택. 특정 필수 서명자(mandatory signer)를 지정하되, 나머지 M-1명은 자유 순서로 수집.
4. 서명자 관리¶
4.1. 서명자 추가¶
Admin이 서명자 추가 요청
│
▼
관리자 쿼럼 승인 (AC-AC-03)
- 최소 2명의 Admin 승인
│
▼
키 세레모니 실행 (key-ceremony.md 참조)
- 새 서명자의 콜드월렛에서 키 생성
- 공개키 수집 및 검증
│
▼
다중 서명 월렛 재구성
- BTC: Taproot 스크립트 트리 업데이트 (새 MuSig2 리프 추가)
- EVM: Safe 소유자 목록에 추가 (addOwnerWithThreshold)
│
▼
테스트 트랜잭션 실행
- 소액 전송으로 새 서명자 참여 검증
│
▼
감사 로그 기록
- 서명자 추가 이벤트, 승인자 목록, 타임스탬프
4.2. 서명자 제거¶
Admin이 서명자 제거 요청 (예: 퇴사, 역할 변경)
│
▼
관리자 쿼럼 승인
│
▼
즉시 조치:
- 해당 서명자의 대시보드/오프라인앱 접근 해제
- 대기 중인 해당 서명자의 승인/서명 무효화
│
▼
키 로테이션 실행 (AC-KM-07)
- BTC: 새 키 세트로 자산 이전 (제거된 서명자의 키 포함 주소에서 새 주소로)
- EVM: Safe에서 소유자 제거 (removeOwner) + 임계값 조정
│
▼
디바이스 회수 및 보안 삭제
- 콜드월렛 회수 (가능 시)
- SE 보안 삭제 수행 (AC-KM-06)
│
▼
감사 로그 기록
4.3. 임계값(M) 변경¶
Admin이 임계값 변경 요청
│
▼
변경 영향 분석 (대시보드 정책 시뮬레이션)
- 현재 M: 2, 요청 M: 3
- 현재 대기 트랜잭션 영향 평가
│
▼
관리자 쿼럼 승인 (현재 임계값 기준으로 승인)
│
▼
다중 서명 구성 업데이트
- BTC: Taproot 스크립트 트리 재구성
- EVM: Safe changeThreshold() 호출
│
▼
기존 대기 트랜잭션 처리
- 새 임계값 미달 트랜잭션: 추가 승인 요청
- 새 임계값 초과 트랜잭션: 이미 충족, 변경 없음
4.4. 대체 서명자 (Backup Signer)¶
| 항목 | 설명 |
|---|---|
| 지정 방식 | 각 주 서명자에 대해 1명의 대체 서명자 사전 지정 |
| 활성화 조건 | 주 서명자 비가용 선언 (Admin 승인) |
| 권한 범위 | 주 서명자와 동일한 서명 권한 (임시) |
| 기간 제한 | 최대 30일 (연장 시 Admin 재승인) |
| 감사 | 대체 서명자 활성화/비활성화 전 과정 기록 |
| 키 관리 | 대체 서명자는 별도 콜드월렛 + 키 세트 보유 (주 서명자 키 공유 아님) |
5. 긴급 승인 체계¶
5.1. 긴급 트랜잭션 정의 기준¶
| 기준 | 임계값 | 비고 |
|---|---|---|
| 보안 위협 감지 | 즉시 | 키 노출 의심, 해킹 시도 감지 |
| 시장 급변 | 관리자 판단 | 대규모 가격 변동 시 긴급 포지션 조정 |
| 규제 명령 | 즉시 | 자산 동결/이전 명령 |
| 운영 장애 | 4시간 이내 | 디바이스 장애로 인한 긴급 복구 |
5.2. 긴급 승인 절차¶
긴급 트랜잭션 요청 (priority: "urgent")
│
▼
정책 엔진 — 긴급 모드 활성화
- 시간 기반 제한 해제
- 쿨다운 기간 스킵
- 타임아웃 단축 (2시간)
│
▼
축소 쿼럼 적용
- 일반: 3-of-5 → 긴급: 2-of-5 (최소 M=2 유지)
- 또는: 긴급 키 세트 사용 (별도 2-of-3 긴급 월렛)
│
▼
긴급 서명 수집 (병렬 모드 강제)
│
▼
전파 후 사후 의무:
- 24시간 내 전체 Admin에게 긴급 트랜잭션 보고
- 감사 로그에 긴급 사유, 축소 쿼럼 근거 기록
- 72시간 내 사후 감사 완료
5.3. 보안 트레이드오프 명시¶
| 긴급 조치 | 보안 영향 | 완화 방안 |
|---|---|---|
| 축소 쿼럼 | 공모 위험 증가 | 최소 M=2 유지, 사후 감사 의무화 |
| 시간 제한 해제 | 소셜 엔지니어링 공격 창 확대 | 긴급 TX 별도 감사 추적 |
| 쿨다운 스킵 | 연속 공격 위험 | 긴급 TX 횟수 제한 (24시간 내 최대 3건) |
| 긴급 키 세트 | 키 관리 복잡성 증가 | 긴급 키 세트 별도 보관, 정기 점검 |
6. 에어갭 환경에서의 서명 수집 흐름¶
6.1. 단일 서명자 흐름 (기본)¶
대시보드 ──QR──▶ 오프라인앱 ──QR──▶ 콜드월렛
│
[SE 서명]
│
대시보드 ◀──QR── 오프라인앱 ◀──QR── 콜드월렛
4회 에어갭 통신 (왕복 2회)
6.2. M-of-N 서명 수집 흐름¶
방식 A: 중앙 수집 (권장)¶
대시보드: 미서명 TX 표시 (QR)
│
├─▶ 서명자 1: 오프라인앱A → 콜드월렛1 → 서명1 → 오프라인앱A → 대시보드
│
├─▶ 서명자 2: 오프라인앱B → 콜드월렛2 → 서명2 → 오프라인앱B → 대시보드
│
└─▶ 서명자 3: 오프라인앱C → 콜드월렛3 → 서명3 → 오프라인앱C → 대시보드
대시보드: M개 서명 수집 완료 → 취합 → Broadcast
장점: 대시보드가 중앙 허브 역할, 서명 상태 추적 용이 적합: 서명자들이 같은 장소 또는 네트워크 접근 가능
방식 B: 릴레이 수집¶
오프라인앱: 미서명 TX 수신 (대시보드에서 QR)
│
▼
서명자 1: 오프라인앱 → 콜드월렛1 → 부분서명1 → 오프라인앱
│
▼ (오프라인앱이 부분서명1을 포함한 QR 생성)
서명자 2: 오프라인앱 → 콜드월렛2 → 부분서명2 → 오프라인앱
│
▼ (오프라인앱이 부분서명1+2를 포함한 QR 생성)
서명자 3: 오프라인앱 → 콜드월렛3 → 부분서명3 → 오프라인앱
│
▼
M개 서명 수집 완료 → 오프라인앱 → 대시보드로 반환 → Broadcast
장점: 오프라인 환경에서 순차적으로 서명 수집 가능 적합: 서명자들이 동일 물리적 위치에서 차례로 서명하는 세레모니 환경
방식 C: 분산 비동기 수집¶
대시보드: 미서명 TX + 고유 세션 ID 표시
│
├─▶ 서명자 1 (서울): 자신의 오프라인앱으로 QR 스캔 → 콜드월렛 서명 → 대시보드 반환
├─▶ 서명자 2 (싱가포르): 자신의 오프라인앱으로 QR 스캔 → 콜드월렛 서명 → 대시보드 반환
└─▶ 서명자 3 (런던): 자신의 오프라인앱으로 QR 스캔 → 콜드월렛 서명 → 대시보드 반환
대시보드: 비동기적으로 서명 수신 → M개 도달 시 완성
장점: 글로벌 팀, 서로 다른 시간대의 서명자 지원 적합: 일상적 운영, 긴급하지 않은 트랜잭션
6.3. MuSig2 에어갭 서명 흐름 (Bitcoin 전용)¶
MuSig2는 2라운드 인터랙티브 프로토콜이므로, 에어갭 환경에서 추가 통신이 필요하다.
Round 1: Nonce 교환 (에어갭 1회 추가)
대시보드: MuSig2 세션 시작
│
├─▶ 서명자 1: 콜드월렛1에서 nonce_1 생성 → QR → 대시보드
├─▶ 서명자 2: 콜드월렛2에서 nonce_2 생성 → QR → 대시보드
└─▶ 서명자 N: 콜드월렛N에서 nonce_N 생성 → QR → 대시보드
대시보드: 모든 nonce 수집 → aggregated_nonce 계산
│
▼
Round 2: 부분 서명 (에어갭 1회)
대시보드: TX + aggregated_nonce QR 표시
│
├─▶ 서명자 1: 콜드월렛1에서 partial_sig_1 생성 → QR → 대시보드
├─▶ 서명자 2: 콜드월렛2에서 partial_sig_2 생성 → QR → 대시보드
└─▶ 서명자 N: 콜드월렛N에서 partial_sig_N 생성 → QR → 대시보드
대시보드: 모든 partial_sig 수집 → 최종 Schnorr 서명 집계 → Broadcast
에어갭 통신 횟수: 서명자당 4회 (nonce 반환 + nonce 수신 + 부분 서명 반환 + TX 수신) = 총 4N회 BIP-373: PSBT 내 MuSig2 데이터(participant keys, public nonces, partial signatures) 포함하여 상태 추적
6.4. 부분 서명(Partial Signature) 관리¶
| 항목 | 설명 |
|---|---|
| 저장 위치 | 대시보드 서버 (암호화 저장) |
| 유효 기간 | 서명 세션 타임아웃까지 (기본 4시간) |
| 검증 | 수신 즉시 공개키 매칭 + 데이터 무결성 검증 |
| 상태 추적 | 서명자별 서명 상태 실시간 표시 (대기/완료/만료) |
| 폐기 | 세션 만료 시 모든 부분 서명 즉시 폐기 (리플레이 방지) |
| MuSig2 Nonce | 일회용 — 동일 nonce 재사용 시 프라이빗 키 노출 위험. 콜드월렛 SE에서 nonce 재사용 방지 필수 |
7. 컴플라이언스 매핑¶
| 제약조건 ID | 설명 | 충족 방식 |
|---|---|---|
| AC-TX-01 | 최소 2-of-N 다중 서명 지원 | M >= 2 강제. BTC(MuSig2), EVM(Safe) 모두 2-of-N 이상 지원 |
| AC-AC-03 | 관리자 쿼럼 승인 기반 권한 변경 | 서명자 추가/제거, 임계값 변경 시 Admin 쿼럼 승인 필수 |
| AC-KM-07 | 키 로테이션/교체 절차 | 서명자 교체 시 키 로테이션 연계. BTC: 자산 이전, EVM: Safe 소유자 변경 |
| AC-AU-01 | 변조 불가 감사 로그 | 모든 승인/서명/서명자 관리 액션에 감사 이벤트 생성 |
| AC-GV-02 | 정책 변경 쿼럼 승인 | 서명 정책(모드, 임계값, 타임아웃) 변경 시 Admin 쿼럼 승인 |
8. 설계 갭 및 Phase 4-5 연계 사항¶
| 갭 | 해당 Phase | 설명 |
|---|---|---|
| MPC-TSS 웜 월렛 | Phase 4 (EXT-02) | Cross-chain T-of-N 서명. 본 문서에서는 방향성만 언급 |
| 하드웨어 정책 엔진 | Phase 4 (DIF-02) | SE에서 정책 위반 TX 거부 — MuSig2 nonce 생성 전 정책 검증 |
| UR PSBT 스키마 상세 | Phase 5 (SYS-02) | MuSig2 + BIP-373 PSBT의 UR 인코딩 바이트 수준 명세 |
| Safe 컨트랙트 배포 전략 | Phase 5 (SYS-06) | Safe 프록시 배포, 모듈 설정, Gas 최적화 |
본 문서는 Phase 3 Core Product Design의 일부로, 에어갭 서명 플로우(airgap-signing-flow.md)의 Sign 단계에서 다중 서명 수집 워크플로우를 트리거한다. 멀티체인 지원(multichain-support.md)의 체인별 서명 방식(MuSig2/Safe/MPC-TSS) 결정이 본 문서의 기반이다.
관련 문서¶
- 에어갭 트랜잭션 서명 플로우 설계서 -- 제품 설계
- 감사 추적 체계 설계서 -- 제품 설계
- 컴플라이언스 리포팅 기능 정의서 -- 제품 설계
- 재해 복구 및 키 백업 절차 설계서 -- 제품 설계
- 키 세레모니 워크플로우 설계서 -- 제품 설계
- 멀티체인 지원 범위 및 우선순위 정의서 -- 제품 설계
- 운영 시나리오 문서 -- 제품 설계
- 트랜잭션 정책 엔진 기능 정의서 -- 제품 설계
- RBAC 역할 체계 정의서 -- 제품 설계
- 화이트리스트 주소 관리 정책 설계서 -- 제품 설계