본문으로 이동

다중서명 서명자 교체

정족수를 유지하고 정확한 온체인 소유자 집합과 임계값을 확인하면서 다중서명 서명자를 교체하고, 키 침해에 안전하게 대응하기 위한 검증 우선 절차입니다.

업데이트

교육 목적으로만 제공되며 투자, 법률 또는 보안 조언이 아닙니다. 서명자 교체 오류는 통제권 이전, 대기 중인 승인 무효화 또는 다중서명 계정의 영구 잠금으로 이어질 수 있습니다.

직접 답변

다중서명 서명자 교체는 거래를 승인할 권한이 있는 계정을 변경합니다. 일반적으로 새 지갑 주소나 자산 이전은 필요하지 않습니다. 권한이 높은 거래를 통해 계정의 소유자 집합과 경우에 따라 승인 임계값을 변경합니다. 구현마다 방식이 다르므로 인터페이스의 라벨이 권한을 정확히 설명한다고 가정하지 말고 배포된 컨트랙트와 현재 온체인 상태를 확인해야 합니다.

안전한 교체는 먼저 각 새 서명자의 통제권을 증명하고, 변경 과정 내내 실행 가능하면서 집중되지 않은 정족수를 유지하고, 이전 서명자를 제거한 다음 최종 상태를 온체인에서 검증합니다. 실행 전에 필요한 정족수를 잃으면 일반적인 소유자 교체가 불가능해질 수 있습니다. 편의를 위해 임계값을 낮추면 탈취 가능 구간이 생길 수 있습니다.

담당자, 서명 장치, 개인 키, 온체인 소유자 주소는 별개의 기록입니다. 정확한 주소, 보관자, 독립된 통제 영역, 백업 상태, 교체 이유를 문서화하십시오. 정상적인 교체 절차에서 시드 문구나 개인 키를 공개할 필요는 없습니다.

작동 방식

  1. 현재 권한을 조사합니다. 독립적으로 검증한 체인과 계정 주소에서 배포된 구현, 소유자 목록, 임계값, nonce, 활성 모듈, guard, fallback handler, 복구 경로, timelock을 읽습니다. 모듈이나 복구 메커니즘은 일반 소유자 임계값 밖에서 실행될 수 있고, 제한적인 guard는 원래 유효한 교체를 차단할 수 있습니다.
  2. 서명 전에 목표 상태를 정의합니다. 변경 후의 정확한 소유자 집합과 임계값을 기록합니다. 임계값이 소유자 수를 초과하지 않고 적어도 그 수만큼의 독립된 서명자가 계속 작동하는지 확인합니다. 한 사람, 비밀번호 보관소, 클라우드 계정 또는 관리자가 모든 장치를 통제한다면 지리적 분리는 독립성이 아닙니다.
  3. 새 서명자를 등록하고 인증합니다. 예정된 보관 환경에서 새 키를 생성하거나 복원하고, 신뢰할 수 있는 장치에서 주소를 검증하며, 합의된 챌린지 또는 테스트 서명으로 통제권을 증명합니다. 두 번째 인증 채널로 주소를 확인하고 복사된 채팅 문구나 지갑 인터페이스에만 의존하지 마십시오.
  4. 안전한 중간 상태를 유지하는 순서를 선택합니다. 일부 컨트랙트는 소유자 한 명을 원자적으로 교체할 수 있습니다. 예를 들어 Safe는 swapOwner를 제공하며 addOwnerWithThreshold, removeOwner, changeThreshold도 제공합니다. 구현에 여러 거래가 필요하면 각 단계 후의 소유자 집합과 임계값을 분석합니다. 진행 중인 침해로 인해 이 순서가 위험한 경우가 아니라면 제거 전에 용량을 추가하고 검증합니다.
  5. 정확한 거래를 디코딩하고 시뮬레이션합니다. chain ID, 계정 주소, target, 함수 선택자, 이전 및 새 소유자 주소, 결과 임계값, nonce, value, 작업 유형을 독립적으로 확인합니다. delegatecall, 배치, 모듈 변경, guard 변경은 각각 별도의 고위험 효과로 취급합니다. 모든 서명자는 동일하게 디코딩된 payload와 거래 해시를 승인해야 합니다.
  6. 기존 권한으로 실행합니다. 문서화된 복구 경로에 다른 규정이 없다면 현재의 유효한 정족수가 교체를 승인합니다. 긴급 상황에서는 인증된 연락처를 통해서만 조정하고 침해되지 않은 서명자를 사용합니다. 일반 정족수와 사전 구성된 복구 권한을 모두 사용할 수 없다면 표준 소유자 관리 호출로 접근을 복구할 수 없습니다.
  7. 변경을 검증하고 종료합니다. 확인 후 소유자 집합과 임계값을 직접 조회하고, 필요에 따라 발생한 이벤트나 trace를 검사하며, 이전 주소가 더 이상 승인되지 않는지 확인합니다. 새 서명자가 의도한 임계값이 필요한 승인된 저위험 또는 가치가 없는 거래에 참여하게 합니다. 대기 중인 거래를 검토하고, 이전 서명자의 오프체인 접근 권한과 백업을 폐기하며, 제안, 서명, 거래 해시, 블록, 최종 상태를 보관합니다.

전체 예시

3-of-5 계정의 소유자가 A, B, C, D, E이고 BF로 교체해야 한다고 가정합니다. 팀은 먼저 F가 제안된 정확한 주소를 통제하고 다른 소유자와 독립적인지 확인합니다. 호환되는 Safe 배포에서는 swapOwner(prevOwner, B, F)를 준비합니다. 이 호출 자체가 Safe 거래이므로 현재 소유자 집합에서 3개의 유효한 확인이 필요합니다. 디코딩 결과는 소유자 수 5와 임계값 3을 유지해야 합니다.

거래가 확인되면 팀은 getOwnersgetThreshold를 읽고 B가 없으며 F가 존재하는지 검증한 다음, F와 다른 소유자 두 명이 승인된 0 가치 테스트를 실행합니다. 대기 중인 거래도 검토합니다. 제거 후 B의 서명이나 사전 승인이 소유자 검사를 더 이상 충족하지 않을 수 있으므로 영향받는 제안은 실행 가능하다고 가정하지 말고 취소하거나 다시 만들어야 합니다.

B가 침해되었을 가능성이 있으면 팀은 해당 서명자에게 제거 승인을 요청하지 않습니다. 침해되지 않은 다른 소유자 세 명이 교체를 실행한 뒤 모듈, 복구 권한, allowance, session key, 이미 실행된 거래를 검사합니다. B를 제거해도 이전 작업은 되돌아가지 않고 다른 경로로 부여된 권한도 취소되지 않기 때문입니다. 사용 가능한 침해되지 않은 소유자가 3명 미만이면 미리 구성한 복구 또는 관리 경로만 도움이 될 수 있습니다. 시드 문구를 공유하거나 요청하지 않은 “복구” 서비스를 신뢰하는 것은 정족수를 대신하지 못합니다.

위험과 통제

  • 잘못된 계정 또는 주소. 독립된 장치와 출처에서 chain ID, 다중서명 주소, 구현, 새 소유자 주소를 확인합니다. 주소 포이즈닝과 복사 오류는 공격자에게 통제권을 줄 수 있습니다.
  • 정족수 상실. 모든 중간 상태를 모델링합니다. 소유자를 너무 일찍 제거하거나, 가용 서명자보다 임계값을 높이거나, 상관된 여러 장치를 함께 교체하면 계정을 사용할 수 없게 됩니다.
  • 일시적 집중. 낮은 임계값이나 새로 추가된 서명자로 인해 더 적은 당사자가 계정을 통제하는 구간이 생길 수 있습니다. 지원된다면 원자적 교체를 우선하고 단지 절차를 단순화하려고 임계값을 낮추지 마십시오.
  • 상관된 보관. 서로 다른 주소라도 시드, 장치, 백업, 통신 또는 관리자가 하나의 장애 영역을 공유하면 독립적이지 않습니다. 비밀을 중앙화하지 않고 복구를 테스트하십시오.
  • 숨은 권한. 모듈, guard, fallback handler, session key, timelock, 복구 컨트랙트는 소유자 경로를 우회하거나 차단할 수 있습니다. 교체 전후에 조사하고 검증하십시오.
  • 침해 서명자와의 경쟁. 제거가 확인되기 전에 의심되는 서명자가 선행 거래를 보내고, 자산을 빼내고, 구성을 변경하거나, 다른 거래를 승인할 수 있습니다. 사고 대응 절차와 적절한 경우 비공개 거래 전달, 지속적인 상태 모니터링을 사용하고 제출한 거래가 경쟁에서 이겼다고 가정하지 마십시오.
  • 오래된 대기 승인. 소유자 및 임계값 변경은 수집한 서명을 무효화하거나 충분한 승인 조건을 바꿀 수 있습니다. 최종 상태를 기준으로 대기 중인 모든 거래를 재평가하고 오래된 제안을 취소하십시오.
  • 잘못된 완료 판단. 인터페이스의 성공 알림은 의도한 상태를 증명하지 않습니다. 필요한 확인 정책을 기다린 다음 컨트랙트 상태를 읽고 거래 payload, 이벤트, 실행 결과를 검증하십시오.
  • 불완전한 권한 회수. 온체인 소유자를 제거해도 복사된 키, 조직 접근 권한, relayer 자격 증명, 비밀번호 보관소 항목, 다른 컨트랙트와 체인의 권한은 지워지지 않습니다. 각각 별도로 폐기하고 감사 기록을 남기십시오.

흔한 오해

  • “교체란 모든 자산을 새 지갑으로 옮기는 것이다.” 많은 스마트 계정 다중서명은 같은 계정 주소에서 소유자를 업데이트합니다. 마이그레이션은 별도 작업이며 특정 구현이나 사고 계획에서만 필요할 수 있습니다.
  • “새 서명자를 먼저 추가하면 항상 안전하다.” 가용성을 보호하지만 승인된 집합을 일시적으로 늘릴 수 있습니다. 침해가 진행 중이면 원자적 교체나 다른 긴급 순서가 더 안전할 수 있습니다.
  • 3-of-5 임계값은 지정된 세 사람이 언제나 사용 가능하다는 뜻이다.” 컨트랙트는 사람, 부서, 장치가 아니라 유효한 소유자 계정을 셉니다. 공동 보관과 접근할 수 없는 키는 실질적 독립성과 가용성을 낮춥니다.
  • “침해된 소유자를 제거하면 피해가 되돌아간다.” 제거가 확인된 뒤 그 소유자 경로의 향후 사용은 막지만, 실행된 거래나 다른 곳에서 만든 권한은 되돌리지 않습니다.
  • “지갑 인터페이스만으로 충분한 증거가 된다.” 인터페이스와 인덱싱 서비스는 오래되었거나 잘못 구성되었거나 악의적일 수 있습니다. 거래를 디코딩하고 독립적으로 검증한 endpoint에서 최종 컨트랙트 상태를 읽으십시오.
  • “정족수가 없어도 지원팀이 지갑을 초기화할 수 있다.” 자체 보관 다중서명에는 온체인에 인코딩되었거나 사전에 구성된 권한 경로만 있습니다. 유효한 정족수나 복구 경로가 없으면 접근 권한을 영구적으로 잃을 수 있습니다.

관련 주제

출처

탐색

위키 검색...