지갑 서명과 토큰 승인의 위험
디파이 화면에서 '보상 받기'를 누르자 지갑 창이 뜹니다. 가스비도 들지 않는 서명 하나가 왜 위험할까요? 이 챕터는 지갑이 묻는 서명 두 가지와, 토큰 승인이 남에게 무엇을 넘겨주는지 봅니다. 승인 사기가 흘러가는 순서와, 이미 준 승인을 확인하고 거두는 법도 살펴봅니다.
지갑이 묻는 서명은 두 가지다
2장에서는 풀에 미국 달러 같은 특정 자산과 가치를 연동해 가격이 안정되도록 설계한 가상자산입니다.스테이블코인이 1달러에 묶이는 세 방식 챕터에서 보기 S를 넣고 코인 A를 사는 거래를 봤습니다. 실제 디파이 화면에서 버튼을 누르면 지갑 창이 먼저 뜹니다. 그 창이 묻는 것은 내 거래에 서명하는 비밀 값입니다. 이것을 가진 사람이 그 코인을 옮길 수 있습니다.지갑, 개인 키, 거래소 보관 챕터에서 보기로 서명할지입니다. 개인 키와 서명은 블록체인 기초 코스의 지갑 챕터에서 다뤘습니다.
그런데 지갑이 내미는 서명은 두 종류입니다.
장부를 바꾸라는 지시(트랜잭션)에 개인 키로 하는 서명입니다. 네트워크에 퍼져 블록에 담기고, 수수료(가스)를 냅니다.은 장부를 바꾸라는 지시에 하는 서명입니다. 서명된 거래는 네트워크 전체에 퍼지고, 블록에 담겨야 실행됩니다. 그리고 이 거래를 처리하는 계산에 수수료(가스)를 냅니다.[1]
네트워크에 보내지 않는 글이나 데이터에 개인 키로 하는 서명입니다. 가스는 들지 않지만, 받은 쪽이 계약에 내면 효력이 생길 수 있습니다.은 네트워크에 보내지 않는 글이나 데이터에 하는 서명입니다. 이때 쓰는 형식은 서명한 데이터가 그 자체로는 거래가 될 수 없게 만들어져 있습니다.[2] 가스를 아끼고 거래 수를 줄여 주므로 쓰임이 늘었습니다.[3]
블록체인 기초 코스에서는 개인 키를 도장에 견줬습니다. 거래 서명은 은행 창구에 내는 이체 전표에 도장을 찍는 일입니다. 창구를 거치니 수수료가 듭니다. 어떤 메시지 서명은 위임장에 도장을 찍어 남에게 건네는 일과 같습니다. 창구에 가지 않으니 돈이 들지 않습니다. 하지만 위임장을 받은 사람은 그것을 들고 창구에 가서 내 돈을 꺼낼 수 있습니다. 다만 종이 위임장은 창구 직원이 한 번 더 확인해 줍니다. 블록체인에는 그런 직원이 없습니다.
문제는 지갑 창의 내용이 늘 읽기 쉽지는 않다는 것입니다. 거래가 계약에 넘기는 데이터는 사람이 읽기 어려운 바이트 덩어리입니다. 그래서 그 거래가 실제로 무엇을 할지 확인하기가 매우 어렵습니다.[1] 메시지 서명도 맥락 없는 문자열로만 보이는 경우가 많았습니다.[3] 이렇게 내용을 모른 채 서명하는 것을 무엇을 승인하는지 알아보지 못한 채 서명하는 것입니다. 지갑 창에 읽기 어려운 데이터만 보일 때 생깁니다.이라고 부릅니다.[1]
승인: 남이 꺼내 갈 한도를 적어 주는 일
이더리움의 토큰 표준(ERC-20)은 토큰을 옮기는 길을 둘로 나눕니다.[4] 하나는 내가 직접 보내는 길입니다. 다른 하나는 남이 내 계좌에서 꺼내 가는 길이고, 꺼내 가려면 주인이 미리 허락해야 합니다. 그 허락이 다른 주소가 내 토큰을 정한 한도까지 꺼내 가도록 허락하는 일입니다. 토큰 표준의 approve 기능입니다.(approve)입니다. 승인을 받은 주소는 내 계좌에서 여러 번, 정한 한도까지 토큰을 꺼내 갈 수 있습니다.[4] 아직 꺼내 갈 수 있는 양을 승인받은 쪽이 아직 꺼내 갈 수 있는 토큰의 양입니다. allowance라고 합니다.(allowance)라고 합니다.[4]
디파이 계약에 토큰을 넣을 때 이 길을 씁니다. 그래서 계약을 쓰려면 승인 거래와 실제 거래, 두 번의 거래가 필요합니다.[5]
매번 승인하면 번거롭고 수수료도 듭니다. 그래서 서비스는 흔히 한도를 끝없이 열어 두는 승인을 요청합니다. 한 번만 승인하고 수수료도 한 번만 내면 되기 때문입니다.[6] 이것을 한도 칸에 넣을 수 있는 가장 큰 수를 적어, 사실상 끝없이 꺼내 가게 하는 승인입니다. 기한도 없습니다.이라고 합니다. 한도 칸에 넣을 수 있는 가장 큰 수를 적어 사실상 끝이 없게 만듭니다.[4][5]
무제한 승인은 서비스를 다 쓴 뒤에도 남습니다. 서비스에서 돈을 빼 지갑으로 옮긴 뒤에도, 승인받은 쪽은 그 토큰을 쓸 수 있습니다.[6] 승인에는 기한도 없어서 몇 년 뒤에도 쓸 수 있습니다.[6] 계약에 악의적인 뒷문이 있다면, 그 계약은 승인 한도만큼 토큰을 꺼내 갈 수 있습니다. 무제한 승인이라면 지갑에 있는 그 토큰 전부입니다.[6] 승인받은 쪽이 꺼내 갈 때마다 한도는 그만큼 줄어듭니다.[4] 그래서 쓸 만큼만 승인했다면 다 쓴 뒤 남는 한도가 없습니다.
| 구분 | 쓸 만큼만 승인 | 무제한 승인 |
|---|---|---|
| 다 쓴 뒤 남는 한도 | 쓴 만큼 줄어 남지 않습니다 | 그대로 남습니다 |
| 계약이 악성이거나 뚫리면 | 남은 한도만큼 위험합니다 | 지갑에 있는 그 토큰 전부가 위험합니다 |
| 다음에 쓸 때 | 다시 승인하고 수수료를 냅니다 | 승인 없이 바로 씁니다 |
계산 과정 보기
permit: 가스 없는 서명으로 넘어가는 승인
승인도 거래라서, 가스를 낼 ETH가 있어야 합니다.[5] 이 불편을 덜려고 나온 표준이 내가 거래를 보내는 대신 서명한 메시지로 승인 한도를 바꾸게 하는 토큰 기능입니다(EIP-2612). 그 서명을 누군가 거래에 담아 계약에 내면 한도가 바뀝니다.(EIP-2612)입니다.[5] permit을 갖춘 토큰은 내가 거래를 보내는 대신 서명한 메시지로 승인 한도를 바꾸게 할 수 있습니다.[5]
메시지에는 주인, 승인받는 쪽, 한도, 마감 시각 같은 내용이 들어갑니다.[5] 누구든 이 서명을 거래에 담아 토큰 계약에 내면, 계약은 서명을 확인하고 한도를 기록합니다.[5] 마감 시각을 사실상 끝없이 먼 미래로 정할 수도 있습니다.[5]
정리하면 permit 서명 한 번으로 이런 일이 일어납니다.
- 나는 메시지에 서명만 합니다. 내 지갑에서는 거래가 나가지 않고 가스도 들지 않습니다.[5]
- 이 서명은 누구든 계약에 낼 수 있고, 내가 직접 낼 수도 있습니다.[5] 사기에서는 서명을 받은 쪽이 거래로 내고, 가스도 그쪽이 냅니다.[1][5]
- 계약이 승인 한도를 기록하면, 승인받는 쪽은 그 한도까지 내 토큰을 꺼내 갈 수 있습니다.[4]
가스비가 들지 않는 서명은 돈이 나가지 않으니 괜찮다고 여기기 쉽습니다. permit 서명은 내가 거래를 보내지 않아도 승인 한도를 바꾸게 합니다.[5] 서명 창에 승인받는 쪽(spender), 한도(value), 마감 시각(deadline)이 보이면 승인을 넘기는 서명으로 봐야 합니다.[3][5] 가스가 없다는 것은 수수료를 안 낸다는 뜻이지, 권한을 안 넘긴다는 뜻이 아닙니다.
승인 사기는 이렇게 흘러간다
미국 연방수사국(FBI)이 경고한 ‘유동성 채굴’ 사기를 사람 말로 따라가 보겠습니다.[8]
- 친해진 뒤 링크를 보냅니다. SNS나 메신저로 다가와 며칠에서 몇 주 동안 믿음을 쌓습니다. 그리고 하루 1~3% 수익을 보장한다며 앱 링크를 보냅니다.[8]
- 지갑을 연결하게 합니다. 작은 수수료를 내고 ’채굴 인증서’를 받으라며 버튼을 누르게 합니다. 지갑 화면을 흉내 낸 창이 권한 목록을 보여 줍니다. 수락하면 지갑의 돈을 무제한으로 꺼내 갈 권한이 넘어갑니다.[8]
- 가짜 수익을 보여 줍니다. 꾸며 낸 화면에 수익이 쌓이고, 피해자는 코인을 더 삽니다.[8]
- 한꺼번에 꺼내 갑니다. 알림도 허락도 없이 지갑을 비웁니다.[8]
- 돈을 더 내라고 합니다. 가짜 고객센터가 돌려받으려면 더 넣으라고 합니다. 더 넣어도 돌려받지 못합니다.[8]
FBI는 2022년 7월 이 수법의 피해액이 7,000만 달러를 넘었다고 밝혔습니다.[8] 2019년 1월부터 쌓인 액수입니다.[8] 믿음을 쌓고 꾸민 화면으로 더 넣게 하는 흐름은 디지털 사기 코스의 가짜 거래소와 같습니다. 여기에 더해 지갑에서 직접 꺼내 갈 권한까지 받아 간다는 점이 다릅니다.
국내도 다르지 않습니다. 금융감독원은 진짜 거래소처럼 꾸몄지만, 입금한 돈은 사기범 계좌로 가고 화면 잔고는 운영자가 바꿀 수 있는 사이트나 앱입니다.투자 리딩방과 가짜 거래소 챕터에서 보기가 지갑의 거래 권한 승인을 유도한 뒤 자산을 빼 간 사례가 있다고 밝혔습니다.[9] 개발사 공식 계정에 없는 ’에어드랍’이나 ’사전참여 이벤트’는 대표적인 사기·피싱 수법이라고 경고합니다.[10] 블록체인 위의 사기는 몇 분에서 몇 시간 안에 돈이 옮겨지고, 피해를 구제하기가 매우 어렵습니다.[10] 당했을 때 할 일은 디지털 사기 코스의 대처 챕터에 정리했습니다.
승인을 확인하고 거두는 법
승인은 숨겨진 기록이 아닙니다. 토큰 계약은 승인이 이뤄질 때마다 공개 기록을 남겨야 합니다.[4] 그래서 내 주소에 걸린 승인과 한도를 모아 보여 주는 웹사이트가 여럿 있습니다. 블록 탐색기에도 이런 기능이 있습니다.[6] 진짜처럼 꾸민 가짜 사이트도 있으니 웹 주소의 철자부터 확인합니다.[8]
거두는 길은 승인과 같습니다. 같은 상대에게 한도를 0으로 다시 적는 승인 거래를 보냅니다.[4] 새로 승인하면 기존 한도를 덮어쓰기 때문입니다.[4] 거래이므로 수수료가 듭니다.[6] 승인을 거둬도 이미 맡겨 둔 예치나 대출은 그대로입니다.[6] 하지만 이미 빠져나간 토큰은 승인을 거둬도 돌아오지 않습니다.[7][9]

사이트에서 지갑 ’연결 끊기’를 누르면 권한도 사라진다고 생각하기 쉽습니다. ethereum.org는 연결을 끊어도 승인은 그대로 쓰일 수 있다고 설명합니다.[6] 권한은 토큰 계약에 적혀 있어서, 한도를 0으로 바꿔야 지워집니다.
금융감독원과 FBI, 이더리움 공식 문서가 권하는 습관은 네 가지로 모입니다.
- 서명 전에 읽습니다. 계약과 거래할 때는 서명하기 전에 거래 내용을 읽습니다.[7]
- 쓸 만큼만 승인합니다. 무제한 승인 대신 그 거래에 필요한 만큼만 한도를 정합니다.[7]
- 주기적으로 확인하고 거둡니다. 자주 쓰지 않는 지갑의 승인은 거둬 둡니다.[9] FBI도 승인 확인 도구로 주기적으로 점검하라고 합니다.[8]
- 지갑을 목적별로 나눕니다. 정해진 금액을 매달처럼 일정한 주기로 나누어 넣는 방식입니다.매달 넣는 돈으로 목표까지 챕터에서 보기으로 사 모아 오래 들고 있을 지갑과, 밈코인처럼 짧게 사고파는 지갑을 따로 둡니다.[9]
네 챕터는 ’은행 없이 1달러와 이자를 만들 수 있는가’라는 질문에 대한 답입니다. 1장의 스테이블코인은 1달러를 준비자산, 빌리거나 발행한 금액보다 더 큰 가치의 담보를 맡기는 방식입니다.스테이블코인이 1달러에 묶이는 세 방식 챕터에서 보기, 규칙 가운데 하나로 약속합니다. 2장의 디파이는 신용 심사와 주문장을 초과 담보와 공식으로 대신합니다. 3장은 그 대가를 보여 줍니다. 결함을 되돌릴 창구도, 금융회사가 예금을 못 돌려주게 되면 예금보험공사가 대신 지급하는 제도입니다. 평소에 보험료를 모아 기금을 쌓아 둡니다.통장 고르기와 예금자보호 챕터에서 보기 같은 안전망도 없습니다. 4장은 그 위험이 내 지갑 앞까지 온다는 것을 보여 줍니다. 창구 직원이 하던 확인을 서명 창 앞의 내가 해야 합니다. 디파이의 높은 수익률은 은행이 대신 지던 위험을 내가 직접 지는 값입니다.
용어 정리
- 거래 서명
- 장부를 바꾸라는 지시(트랜잭션)에 개인 키로 하는 서명입니다. 네트워크에 퍼져 블록에 담기고, 수수료(가스)를 냅니다.
- 메시지 서명
- 네트워크에 보내지 않는 글이나 데이터에 개인 키로 하는 서명입니다. 가스는 들지 않지만, 받은 쪽이 계약에 내면 효력이 생길 수 있습니다.
- 블라인드 서명
- 무엇을 승인하는지 알아보지 못한 채 서명하는 것입니다. 지갑 창에 읽기 어려운 데이터만 보일 때 생깁니다.
- 토큰 승인
- 다른 주소가 내 토큰을 정한 한도까지 꺼내 가도록 허락하는 일입니다. 토큰 표준의 approve 기능입니다.
- 승인 한도
- 승인받은 쪽이 아직 꺼내 갈 수 있는 토큰의 양입니다. allowance라고 합니다.
- 무제한 승인
- 한도 칸에 넣을 수 있는 가장 큰 수를 적어, 사실상 끝없이 꺼내 가게 하는 승인입니다. 기한도 없습니다.
- permit
- 내가 거래를 보내는 대신 서명한 메시지로 승인 한도를 바꾸게 하는 토큰 기능입니다(EIP-2612). 그 서명을 누군가 거래에 담아 계약에 내면 한도가 바뀝니다.
이해도 점검
정답 0 / 3Q1처음 보는 사이트가 "가스비 없이 서명만 하면 보상을 받는다"며 지갑 서명을 요청합니다. 서명 창에는 승인받는 쪽(spender), 한도(value), 마감 시각(deadline)이 적혀 있습니다. 가장 정확한 이해는 무엇입니까?
Q2디파이 서비스를 쓰면서 스테이블코인을 무제한 승인했습니다. 지금은 서비스에서 돈을 모두 빼 내 지갑에 옮겼습니다. 맞는 설명은 무엇입니까?
Q3예전에 준 토큰 승인을 거두려고 합니다. 맞는 방법은 무엇입니까?
이 챕터의 요약
- 지갑 서명은 장부를 바꾸는 거래 서명과 네트워크에 보내지 않는 메시지 서명으로 나뉘고, 메시지 서명도 권한을 넘길 수 있습니다.
- 토큰 승인은 남이 내 토큰을 한도까지 꺼내 가게 하는 권한이고, 무제한 승인은 기한 없이 남습니다.
- 승인은 공개 기록이라 확인할 수 있고, 한도를 0으로 바꾸는 거래로 거둡니다. 연결 끊기로는 사라지지 않습니다.
출처와 신뢰도
- ATransactions · ethereum.org (이더리움 공식 문서)이더리움 프로젝트의 공식 개발 문서입니다. 거래가 계정이 보낸 암호학적 서명이 붙은 지시로 네트워크 상태를 바꾸고, 네트워크 전체에 퍼져 블록에 담겨야 하며 수수료가 든다는 설명, 서명은 보내는 사람의 개인 키로 만들어 그 사람이 허락했음을 증명한다는 설명, 계약에 넘기는 데이터 칸이 읽기 어려운 바이트라 거래가 실제로 무엇을 할지 확인하기 매우 어렵고 이것을 '블라인드 서명' 취약점이라 부른다는 설명을 가져왔습니다.본문으로
- AERC-191: Signed Data Standard · Ethereum Improvement Proposals (eips.ethereum.org)이더리움 표준 문서(Final)입니다. 서명할 데이터 앞에 0x19 바이트를 붙여, 이 형식으로 서명한 데이터는 결코 이더리움 거래가 될 수 없게 한다는 규칙을 가져왔습니다.본문으로
- AEIP-712: Typed structured data hashing and signing · Ethereum Improvement Proposals (eips.ethereum.org)이더리움 표준 문서(Final)입니다. 오프체인 메시지 서명이 가스를 아끼고 거래 수를 줄여 쓰임이 늘고 있다는 설명, 그동안 서명할 메시지가 맥락 없는 16진수 문자열로 사용자에게 보였다는 문제, 데이터를 구조와 함께 서명 창에 보여 주려는 표준의 목적을 가져왔습니다.본문으로
- AERC-20: Token Standard · Ethereum Improvement Proposals (eips.ethereum.org)이더리움 토큰 표준 문서(Final)입니다. 직접 보내는 transfer와 남이 내 대신 옮기는 transferFrom의 구분, approve가 상대(spender)에게 내 계좌에서 여러 번 한도까지 꺼내 가게 하고 다시 부르면 기존 한도를 새 값으로 덮어쓴다는 정의, allowance가 아직 꺼내 갈 수 있는 양을 돌려준다는 정의, 승인이 성공할 때마다 Approval 이벤트를 남겨야 한다는 규칙, 한도를 uint256 숫자로 받는다는 함수 형식을 가져왔습니다.본문으로
- AERC-2612: Permit Extension for EIP-20 Signed Approvals · Ethereum Improvement Proposals (eips.ethereum.org)이더리움 토큰 표준 문서(Final)입니다. 계약을 쓰려면 approve와 실제 호출 두 번의 거래가 필요하고 approve에도 가스를 낼 ETH가 있어야 한다는 문제, permit이 msg.sender 대신 서명한 메시지로 allowance를 바꾸게 하며 한도는 permit 호출이 정한다는 정의, 서명 내용이 주인·승인받는 쪽(spender)·한도·순번·마감 시각이라는 점, permit을 부르는 쪽은 어느 주소든 될 수 있고 서명한 사람이 ETH가 있으면 직접 낼 수도 있다는 점, 마감 시각을 사실상 끝나지 않게 정할 수 있다는 점, 한도를 0 또는 uint(-1)로 정하는 기존 구현 사례를 가져왔습니다.본문으로
- AHow to revoke smart contract access to your crypto funds · ethereum.org (이더리움 공식 문서)이더리움 프로젝트의 공식 안내서입니다. 악의적인 개발자가 계약에 뒷문을 두기도 한다는 점, 서비스가 요청 횟수와 수수료를 줄이려고 무제한 승인을 요청한다는 점, 무제한 승인을 받은 쪽은 사용자가 돈을 지갑으로 옮긴 뒤에도 그 토큰을 쓸 수 있다는 점, 승인에는 기한이 없다는 점, 지갑 연결을 끊어도 승인은 남는다는 점, 승인 목록을 보여 주고 취소하는 웹사이트(블록 탐색기 포함)가 있고 취소는 수수료를 내는 거래라는 점, 취소해도 예치·대출 같은 자리는 그대로라는 점을 가져왔습니다. 본문에는 도구 이름을 쓰지 않았습니다.본문으로
- AEthereum security and scam prevention · ethereum.org (이더리움 공식 문서)이더리움 프로젝트의 공식 보안 안내입니다. 이더리움 거래는 되돌릴 수 없다는 점, 계약과 거래할 때 서명 전에 거래 내용을 읽으라는 안내, 무제한 지출 한도는 지갑을 비우게 할 수 있으니 거래에 필요한 만큼만 한도를 정하라는 안내를 가져왔습니다.본문으로
- AScammers Target and Exploit Owners of Cryptocurrencies in Liquidity Mining Scam (2022. 7. 21.) · 미국 연방수사국(FBI) 인터넷범죄신고센터(IC3)수사기관의 공공 안내문(I-072122-PSA)입니다. SNS·메신저로 접근해 며칠에서 몇 주 동안 관계를 쌓고 하루 1~3% 수익을 보장한다며 유혹하는 수법, 작은 수수료를 내고 '채굴 인증서'를 받는 버튼을 누르면 지갑 화면을 흉내 낸 창이 권한 목록을 보여 주고 수락하면 무제한으로 돈을 꺼내 갈 권한이 넘어간다는 설명, 꾸민 대시보드의 가짜 수익, 알림과 허락 없이 지갑을 비우는 단계, 돈을 돌려받으려면 더 넣으라는 가짜 고객센터, 2019년 1월 이후 피해액이 7,000만 달러를 넘는다는 집계(발표일 기준), 웹 주소 철자를 확인하고 토큰 승인 확인 도구로 주기적으로 점검하라는 수칙을 가져왔습니다.본문으로
- A탈중앙화거래소(DEX)에서의 가상자산 매매 시 이용자 유의사항 안내 (2026. 6. 15. 보도자료) · 금융감독원감독기관의 보도자료와 첨부 PDF입니다. DEX에서는 스마트 계약으로 코인이 옮겨지고 기록이 블록체인에 남아 원상복구가 불가능하다는 설명, 가짜 거래소에서 지갑의 거래권한 승인을 유도한 뒤 악성 컨트랙트로 자산을 탈취한 사고 사례가 있다는 점, 자주 거래하지 않는 지갑은 거래 승인 권한을 회수하는 등 주기적으로 관리하고 지갑을 목적별로 나눠 운용하라는 유의사항을 가져왔습니다.본문으로
- A유명 가상자산거래소의 블록체인 네트워크를 사칭한 가짜 체인 사기에 주의하세요 (2026. 10. 22. 소비자경보 2026-27호) · 금융감독원감독기관의 소비자경보(주의)와 첨부 PDF입니다. 온체인 기반 가상자산 사기는 자금 이동과 탈취가 수분~수시간 안에 끝나고 피해 구제가 매우 어렵다는 점, 개발사 공식 계정에 없는 '기습출시'·'에어드랍'·'사전참여이벤트' 같은 마케팅이 대표적인 사기·피싱 수법이라는 점을 가져왔습니다.본문으로