소셜 복구 지갑은 미리 지정한 여러 보호자 중 정해진 수가 동의하면 새 소유자 키로 계정을 복구하도록 설계할 수 있습니다. 요청 즉시 소유권이 바뀌는 대신 지연 기간을 두면 기존 소유자가 공격성 복구를 발견하고 취소할 기회를 얻습니다. 보호자는 시드 문구를 나눠 가진 사람이 아니라 복구 요청에 승인 신호를 내는 계정이라는 점을 구분해야 합니다.
보호자는 시드 조각이 아니라 승인 주체다
소셜 복구는 지갑 소유자가 접근 키를 잃었을 때 미리 정한 사람이나 기기가 새 소유자 구성을 승인하도록 하는 방식입니다. 일반적인 스마트 계정 구현에서는 보호자 주소 목록과 필요한 승인 수인 threshold를 계약에 기록합니다. 보호자 3명 중 2명이 동의해야 한다면 한 명의 계정이 침해돼도 즉시 지갑을 넘길 수 없습니다.
보호자가 지갑 자산을 평소에 공동 서명하는 다중서명 구성과는 역할이 다를 수 있습니다. 보호자는 정상 거래에 참여하지 않고 복구 요청에서만 권한을 행사하도록 설계할 수 있습니다. 또한 시드 문구 단어를 보호자들에게 나눠 주는 방식과도 다릅니다. 어떤 권한을 갖는지는 제품 이름이 아니라 실제 모듈과 계약 함수에서 확인해야 합니다.
| 요소 | 역할 | 실패 시 위험 |
|---|---|---|
| 소유자 키 | 평상시 거래 승인 | 분실·탈취 |
| 보호자 | 복구 요청 승인 | 공모·연락 두절 |
| 임계값 | 필요 승인 수 제한 | 너무 낮으면 탈취, 높으면 복구 불가 |
| 복구 지연 | 실행 전 대기 시간 | 감시하지 않으면 취소 기회 상실 |
복구는 제안·대기·실행 단계로 나뉜다
Candide의 공개 SocialRecoveryModule 코드는 보호자 승인을 모아 새 소유자와 새 임계값을 제안하고, recovery period 뒤 실행 가능 시각을 계산하는 구조를 보여 줍니다. 충분한 승인이 모였다고 바로 계정 소유자가 바뀌지 않도록 지연을 두면 기존 소유자가 알림을 받고 비정상 요청을 검토할 시간이 생깁니다.
대기 시간이 끝난 뒤에는 누구나 실행 함수를 호출할 수 있게 설계될 수 있지만, 실행 내용은 이미 승인된 복구 해시와 일치해야 합니다. 반대로 현재 소유자는 대기 중인 복구를 취소할 수 있습니다. 이 구조에서 보안의 핵심은 지연 시간 자체보다 복구 요청을 실제로 감지하고 취소 거래를 낼 수 있는 모니터링입니다.
복구 지연은 시간을 제공할 뿐 감시를 대신하지 않는다.
JOBCOIN 해설
임계값은 독립성을 기준으로 정한다
보호자 수가 많아 보여도 모두 같은 이메일, 같은 휴대전화, 같은 회사 계정에 의존하면 한 번의 장애로 함께 잃을 수 있습니다. 가족 두 명과 개인의 보조 기기를 선택했더라도 같은 집의 화재나 동일한 클라우드 복구 계정이 공통 실패점이 될 수 있습니다. 사람·기기·기관의 조합과 지리적 분산을 함께 봅니다.
임계값을 낮추면 접근 회복은 쉽지만 공모나 계정 침해에 약해지고, 높이면 안전해 보여도 연락 두절 한 명 때문에 복구가 막힐 수 있습니다. 보호자에게는 지갑 잔액과 모든 활동을 공개할 필요 없이 자신의 역할·확인 채널·의심 요청 거절 절차를 알려야 합니다. 정기적으로 연락 가능 여부와 주소가 바뀌지 않았는지 확인합니다.
- 보호자들이 같은 로그인·기기·장소에 의존하지 않는지 확인한다.
- 임계값을 공모 위험과 연락 두절 위험 사이에서 정한다.
- 복구 요청을 확인할 별도 연락 채널을 합의한다.
- 보호자 교체와 임계값 변경에 필요한 대기 시간을 기록한다.
모듈과 프록시 권한을 함께 감사한다
소셜 복구 기능은 지갑의 스마트 계약에 포함되거나 별도 모듈로 연결될 수 있습니다. Safe 모듈 배포 저장소는 Social Recovery Module을 포함한 모듈들의 출시·감사·네트워크별 배포 정보를 제공합니다. 사용하는 체인의 실제 모듈 주소가 공식 배포 목록과 일치하는지, 코드 버전과 감사 범위가 무엇인지 확인합니다.
모듈은 설계상 소유자 구성을 바꿀 수 있는 강한 권한을 갖습니다. 지갑 인터페이스에 보호자 이름만 보인다고 충분하지 않습니다. 관리자 키, 업그레이드 가능성, pause 권한, 설치된 다른 모듈, 체인 ID를 확인합니다. 감사 보고서는 특정 커밋과 가정 아래의 검토이며 이후 업그레이드까지 자동 보증하지 않습니다.
알림과 취소 수단을 소유자 키와 분리한다
주 사용 기기를 잃은 상황에서는 그 기기로 복구 알림을 받거나 취소 거래를 서명할 수 없습니다. 읽기 전용 모니터링 주소를 별도 기기나 서비스에 등록하고, 복구 이벤트가 생기면 알려 주도록 구성합니다. 취소에 쓸 비상 소유자 키와 수수료도 주 기기와 떨어진 곳에 보관합니다.
공격자가 주 키를 훔친 경우 보호자를 먼저 바꾸거나 모듈을 제거하려 할 수 있습니다. 보호자 변경에도 지연이 적용되는지, 현재 소유자가 즉시 변경할 수 있는지 제품 문서와 계약에서 확인합니다. 정상 거래 권한과 복구 구성 변경 권한의 시간 제약을 표로 만들어 두면 사고 때 우선순위를 정하기 쉽습니다.
빈 지갑에서 복구 전 과정을 연습한다
설정 화면에서 보호자를 추가한 것만으로 복구 가능성을 검증할 수 없습니다. 테스트넷이나 소액 전용 계정에서 기존 키를 사용할 수 없다고 가정하고 보호자 승인, 지연 대기, 새 키 등록, 이전 키 무효화, 정상 송금을 끝까지 수행합니다. 취소 시나리오도 별도로 실행해 누가 어떤 거래를 내야 하는지 확인합니다.
리허설 뒤에는 보호자 주소, 임계값, 대기 시간, 공식 모듈 주소, 복구 연락 절차를 오프라인 문서에 남깁니다. 보호자가 탈퇴하거나 사망했을 때의 교체 규칙도 정합니다. 지갑 앱 서비스가 종료돼도 표준 도구나 직접 계약 호출로 복구할 수 있는지 확인해야 특정 프런트엔드에 대한 의존을 줄일 수 있습니다.
자주 묻는 질문
보호자가 제 지갑 자산을 바로 보낼 수 있나요?
구현에 따라 다르지만 복구 전용 보호자는 평상시 거래 권한 없이 소유자 변경만 승인하도록 설계할 수 있습니다. 실제 모듈 권한을 확인하세요.
복구 지연은 길수록 안전한가요?
긴 지연은 공격을 발견할 시간을 늘리지만 실제 분실 때 접근 회복도 늦춥니다. 알림·취소 가능 시간과 필요성을 함께 정해야 합니다.
보호자에게 시드 문구를 알려 줘야 하나요?
일반적인 소셜 복구 보호자는 자신의 키로 복구 요청을 승인하며 사용자의 시드를 알 필요가 없습니다. 시드를 공유하라고 요구하는 절차는 별도로 검증하세요.



