교육 목적일 뿐 투자 또는 보안 조언이 아닙니다. 악성 서명 요청은 되돌릴 수 없는 손실로 이어질 수 있습니다.
직접 답변
지갑 서명은 개인 키 또는 스마트 계정 정책이 특정 방식으로 인코딩된 메시지를 승인했다는 암호학적 증거입니다. 검증은 해당 규칙과 정확한 바이트에 대한 서명 계정을 확인할 뿐, 서명자의 법적 신원이나 이해 여부, 웹사이트 설명의 진실성까지 증명하지 않습니다.
서명은 하나의 동일한 작업이 아닙니다. 거래 서명은 네트워크 거래를 직접 승인합니다. 오프체인 메시지는 자산 권한이 없는 로그인 확인일 수도 있고, 릴레이어가 나중에 제출할 수 있는 주문, 토큰 permit, 거버넌스 지시 등일 수도 있습니다. gas 표시가 없다고 위험이 없는 것은 아닙니다.
서명 전에 요청 유형, 읽을 수 있는 작업, 도메인 또는 예정된 검증자, 체인, 검증 컨트랙트, 주소, 금액, nonce, 만료를 확인하십시오. 설명 없는 해시, 읽을 수 없는 바이트, 예상 밖 필드, 독립 검증에 충분히 표시되지 않는 요청은 거부해야 합니다.
모든 항목을 검토해도 자산, 거래 또는 시스템의 안전이 입증되는 것은 아닙니다.
작동 방식
- 애플리케이션이 거래, 일반 메시지 또는 타입 데이터 객체를 인코딩합니다. 인코딩 데이터가 조금만 바뀌어도 다른 다이제스트가 생성됩니다.
- 지갑은 디코딩할 수 있는 내용을 보여 주고 승인을 요청합니다. 개인 키는 지갑이나 서명 장치 안에 남으며, 지갑은 다이제스트에 서명해 서명값만 반환합니다.
- 검증자는 같은 다이제스트를 재구성합니다. 외부 소유 계정은 보통 공개 키 주소를 복구하거나 대조하고, 컨트랙트 계정은 ERC-1271을 통해 현재 검증 정책을 적용할 수 있습니다.
- 검증자는 애플리케이션 규칙에 따라 결과를 해석합니다. 서버는 세션을 만들 수 있고, 컨트랙트는 permit 사용, 주문 체결, 거버넌스 상태 변경 등 승인된 호출을 실행할 수 있습니다.
- 재사용 방지는 애플리케이션별로 다릅니다. EIP-712는 타입 인코딩과 도메인 분리를 제공하지만 재사용 방지는 제공하지 않습니다. 애플리케이션이 nonce, deadline, 예정 검증자, 체인 등의 일회성 경계를 강제해야 합니다.
ERC-191은 서명 데이터를 일반 Ethereum 거래 인코딩과 구분하고 personal_sign 메시지를 포함한 형식을 정의합니다. EIP-712는 구조화 필드를 name, version, chainId, verifyingContract 등을 포함할 수 있는 도메인에 결합합니다. ERC-4361 로그인 메시지에는 도메인, URI, 체인 ID, nonce, 발급 시각 등이 있지만 서비스를 제공하는 측도 이를 검증해야 합니다.
예시
Leah는 공식 서비스에서 예상한 도메인과 URI, 새 nonce, 짧은 유효 시간을 담은 ERC-4361 로그인 요청을 받습니다. 메시지는 인증만 요구합니다. 도메인과 계정을 확인한 뒤 서명하면 서버가 이를 검증하고 세션을 만듭니다. 이 로그인 메시지 자체는 토큰 allowance나 온체인 거래를 만들지 않습니다.
가짜 사이트에서는 버튼이 여전히 “로그인”이라고 쓰였지만 지갑에는 토큰, spender, 금액, nonce, deadline이 있는 EIP-712 Permit 데이터가 표시됩니다. 이 서명으로 릴레이어가 토큰 컨트랙트 규칙에 따라 지출 권한을 만들 수 있습니다. 버튼 문구는 서명 바이트와 무관하므로 Leah는 거부해야 합니다.
위험과 통제
- 의미 위장: permit이나 주문을 로그인으로 표시할 수 있습니다. 버튼이 아니라 디코딩된 페이로드와 검증된 컨트랙트를 신뢰하십시오.
- 블라인드 서명: 원시 해시와 불투명 바이트는 내용을 검토하지 못하게 합니다. 신뢰할 수 있는 도구로 원문과 실행 경로를 재현할 수 없다면 취소하십시오.
- 잘못된 도메인: 익숙한 브랜드명은
chainId,verifyingContract, 웹 도메인, URI를 인증하지 않습니다. 각 필드와 전체 주소를 별도로 확인하십시오. - 재사용 또는 지연 실행: nonce가 사용되거나 deadline이 지날 때까지 서명 입수자가 이를 쓸 수 있습니다. 새 nonce와 짧은 기한을 사용하고 서명을 공개하지 마십시오.
- 과도한 권한: permit, 주문, 세션 키, 스마트 계정 작업은 추가 지갑 알림 없이 후속 작업을 허용할 수 있습니다. 자산, spender, 수신자, 금액, 범위, 취소 규칙을 확인하십시오.
- 서명자 침해: 하드웨어 지갑은 키 추출을 막아도 악성 메시지를 안전하게 만들지 못합니다. 시드 문구나 개인 키가 노출됐다면 계정 전체 침해로 대응하십시오.
의심스러운 요청에 서명했다면 디코딩된 페이로드와 서명을 공개하지 말고 보관하고, 사이트 연결을 끊은 뒤 정확한 방식을 파악하십시오. 온체인 승인이나 거래라면 올바른 체인의 상태를 확인하고 프로토콜이 정한 취소, nonce 무효화, 자산 이전 절차를 사용하십시오. 모든 오프체인 서명을 취소하는 공통 방법은 없으며 사이트 연결 해제만으로 무효화되지 않습니다.
흔한 오해
- “모든 서명이 자금을 이동시킨다.” 인증이나 의사 표시만 하는 서명도 있지만 나중의 자금 이동을 승인하는 것도 있습니다.
- “gas가 없으면 안전하다.” 릴레이어가 gas를 내고 서명된 permit, 주문 또는 다른 권한을 제출할 수 있습니다.
- “EIP-712가 안전을 보장한다.” 구조화 표시와 도메인 분리를 개선하지만 재사용 방지나 애플리케이션 주장 검증은 제공하지 않습니다.
- “복구된 주소가 본인의 이해와 동의를 증명한다.” 정확한 데이터와 키를 검증 규칙 아래 연결할 뿐, 법적 신원이나 이해, 자유로운 동의를 증명하지 않습니다.
- “컨트랙트 지갑 서명도 일반 계정과 같다.” ERC-1271 유효성은 현재 컨트랙트 상태와 정책에 따라 달라질 수 있어 검증자가 컨트랙트를 호출해야 합니다.
관련 주제
출처
- ERC-191: Signed Data Standard - Ethereum Improvement Proposals (확인일: 2026-08-22)
- EIP-712: Typed structured data hashing and signing - Ethereum Improvement Proposals (확인일: 2026-08-22)
- ERC-1271: Standard Signature Validation Method for Contracts - Ethereum Improvement Proposals (확인일: 2026-08-22)
- ERC-2612: Permit Extension for EIP-20 Signed Approvals - Ethereum Improvement Proposals (확인일: 2026-08-22)
- ERC-4361: Sign-In with Ethereum - Ethereum Improvement Proposals (확인일: 2026-08-22)