본문으로 이동

세션 키 지갑

스마트 계정 세션 키가 제한된 권한을 위임하는 방식, 반드시 적용해야 할 제약, 키 검증·폐기·유출 대응 방법을 설명합니다.

업데이트

교육 목적의 정보일 뿐 투자 조언이 아닙니다. 유출되거나 과도한 권한을 가진 세션 키는 되돌릴 수 없는 디지털 자산 손실을 일으킬 수 있습니다.

직접 답변

지갑 세션 키는 일반적으로 보조 서명 키 또는 그 키에 연결된 위임 자격 증명이며, 스마트 계정은 정해진 규칙 안에서만 이를 허용합니다. 규칙은 시간, 대상 계약, 함수 선택자, 토큰 수량, 거래 횟수 같은 조건을 제한할 수 있습니다. 주 서명자가 매 작업을 승인하지 않아도 앱이 반복 작업을 수행하도록 하는 것이 목적입니다.

“세션 키”는 설계 패턴이지 하나의 통일된 이더리움 표준이 아닙니다. ERC-4337은 프로그래밍 가능한 계정 검증과 시간 제한이 있는 UserOperation 검증을 제공하며, ERC-7579 같은 모듈형 계정 체계는 검증자, 실행자, 훅을 수용할 수 있습니다. 키가 할 수 있는 일은 최종적으로 지갑에 배포된 계정과 모듈 코드가 결정합니다. 만료만으로 세션이 안전해지는 것은 아니며, 브라우저의 복사본을 지워도 온체인에 등록됐거나 만료되지 않은 위임에 포함된 권한이 반드시 폐기되는 것은 아닙니다.

작동 방식

일반적인 흐름은 5단계입니다.

  1. 소유자는 기기에서 새 키 쌍을 만들거나 세션 서명자를 식별하는 자격 증명을 승인합니다. 설계가 앱 서버를 신뢰할 수 있는 수탁자로 명시하지 않는 한 세션 개인 키를 서버로 보내서는 안 됩니다.
  2. 소유자는 기본 지갑으로 정책을 승인합니다. 어떤 시스템은 키와 정책을 온체인에 설치하고, 다른 시스템은 작업이 도착할 때 계정이 검증하는 서명된 위임을 사용합니다.
  3. 앱은 작업을 구성하고 세션 키로 서명합니다. ERC-4337 흐름에서는 계정의 validateUserOp 로직이 서명과 정책을 검사합니다. 번들러 시뮬레이션은 진입 검사일 뿐 실행이나 안전의 증거가 아닙니다.
  4. 계정은 실행 전에 모든 제한을 강제해야 합니다. 유효 권한은 A_effective = K ∩ P ∩ S로 요약할 수 있습니다. 키 보유(K), 설정된 정책(P), 현재 계정 또는 체인 상태(S)가 모두 작업을 허용해야 합니다.
  5. 세션은 만료, nonce 또는 할당량 소진, 명시적 폐기, 모듈 제거, 그 밖의 구현별 무효화 경로로 종료됩니다. 올바른 체인에서 최종 계정 상태를 확인해야 합니다.

세션을 승인하기 전에 다음을 확인합니다.

  • 체인 ID, 스마트 계정 주소, 계정 구현, 검증자 또는 모듈 주소
  • 세션 공개 키 또는 자격 증명 식별자와 개인 키 자료의 저장 위치
  • 허용되는 모든 대상, 함수 선택자, 토큰, 수신자 규칙, 네이티브 자산 한도, 호출별 또는 누적 지출 상한
  • validAfter, validUntil, nonce 규칙, 사용 횟수, 시간이 블록 타임스탬프와 다른 출처 중 무엇으로 측정되는지
  • 명시적으로 필요하지 않은 배치, 중첩 호출, delegatecall, 토큰 승인, 모듈 설치, 계정 업그레이드, ERC-1271 메시지 서명이 차단되는지
  • 누가 세션을 폐기할 수 있는지, 소유자가 독립적인 복구 경로를 유지하는지, 폐기에 Gas 또는 작동 중인 번들러나 paymaster가 필요한지

정책은 실제로 실행될 작업을 검사해야 합니다. 바깥쪽 배치 대상만 확인하면 내부 호출이 제한되지 않을 수 있고, 함수와 금액을 무시하고 수신자만 확인해도 같은 문제가 생깁니다. 강제 코드가 모든 실행 경로를 포괄해야만 제한에 의미가 있습니다.

예시

게임 지갑이 24시간 동안 지속되는 세션을 만듭니다. 검증된 게임 계약만 호출하도록 허용하고 delegatecall과 토큰 승인을 차단하며, 호출별 네이티브 자산을 0.02 ETH, 누적 지출을 20 USDC로 제한합니다. 게임은 소유자의 반복 확인 없이 허용된 동작을 제출할 수 있지만 관련 없는 NFT 이전 요청은 검증에 실패해야 합니다.

사용 전에 소유자는 계정, 체인, 모듈, 세션 공개 키, 만료, 한도, 폐기 방법을 기록합니다. 낮은 가치의 작업 한 건을 시험하고 디코딩된 호출과 계정 이벤트를 확인한 뒤 폐기를 별도로 시험합니다. 이는 설정된 경로를 확인할 뿐, 모듈에 취약점이 없거나 침해된 기기가 남은 한도까지 쓸 수 없음을 증명하지는 않습니다.

위험과 통제

  • 지나치게 넓은 정책: 와일드카드 대상, 제한 없는 선택자, 무제한 토큰 승인, 배치, delegatecall은 “제한된” 키를 소유자에 가까운 권한으로 바꿀 수 있습니다. 명시적 허용 목록을 쓰고 관리 작업을 금지해야 합니다.
  • 키 탈취: 브라우저 저장소, 로그, 백업, 확장 프로그램, 악성 코드, 공유 기기가 세션 키를 노출할 수 있습니다. 지원된다면 하드웨어 보호 또는 격리 저장을 우선하고 수명과 누적 한도를 낮게 설정합니다.
  • 잘못된 강제 로직: 계정, 검증자, 실행자, 훅이 호출을 잘못 해석하거나 다른 실행 경로를 빠뜨릴 수 있습니다. 검증된 배포, 검토된 코드, 감사, 우회 사례 테스트를 활용합니다.
  • 재생과 맥락 혼동: nonce 처리가 약하거나 의도한 체인, 계정, 모듈, 정책에 대한 바인딩이 빠지면 다른 맥락에서 재사용될 수 있습니다. 정확한 서명 도메인과 온체인 재생 방지를 확인합니다.
  • 만료에 대한 오해: validUntil은 ERC-4337 작업 한 건의 범위만 제한하고 등록된 키, 토큰 허용량, 별도 위임을 자동 제거하지 않을 수 있습니다. 만료 뒤 각 권한의 실제 상태를 확인합니다.
  • 폐기 실패: 로컬 데이터 삭제는 비밀의 복사본 한 개만 없앱니다. 계정에 문서화된 경로로 폐기하고 온체인 결과를 확인하며 충분한 Gas와 소유자 통제 대체 경로를 유지합니다.
  • 업그레이드 가능하거나 악의적인 모듈: 모듈은 강력한 실행 권한을 가질 수 있고 업그레이드는 정책 동작을 바꿀 수 있습니다. 소유자, 업그레이드 지연, 일시 중지 권한, 구현 주소, 모듈 제거 절차를 확인합니다.
  • Gas 및 후원 악용: 세션이 계정 자금을 Gas로 소비하거나 paymaster가 거부하면 사용할 수 없게 될 수 있습니다. 가능하면 수수료 동작을 제한하고 독립적인 제출 경로를 유지합니다.

세션 키 노출이 의심되면 영향을 받은 앱 사용을 중단하고 세션 식별자와 관련 거래 해시를 보존한 뒤 깨끗한 소유자 통제 기기에서 키를 폐기하거나 비활성화합니다. 그런 다음 지원되는 모든 체인의 대기 중 및 최근 작업, 토큰 승인, 설치된 모듈, 계정 업그레이드, 잔액을 조사합니다. 계정이나 모듈 설계 때문에 폐기가 신뢰할 수 없을 때만 남은 자산을 옮기십시오. 검증되지 않은 “복구” 사이트로 서두르면 손실이 커질 수 있습니다.

흔한 오해

  • “세션 키는 자산을 옮길 수 없다.” 강제 정책이 허용하는 모든 작업을 수행할 수 있으며 여기에는 전송, 스왑, 승인, 서명이 포함될 수 있습니다.
  • “ERC-4337이 세션 키 권한을 정의한다.” ERC-4337은 계정 검증과 실행 프레임워크를 제공하지만 세션 정책은 지갑 또는 모듈별로 다릅니다.
  • “짧은 만료가 최대 손실을 제한한다.” 손실은 호출별 한도, 누적 한도, 호출 빈도, Gas, 승인, 가격, 도달 가능한 모든 실행 경로에도 달려 있습니다.
  • “로그아웃하면 키가 폐기된다.” 로그아웃이 로컬 복사본을 지울 수는 있어도 온체인 등록이나 서명된 위임이 무효임을 증명하지는 않습니다.
  • “시뮬레이션이 성공하면 작업은 안전하다.” 현재 검증이 작업을 수락한다는 점은 보여도 사용자 의도, 향후 포함, 실행 성공, 최종성, 모듈 취약점 부재는 증명하지 않습니다.

관련 주제

출처

탐색

위키 검색...