v0.0
컴포넌트 간 데이터 흐름 및 인터페이스 명세¶
1. Executive Summary¶
본 문서는 D'CENT 엔터프라이즈 콜드월렛 커스터디 솔루션의 3개 컴포넌트(온라인 대시보드, 오프라인 서명 앱, D'CENT X 콜드월렛) 간 인터페이스를 명세한다. 에어갭 경계를 넘는 모든 데이터의 포맷, 인코딩, 메시지 구조를 정의하여 각 컴포넌트 팀이 독립적으로 구현에 착수할 수 있는 인터페이스 계약을 제공한다.
설계 범위: - 4개 인터페이스 (대시보드→앱, 앱→SE, SE→앱, 앱→대시보드) - 에어갭 경계 데이터 카테고리 4종 (트랜잭션, 정책, 설정, 응답) - 직렬화 형식 (CBOR, UR, RLP) - Data Flow Diagram (DFD) Level 0-2 - 메시지 버저닝 및 하위 호환성 원칙
2. 에어갭 경계 데이터 포맷 정의¶
2.1. 데이터 카테고리¶
| 카테고리 | 방향 | 설명 | 빈도 |
|---|---|---|---|
| 트랜잭션 데이터 | Zone 1→2→3 / Zone 3→2→1 | 미서명 TX, 서명 요청, 서명 결과 | 매 트랜잭션 |
| 정책 데이터 | Zone 1→2→3 | PolicyUpdate, Merkle Root/Proof | 정책 변경 시 |
| 설정 데이터 | Zone 1→2→3 | 디바이스 설정, 토큰 목록 업데이트 | 간헐적 |
| 응답 데이터 | Zone 3→2→1 | 서명 응답, 정책 위반, 상태 정보 | 매 요청 |
2.2. 직렬화 계층¶
Application Data (JSON-like 구조)
│
▼
CBOR Encoding (RFC 8949)
│
▼
UR Wrapping (Blockchain Commons UR v2)
│
├──▶ QR: Animated QR (Fountain Code 멀티파트)
│
└──▶ USB-C: 앱↔콜드월렛 직접 전송
2.3. 공통 메시지 헤더¶
모든 에어갭 메시지는 공통 헤더를 포함한다:
MessageHeader {
version: uint8 // 프로토콜 버전 (현재: 0x01)
message_type: uint8 // 메시지 유형 코드
request_id: bytes(16) // UUID v4 — 요청/응답 매칭
timestamp_ref: uint32 // Unix timestamp (참조용, SE에서 신뢰하지 않음)
payload_hash: bytes(32) // 페이로드의 SHA-256 해시 (무결성 검증)
}
message_type 코드 체계:
| 코드 | 유형 | 방향 |
|---|---|---|
| 0x01 | BTC_SIGN_REQUEST | → SE |
| 0x02 | EVM_SIGN_REQUEST | → SE |
| 0x03 | SIGN_RESPONSE | ← SE |
| 0x10 | POLICY_UPDATE | → SE |
| 0x11 | POLICY_RESPONSE | ← SE |
| 0x20 | WHITELIST_VERIFY | → SE |
| 0x21 | WHITELIST_RESPONSE | ← SE |
| 0x30 | DEVICE_STATUS_REQUEST | → SE |
| 0x31 | DEVICE_STATUS_RESPONSE | ← SE |
| 0x40 | CONFIG_UPDATE | → SE |
| 0x41 | CONFIG_RESPONSE | ← SE |
| 0xFE | ERROR | ← SE |
| 0xFF | HEARTBEAT | 양방향 |
3. 인터페이스 1: 대시보드 → 오프라인 앱¶
3.1. 서명 요청 메시지¶
BTC 서명 요청:
BTCSignRequest {
header: MessageHeader
chain_type: 0x00 // BTC
wallet_id: bytes(16) // 월렛 식별자
psbt: bytes // PSBT 바이너리 (BIP-174/370)
derivation_paths: [ // 서명에 필요한 키 파생 경로
{
path: string // e.g., "m/86'/0'/0'/0/0"
signer_index: uint8 // MuSig2 참여자 인덱스
}
]
musig2_context: { // MuSig2 세션 컨텍스트 (BIP-327)
round: uint8 // 1 = nonce 요청, 2 = 부분 서명 요청
aggregated_nonce: bytes(66)? // Round 2에서만 포함
participant_pubkeys: [bytes(33)] // 참여자 공개키 목록
}?
policy_version: uint32 // 현재 정책 버전
whitelist_version: uint32 // 현재 화이트리스트 버전
app_hash: bytes(32) // WYSIWYS 검증용 해시
}
EVM 서명 요청:
EVMSignRequest {
header: MessageHeader
chain_type: 0x01 // EVM
chain_id: uint64 // EIP-155 Chain ID (1=ETH, 137=Polygon 등)
wallet_id: bytes(16)
transaction: {
to: bytes(20) // 수신 주소
value: bytes(32) // 전송 금액 (wei, big-endian)
data: bytes // calldata (컨트랙트 호출 시)
gas_limit: uint64
max_fee_per_gas: uint64 // EIP-1559
max_priority_fee_per_gas: uint64
nonce: uint64
access_list: [{ // EIP-2930
address: bytes(20)
storage_keys: [bytes(32)]
}]?
}
eip712_data: { // EIP-712 구조화 데이터 (Safe 호출 등)
domain_separator: bytes(32)
message_hash: bytes(32)
typed_data_json: string // 원본 TypedData JSON
}?
derivation_path: string // e.g., "m/44'/60'/0'/0/0"
policy_version: uint32
whitelist_version: uint32
app_hash: bytes(32)
token_info: { // ERC-20 토큰 정보 (해당 시)
symbol: string
decimals: uint8
contract_address: bytes(20)
}?
}
3.2. 정책 동기화 메시지¶
PolicySyncMessage {
header: MessageHeader
policy_update: PolicyUpdate // Phase 4 hardware-policy-engine.md 구조체
merkle_data: {
new_root: bytes(32) // 새 Merkle Root
root_version: uint32 // Root 버전
admin_signatures: [{ // Admin 쿼럼 서명
pubkey: bytes(33)
signature: bytes(64)
}]
quorum_threshold: uint8 // 필요 쿼럼 수
}?
}
3.3. 화이트리스트 검증 데이터¶
WhitelistVerifyRequest {
header: MessageHeader
recipient_address: bytes // 수신 주소 (체인별 가변 길이)
chain_type: uint8
merkle_proof: [bytes(32)] // Merkle Proof (최대 depth 20)
whitelist_version: uint32
}
3.4. CBOR 인코딩 규칙¶
모든 메시지는 CBOR (RFC 8949)로 인코딩한다: - 정수: Major Type 0/1 (양수/음수) - 바이트 문자열: Major Type 2 - 텍스트 문자열: Major Type 3 - 배열: Major Type 4 - 맵: Major Type 5 - 태그: Major Type 6 (UR Type 식별용)
CBOR 맵 키 규칙: - 키는 정수(Major Type 0)로 인코딩하여 페이로드 크기 최소화 - 키 할당은 메시지 유형별로 고정 (하위 호환성 보장)
4. 인터페이스 2: 오프라인 앱 → 콜드월렛 (SE)¶
4.1. SignRequest 메시지 구조¶
오프라인 앱이 콜드월렛에 전달하는 서명 요청은 인터페이스 1의 메시지를 SE 입력 포맷으로 변환한 것이다.
SE_SignRequest {
header: MessageHeader
chain_type: uint8
raw_tx: bytes // PSBT 바이너리 또는 RLP 인코딩 TX
derivation_path: bytes // BIP-32 경로 (바이너리 인코딩)
app_hash: bytes(32) // WYSIWYS 검증용 해시
metadata: {
wallet_id: bytes(16)
policy_version: uint32
whitelist_version: uint32
signer_index: uint8 // MuSig2 참여자 인덱스 (BTC)
}
musig2_round_data: { // MuSig2 라운드별 데이터 (BTC)
round: uint8
aggregated_nonce: bytes(66)?
participant_pubkeys: [bytes(33)]?
}?
whitelist_proof: { // 화이트리스트 Merkle Proof
recipient: bytes
proof: [bytes(32)]
}?
}
4.2. PolicyUpdate 메시지 구조¶
SE_PolicyUpdate {
header: MessageHeader
policy_data: {
version: uint32 // 정책 버전 (단조 증가)
target_policy: uint8 // 변경 대상 (0x01-0x04)
previous_value: bytes(32) // 이전 값 (검증용)
new_value: bytes(32) // 신규 값
cooldown_seconds: uint32 // 쿨다운 기간
}
admin_signatures: [{
pubkey: bytes(33)
signature: bytes(64) // ECDSA 서명
}]
quorum_threshold: uint8
payload_hash: bytes(32)
}
4.3. UR Type 매핑¶
| UR Type | 용도 | CBOR 태그 |
|---|---|---|
crypto-psbt |
BTC PSBT 전달 (표준) | 310 |
crypto-eth-sign-request |
EVM 서명 요청 (표준) | 401 |
dcent-sign-request |
D'CENT 확장 서명 요청 | 45001 |
dcent-policy-update |
정책 업데이트 페이로드 | 45010 |
dcent-whitelist-verify |
화이트리스트 검증 | 45020 |
dcent-config-update |
설정 업데이트 | 45030 |
5. 인터페이스 3: 콜드월렛 (SE) → 오프라인 앱¶
5.1. SignResponse 메시지 구조¶
SE_SignResponse {
header: MessageHeader
status_code: uint8 // 상태 코드 (아래 표 참조)
signature: { // 성공 시에만 포함
chain_type: uint8
sig_bytes: bytes // BTC: 64B Schnorr / EVM: 65B ECDSA (r,s,v)
pubkey: bytes(33) // 서명한 공개키
derivation_path: bytes // 사용된 키 파생 경로
}?
se_parse_hash: bytes(32) // WYSIWYS 검증 해시 (SE 독립 파싱 결과)
sign_counter: uint32 // SE 서명 카운터 (현재값)
musig2_data: { // MuSig2 Round 1 응답 (BTC)
public_nonce: bytes(66) // 공개 Nonce
}?
error_detail: { // 실패 시에만 포함
error_code: uint8
error_message: string? // 선택적 에러 설명
policy_info: { // 정책 위반 시 상세
violated_policy: uint8
current_value: bytes(32)
requested_value: bytes(32)
}?
}?
}
5.2. 상태 코드 체계¶
| 코드 범위 | 카테고리 | 코드 | 의미 |
|---|---|---|---|
| 0x00 | 성공 | 0x00 | SUCCESS — 서명 완료 |
| 0x10-0x1F | 사용자 거부 | 0x10 | REJECTED_BY_USER — 물리 버튼 거부 |
| 0x11 | CANCELLED_BY_TIMEOUT — 사용자 응답 타임아웃 | ||
| 0x20-0x2F | 정책 위반 | 0x20 | POLICY_AMOUNT_EXCEEDED — 건당 한도 초과 |
| 0x21 | POLICY_WHITELIST_FAILED — 미등록 주소 | ||
| 0x22 | POLICY_DAILY_LIMIT_EXCEEDED — 일일 한도 초과 | ||
| 0x23 | POLICY_RATE_LIMIT_EXCEEDED — 서명 횟수 초과 | ||
| 0x24 | POLICY_VERSION_MISMATCH — 정책 버전 불일치 | ||
| 0x25 | POLICY_COOLDOWN_ACTIVE — 쿨다운 진행 중 | ||
| 0x30-0x3F | WYSIWYS | 0x30 | WYSIWYS_HASH_MISMATCH — 해시 불일치 (자동 거부) |
| 0x31 | WYSIWYS_PARSE_FAILED — TX 파싱 실패 | ||
| 0x32 | WYSIWYS_LOCKOUT — 연속 불일치 잠금 (24시간) | ||
| 0x40-0x4F | 파싱 에러 | 0x40 | PARSE_FAILED — TX 데이터 파싱 불가 |
| 0x41 | UNSUPPORTED_CHAIN — 미지원 체인 | ||
| 0x42 | INVALID_DERIVATION_PATH — 잘못된 키 경로 | ||
| 0xF0-0xFF | 시스템 | 0xFE | INTERNAL_ERROR — SE 내부 오류 |
| 0xFF | NOT_INITIALIZED — 정책/키 미설정 |
5.3. PolicyViolation 메시지¶
정책 위반 시 SE가 반환하는 상세 메시지:
PolicyViolation {
header: MessageHeader
violation_code: uint8 // 0x20-0x25
violated_policy: uint8 // 위반 규칙 ID (0x01-0x04)
requested_value: bytes(32) // 요청된 값 (예: TX 금액)
limit_value: bytes(32) // SE 한도 값
current_counter: uint32 // 현재 카운터 (일일/횟수)
display_message: string // 디바이스 화면 표시 메시지
}
5.4. UR Type 매핑 (응답)¶
| UR Type | 용도 | CBOR 태그 |
|---|---|---|
crypto-psbt |
서명된 PSBT 반환 (표준) | 310 |
crypto-eth-signature |
EVM 서명 반환 (표준) | 402 |
dcent-sign-response |
D'CENT 확장 서명 응답 | 45002 |
dcent-policy-violation |
정책 위반 상세 | 45011 |
dcent-device-status |
디바이스 상태 응답 | 45031 |
6. 인터페이스 4: 오프라인 앱 → 대시보드¶
6.1. 서명 결과 메시지¶
SignatureResult {
header: MessageHeader
chain_type: uint8
request_id: bytes(16) // 원본 요청 ID (매칭용)
status: uint8 // SE 응답 상태 코드 전달
signatures: [{ // 부분 서명 또는 완성 서명
signer_pubkey: bytes(33)
sig_bytes: bytes
signer_index: uint8
derivation_path: bytes
}]
se_parse_hash: bytes(32) // SE 검증 해시 (대시보드에서 재확인)
sign_counter: uint32
musig2_nonces: [{ // MuSig2 Round 1 응답 (해당 시)
signer_index: uint8
public_nonce: bytes(66)
}]?
}
6.2. 정책 위반 리포트¶
PolicyViolationReport {
header: MessageHeader
request_id: bytes(16)
violation: PolicyViolation // SE에서 반환한 위반 상세
app_context: {
app_version: string
device_id: bytes(16) // 콜드월렛 디바이스 식별자
timestamp: uint32
}
}
6.3. 에러 코드 및 응답 포맷¶
오프라인 앱 → 대시보드 에러:
| 코드 | 의미 | 처리 |
|---|---|---|
| 0x00 | 성공 | 서명 결과 처리 |
| 0x10-0x3F | SE 에러 전달 | SE 상태 코드 그대로 전달 |
| 0x80 | QR_SCAN_FAILED | QR 스캔 실패 — 재시도 안내 |
| 0x81 | USB_COMM_ERROR | USB-C 통신 오류 — 재연결 후 재시도 안내 |
| 0x82 | SESSION_EXPIRED | 서명 세션 만료 — 재요청 필요 |
| 0x83 | DEVICE_NOT_FOUND | 콜드월렛 미감지 |
| 0x84 | APP_INTEGRITY_FAILED | 앱 무결성 검증 실패 |
7. Data Flow Diagram (DFD)¶
7.1. Level 0: 시스템 컨텍스트¶
┌───────────┐
│ 사용자 │
│ (Initiator│
│ /Approver)│
└─────┬─────┘
│ HTTPS
┌─────▼─────┐ ┌───────────────┐
│ │ JSON-RPC │ │
│ 온라인 │──────────────▶│ 블록체인 │
│ 대시보드 │◀──────────────│ 네트워크 │
│ │ │ │
└─────┬─────┘ └───────────────┘
│ QR (에어갭)
═══════╪═══════ TB-3 (에어갭 경계)
│
┌─────▼─────┐
│ │
│ 오프라인 │
│ 서명 앱 │
│ │
└─────┬─────┘
│ USB-C (유선)
───────┼─────── TB-4 (오프라인 서명 유닛 내부)
│
┌─────▼─────┐
│ │
│ D'CENT X │
│ 콜드월렛 │
│ (SE) │
│ │
└───────────┘
7.2. Level 1: 트랜잭션 서명 플로우¶
┌──────────────────────────────────────────────────────────────────┐
│ DFD Level 1: 트랜잭션 서명 │
│ │
│ [사용자] ──TX 요청──▶ ┌─────────────────┐ │
│ │ 1.1 TX 생성 │ │
│ │ + 정책 검증 │ │
│ └────────┬────────┘ │
│ │ 미서명 TX │
│ ┌────────▼────────┐ │
│ │ 1.2 승인 관리 │ │
│ │ (M-of-N) │ │
│ └────────┬────────┘ │
│ │ 승인 완료 TX │
│ ┌────────▼────────┐ │
│ ═══════════ TB-3 ═══ │ 1.3 에어갭 │ ═══════════════════ │
│ │ 전달 (QR) │ │
│ └────────┬────────┘ │
│ │ SignRequest │
│ ┌────────▼────────┐ │
│ ═══════════ TB-4 ═══ │ 1.4 서명 요청 │ ═══════════════════ │
│ │ 중계 (USB-C) │ │
│ └────────┬────────┘ │
│ │ SE_SignRequest │
│ ┌────────▼────────┐ │
│ │ 1.5 WYSIWYS │ │
│ │ + HW 정책 검증 │ │
│ │ + SE 서명 │ │
│ └────────┬────────┘ │
│ │ SE_SignResponse │
│ ┌────────▼────────┐ │
│ ═══════════ TB-4 ═══ │ 1.6 서명 반환 │ ═══════════════════ │
│ │ (USB-C) │ │
│ └────────┬────────┘ │
│ │ SignatureResult │
│ ┌────────▼────────┐ │
│ ═══════════ TB-3 ═══ │ 1.7 서명 전달 │ ═══════════════════ │
│ │ (QR) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ 1.8 서명 취합 │ │
│ │ + 블록체인 전파 │ │
│ └────────┬────────┘ │
│ │ TX Hash │
│ [사용자] ◀──확인 알림── │ │
│ [블록체인] ◀──TX Broadcast── │ │
└──────────────────────────────────────────────────────────────────┘
7.3. Level 2: 정책 업데이트 플로우¶
┌──────────────────────────────────────────────────────────────────┐
│ DFD Level 2: 정책 업데이트 │
│ │
│ [Admin 1] ──정책 변경 요청──▶ ┌──────────────┐ │
│ [Admin 2] ──쿼럼 서명────────▶│ 2.1 정책 │ │
│ [Admin 3] ──쿼럼 서명────────▶│ 변경 승인 │ │
│ └──────┬───────┘ │
│ │ PolicyUpdate + 쿼럼 서명 │
│ ┌──────▼───────┐ │
│ │ 2.2 정책 │ │
│ ═══════════ TB-3 ═══ │ 페이로드 │ ═══════════════ │
│ │ 에어갭 전달 │ │
│ └──────┬───────┘ │
│ │ SE_PolicyUpdate │
│ ┌──────▼───────┐ │
│ ═══════════ TB-4 ═══ │ 2.3 SE 수신 │ ═══════════════ │
│ │ + 서명 검증 │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ 2.4 물리 │ │
│ │ 버튼 확인 │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ 2.5 쿨다운 │ │
│ │ 적용 │ │
│ │ (24시간 대기) │ │
│ └──────┬───────┘ │
│ │ PolicyResponse │
│ ┌──────▼───────┐ │
│ ═══════════ TB-4 ═══ │ 2.6 결과 │ ═══════════════ │
│ │ 반환 (QR) │ │
│ └──────────────┘ │
└──────────────────────────────────────────────────────────────────┘
7.4. Level 2: 화이트리스트 동기화 플로우¶
┌──────────────────────────────────────────────────────────────────┐
│ DFD Level 2: 화이트리스트 동기화 │
│ │
│ [Admin] ──주소 추가/삭제──▶ ┌──────────────┐ │
│ │ 3.1 화이트 │ │
│ │ 리스트 관리 │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ 3.2 Merkle │ │
│ │ Tree 재구성 │ │
│ │ + 새 Root │ │
│ └──────┬───────┘ │
│ │ New Root + Admin 서명 │
│ ┌──────▼───────┐ │
│ ═══════ TB-3 + TB-4 ═══ │ 3.3 에어갭 │ ═══════════════ │
│ │ Root 전달 │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ 3.4 SE Root │ │
│ │ 교체 + 버전 │ │
│ │ 증가 │ │
│ └──────────────┘ │
│ │
│ 서명 시: 오프라인 앱이 Merkle Proof를 SE에 함께 전달 │
│ SE는 Proof로 leaf 계산 → 저장된 Root와 대조 │
└──────────────────────────────────────────────────────────────────┘
8. 메시지 버저닝 및 하위 호환성¶
8.1. 버전 관리 원칙¶
| 원칙 | 설명 |
|---|---|
| Semantic Versioning | Major.Minor 형식. Major 변경 = 호환 불가, Minor 변경 = 하위 호환 |
| 버전 필드 | MessageHeader.version 필드로 메시지 버전 식별 |
| 새 필드 추가 | Optional 필드로만 추가 (CBOR 맵에 새 키 추가) → 하위 호환 유지 |
| 필드 삭제 | 금지 — deprecated로 표시하되 파싱은 계속 지원 |
| 디코더 관용 | 알 수 없는 CBOR 키는 무시 (forward compatibility) |
8.2. 버전 불일치 처리¶
| 상황 | 송신측 | 수신측 | 처리 |
|---|---|---|---|
| Minor 불일치 (1.0 → 1.1) | 신버전 | 구버전 | 새 Optional 필드 무시, 정상 처리 |
| Minor 불일치 (1.1 → 1.0) | 구버전 | 신버전 | 새 필드 부재 → 기본값 사용, 정상 처리 |
| Major 불일치 (1.x → 2.x) | 신버전 | 구버전 | ERROR(0xFE) + VERSION_MISMATCH 반환 |
| 버전 필드 부재 | 비정상 | 정상 | 버전 0으로 간주, 기본 파싱 시도 |
8.3. 펌웨어 업데이트와 프로토콜 버전¶
SE 펌웨어 업데이트 시 프로토콜 버전이 변경될 수 있다. 오프라인 앱은 SE에 GET_STATUS 요청을 보내 지원 프로토콜 버전을 확인한 후, 해당 버전에 맞는 메시지 포맷을 사용한다.
DeviceStatusResponse {
header: MessageHeader
se_version: string // SE 펌웨어 버전 (e.g., "1.2.0")
protocol_version: uint8 // 지원 프로토콜 버전
supported_chains: [uint8] // 지원 체인 목록
policy_version: uint32 // 현재 정책 버전
sign_counter: uint32 // 서명 카운터
cooldown_remaining: uint32 // 쿨다운 잔여 (초)
locked: bool // WYSIWYS 잠금 상태
}
9. Phase 3/4 인터페이스 참조 매핑¶
9.1. airgap-signing-flow.md 매핑¶
| Phase 3 에어갭 단계 | 본 문서 인터페이스 | 데이터 |
|---|---|---|
| → (1) 대시보드 → 오프라인 앱 | 인터페이스 1 | BTCSignRequest / EVMSignRequest |
| → (2) 오프라인 앱 → 콜드월렛 | 인터페이스 2 | SE_SignRequest |
| ← (3) 콜드월렛 → 오프라인 앱 | 인터페이스 3 | SE_SignResponse |
| ← (4) 오프라인 앱 → 대시보드 | 인터페이스 4 | SignatureResult |
9.2. wysiwys-design.md 매핑¶
| WYSIWYS 요소 | 인터페이스 위치 | 필드 |
|---|---|---|
| APP_HASH | 인터페이스 1/2 | BTCSignRequest.app_hash, SE_SignRequest.app_hash |
| SE_PARSE_HASH | 인터페이스 3 | SE_SignResponse.se_parse_hash |
| 해시 불일치 에러 | 인터페이스 3 | status_code: 0x30 (WYSIWYS_HASH_MISMATCH) |
| 파싱 실패 | 인터페이스 3 | status_code: 0x31 (WYSIWYS_PARSE_FAILED) |
| 잠금 상태 | 인터페이스 3 | status_code: 0x32 (WYSIWYS_LOCKOUT) |
9.3. hardware-policy-engine.md 매핑¶
| HW 정책 요소 | 인터페이스 위치 | 필드 |
|---|---|---|
| PolicyUpdate 구조체 | 인터페이스 2 | SE_PolicyUpdate.policy_data |
| Admin 쿼럼 서명 | 인터페이스 2 | SE_PolicyUpdate.admin_signatures |
| 정책 위반 코드 (0x01-0x04) | 인터페이스 3 | PolicyViolation.violation_code |
| 쿨다운 상태 | 인터페이스 3 | DeviceStatusResponse.cooldown_remaining |
본 문서는 Phase 5 System Architecture Design의 일부로, 3-Zone 보안 아키텍처(three-zone-security-architecture.md)의 Zone 경계 정의에 기반하여 인터페이스를 명세한다. 에어갭 통신 프로토콜(airgap-communication-protocol.md)에서 UR/CBOR/APDU 수준의 바이트 레벨 명세가 추가로 제공된다.
관련 문서¶
- 에어갭 통신 프로토콜 설계서 -- 시스템 아키텍처
- 체인 추상화 레이어 인터페이스 정의서 -- 시스템 아키텍처
- 온라인 대시보드 백엔드 아키텍처 설계서 -- 시스템 아키텍처
- D'CENT X 펌웨어 서명 인터페이스 설계서 -- 시스템 아키텍처
- 오프라인 서명 앱 아키텍처 설계서 -- 시스템 아키텍처
- STRIDE 기반 보안 위협 모델 -- 시스템 아키텍처
- 3-Zone 보안 아키텍처 설계서 -- 시스템 아키텍처