지갑 인프라와 보안 모델
업계 배경
지갑 시스템은 일반적으로 개인 키를 보호하기 위해 하나 이상의 기초 암호 방식에 의존합니다. 이러한 접근 방식을 이해하면 본 문서에서 설명하는 보안 모델의 맥락을 파악할 수 있습니다.
Shamir's Secret Sharing (SSS)
SSS는 개인 키를 여러 개의 셰어로 나누며, 원본을 복원하려면 최소 임계값이 필요합니다. 완전한 비밀성을 제공합니다 — 임계값 미만의 셰어 개수는 키에 대해 아무 정보도 드러내지 않습니다. SSS는 성숙하고 도구가 잘 갖추어져 있으며 빠릅니다(서명 20–40ms). 트레이드오프는 서명을 위해 개인 키를 완전히 재조립해야 하며, 재구성 순간에 단일 장애점이 생긴다는 점입니다.
Threshold Signature Schemes (TSS)
TSS(일반적으로 MPC로 알려짐)는 여러 당사자가 개인 키를 재조립하지 않고도 공동으로 서명을 생성할 수 있게 합니다. 이렇게 하면 SSS의 재구성 위험이 사라집니다. 트레이드오프는 미성숙함 — 최초의 효율적인 2자 ECDSA 프로토콜은 2017년에야 등장했습니다 — 과 성능입니다. 각 서명에는 네트워크 왕복이 포함되어 지연이 수 초에 이를 수 있습니다.
Trusted Execution Environments (TEE)
TEE는 하드웨어 엔클레이브 안에서 암호 연산을 실행하여 키 자료가 노출되지 않고 승인된 코드만 실행되도록 합니다. 클라이언트는 증명을 통해 연산을 검증할 수 있습니다. TEE는 확장이 잘 되고 TSS의 왕복 지연을 피하지만, 보안은 엔클레이브 무결성에 달려 있으며 역사적으로 사이드채널 공격에 취약했습니다.
WebAuthn PRF 확장
WebAuthn PRF(Pseudo-Random Function) 확장은 사용자의 패스키 하드웨어에서 — Apple 기기에서는 Secure Enclave, Windows에서는 TPM, Android에서는 Titan chip — 결정적 비밀을 유도합니다. 이 비밀은 기기와 사용자의 생체 인식 또는 PIN에 바인딩되며, 인증 시 기기에서 계산되고 전송되지 않습니다. 서버가 한 번도 보지 못한 비밀로 키 자료를 암호화할 수 있는 지갑 설계 유형을 가능하게 합니다.
세 당사자 키 보호
개요
본 시스템에서 개인 키는 완전한 형태로 저장되지 않습니다 — 사용자 기기에도, 당사 서버에도, 어디에도 없습니다. 대신 키 자료는 3-of-3 secret sharing 방식으로 세 독립 당사자 간에 암호적으로 분할됩니다. 키를 복원하려면 세 당사자 모두가 협력해야 합니다. 세 미만이면 개인 키에 대한 수학적으로 영의 정보만 드러납니다.
이것은 하이브리드 모델입니다: 패스키 기반 클라이언트 측 암호화(PRF-as-KEK), 비밀 공유, 격리된 서버 측 엔클레이브를 하나의 아키텍처로 결합합니다. 그 결과 구성은 Shamir's Secret Sharing과 동일한 정보이론적 보안 보장 — 임계값 미만 당사자의 부분 집합은 키에 대해 어떤 정보도 얻지 못함 — 을 달성하면서, 한 셰어를 사용자의 물리적 인증기 하드웨어에 바인딩하여 서버 측 침해만으로는 키를 재구성할 수 없게 합니다.
이것은 모든 최신 기기(iOS, macOS, Android, Windows의 주요 브라우저 전부)에서 기본 보안 모델입니다.
세 당사자
당사자 1 — 사용자의 인증기
사용자의 패스키 하드웨어는 해당 기기와 사용자의 생체 인식 또는 PIN에 바인딩된 결정적 비밀을 계산합니다. 이 출력 — PRF output이라고 부름 — 은 인증 중 기기에서 생성되며 어디로도 전송되지 않습니다. 저장되지 않고 로그에도 남지 않습니다. 서명 작업이 지속되는 동안 RAM에만 존재합니다.
이 비밀은 키 복원에서 사용자의 기여입니다. 이것 없이 다른 두 당사자는 사용 가능한 개인 키를 만들 수 있는 자료를 갖지 못합니다.
당사자 2 — API
API는 사용자 키 자료의 암호화된 사본을 저장합니다. 사용자의 PRF에서 유도된 비밀로 암호화되어 있으며, API는 그 비밀을 한 번도 보지 못했습니다. API는 접근을 제어합니다 — 사용자가 등록한 패스키로 서명된 유효한 WebAuthn 어설션을 제시한 요청에만 이 암호화 페이로드를 공개합니다. 다만 API 자체는 페이로드를 복호화할 수 없습니다.
API는 인증된 전달 메커니즘으로 동작하며 키 보관자가 아닙니다.
당사자 3 — 암호 엔클레이브
API와 독립적으로 동작하며 자체 암호 키와 인프라를 갖는 별도의 격리 시스템이 서버 측 키 셰어를 보유합니다. 이 셰어는 엔클레이브만 아는 비밀로 저장 시 암호화됩니다. 엔클레이브는 어설션 검증을 통과한 요청에 대해서만 복호화된 셰어를 공개하며, 최종 서명 단계에서 사용자 셰어와 결합하기 위해서만 공개합니다.
엔클레이브는 사용자의 PRF 출력, 사용자의 키 셰어, 또는 조립된 개인 키 중 어느 것도 보지 않습니다.
보안 속성
단일 장애점 없음
| 시나리오 | 결과 |
|---|---|
| 사용자 기기 도난 | 공격자가 생체 인식/PIN을 재현할 수 없음; PRF output을 얻을 수 없음 |
| API 완전 침해 | 공격자가 얻는 것은 한 번도 본 적 없는 비밀로 암호화된 암호문뿐 |
| 엔클레이브 완전 침해 | 공격자가 키의 한 셰어를 얻음; 다른 셰어는 침해된 두 시스템 어느 쪽에도 없음 |
| API와 엔클레이브 모두 침해 | 공격자가 암호화된 사용자 페이로드와 서버 셰어를 얻음 — 그래도 물리적 인증기의 PRF output 없이는 사용자 페이로드를 복호화할 수 없음 |
마지막 시나리오가 결정적입니다. 서버 측 인프라가 완전히 침해되어도 개인 키를 재구성하기에는 부족합니다. 사용자의 인증기는 서버 측 침해로 우회할 수 없는 암호학적 관문입니다.
정보이론적 보안
하이브리드 모델은 Shamir's Secret Sharing과 동일한 유형의 보안 보장을 이어받습니다: 키 분할은 계산적으로 안전할 뿐만 아니라 — 정보이론적으로 안전합니다. 무한한 계산 능력을 가진 공격자가 세 당사자 중 임의의 두 당사자의 자료를 갖고 있어도 개인 키에 대한 정보를 얻지 못합니다. 시간이나 하드웨어를 아무리 써도 두 당사자의 데이터만으로 키를 유도하는 알고리즘은 없습니다. 이것은 일회용 패드가 제공하는 것과 동일한 보장입니다.
설계상 논커스터디얼
당사는 API와 엔클레이브를 모두 운영합니다. 그럼에도 일방적으로 사용자 자금에 접근할 수 없습니다. 사용자의 PRF output이 빠진 조각입니다 — 사용자 하드웨어 안에서 생성되며 전송되지 않습니다. 자금에 접근할 수 없다는 것은 정책이나 이용약관상 약속이 아닙니다. 내부 접근 통제, 규제 압력, 인프라 침해와 관계없이 성립하는 수학적 제약입니다.
트랜잭션 서명 방식
모든 서명은 사용자 기기에서 이루어집니다. 개인 키는 어떤 서버에서도 조립되지 않습니다.
- 사용자가 앱에서 트랜잭션을 승인합니다. 기기가 생체 인식 또는 PIN으로 사용자를 인증합니다.
- 기기가 하드웨어에 바인딩된 PRF 비밀을 로컬에서 계산합니다. 이 비밀은 기기를 떠나지 않습니다.
- 앱이 API에서 암호화된 사용자 페이로드를, 엔클레이브에서 서버 셰어를 가져옵니다. 둘 중 어느 하나도 단독으로는 쓸 수 없습니다.
- 사용자 기기의 RAM에서: 하드웨어 비밀이 사용자 페이로드를 복호화하여 사용자 키 셰어를 얻습니다. 두 셰어가 완전한 개인 키로 결합됩니다.
- 개인 키가 트랜잭션에 서명합니다 — 전부 기기에서.
- 개인 키는 즉시 RAM에서 지워집니다. 캐시·영구 저장·로그 모두 없습니다.
완전한 개인 키는 수 밀리초 동안만 존재하며, 사용자 기기에서만, 서명 작업 중에만 그렇습니다. 서버는 이를 한 번도 보지 못합니다.
개인 키 내보내기
사용자가 개인 키를 내보내기로 선택하는 경우 — 예를 들어 다른 지갑으로 이전하려면 — 동일한 원칙이 적용됩니다. 키는 사용자 기기에서만 재구성되고 전달됩니다. 서버는 암호화된 셰어를 제공하지만 복호화와 조립은 로컬에서 이루어집니다. 내보내기 과정 어디에서도 개인 키가 서버를 통과하거나 서버에 보이지 않습니다.
패스키 동기화 및 기기 간 접근
최신 플랫폼 — Apple의 iCloud Keychain, Android의 Google Password Manager — 는 사용자 기기 간에 패스키를 동기화합니다. 키 복원에 사용되는 하드웨어 바인딩 비밀은 동기화된 패스키 자료의 일부이므로, 사용자 동기화 그룹의 모든 기기에서 동일한 PRF output을 재현할 수 있습니다. 이렇게 하면 기기를 넘어서도 세 당사자 보안 모델이 유지됩니다: 동기화된 기기는 모두 서명에 참여할 수 있으며 서버 측 아키텍처를 바꿀 필요가 없습니다.
패스키가 클라우드 계정에 동기화되었는지 사용자에게 알려 주므로, 지갑 복구 가능성을 항상 파악할 수 있습니다.
PRF는 iOS 18+, macOS Sequoia 15.4+, Android 14+, YubiKey 5 시리즈에서 지원됩니다. PRF를 지원하지 않는 플랫폼에서는 서버 측 서명 폴백이 사용됩니다.
기존 지갑 보안과의 비교
| 모델 | 개인 키 위치 | 자금에 접근할 수 있는 자 |
|---|---|---|
| 표준 셀프 커스터디(시드 구문) | 사용자가 보관 | 시드 구문을 가진 자 |
| 거래소 / 핫 월렛 커스터디 | 운영자가 보관 | 운영자(및 운영자를 침해한 자) |
| 하드웨어 지갑 | 기기에 저장 | 물리 기기와 PIN을 가진 자 |
| 본 시스템 | 완전한 형태로 저장되지 않음 | 사용자의 라이브 인증기와 서버 인프라가 동시에 필요 |
요약
이 하이브리드 모델 — PRF 기반 클라이언트 측 암호화, 비밀 공유, 격리된 엔클레이브의 결합 — 은 신뢰를 실질적으로 독립된 세 당사자에 분산하여 두 당사자의 부분 집합으로는 개인 키를 재구성할 수 없으며, Shamir's Secret Sharing과 동일한 정보이론적 보안 보장을 제공합니다. 사용자의 생체 인식에 바인딩된 하드웨어 비밀이 전체 시스템의 암호학적 앵커입니다. 서버 측 인프라가 아무리 철저히 침해되어도 사용자의 물리적 참여 없이는 유효한 서명을 만들 수 없습니다.