‹ 블로그 목록

읽기 전용 API 키는 왜 아직도 무섭게 느껴질까 — 거래소 권한 화면이 설명해 주지 않는 것

칼럼 · · 사토시노트 편집실

다른 언어: English

거래소 연동을 안내하면서 가장 많이 듣는 말은 "읽기 전용이라도 키를 주는 게 불안해요"입니다. 우리는 이 불안이 당연하다고 생각합니다. 거래소의 API 키 발급 화면은 "자산조회·주문조회·출금" 같은 체크박스만 늘어놓고, 각각을 켜면 남이 내 계좌로 무엇까지 할 수 있는지는 어디에도 적어 주지 않기 때문입니다. 이 칼럼은 그 빈칸을 채우려고 씁니다. 안심하라는 글이 아니라, 무엇이 막혀 있고 무엇이 안 막혀 있는지 적는 글입니다.

한눈에 보기

  • 거래소 API 키의 권한은 조회·거래·출금 세 층으로 나뉘고, 조회(읽기 전용)만 켠 키로는 잔고·체결을 읽을 수만 있을 뿐 주문도 출금도 할 수 없습니다. 허용 IP 등록은 두 번째 자물쇠입니다.
  • 사토시노트(토큰포스트가 운영하는 무료 암호화폐 자산관리 앱, 거래소 18곳 읽기 전용 API 연동)는 키를 저장하기 전에 먼저 시험하고, 출금 권한이 켜진 키는 거부하며, 키는 AES-256-GCM으로 암호화해 서버 환경변수의 열쇠로만 풉니다.
  • 그래도 남는 한계(거래소 화면이 권한을 설명하지 않는 점, 서비스 쪽 사고)는 숨기지 않고 적었습니다. 어떤 서비스에든 던질 질문 세 가지를 끝에 정리했습니다.

권한은 세 층이다

거래소마다 이름은 다르지만 API 권한은 결국 세 층으로 나뉩니다.

층할 수 있는 것키가 새면
조회잔고·체결 내역을 읽는다내 계좌 상태가 남에게 보인다
주문사고판다내 돈으로 엉뚱한 거래를 할 수 있다
출금코인·돈을 밖으로 보낸다돈이 빠져나간다

돈이 계좌 밖으로 나가는 길은 출금 권한 하나뿐입니다. 조회만 켠 키가 새어 나가면 할 수 있는 일은 내 잔고를 보는 것까지입니다. 그게 아무것도 아니라는 뜻은 아닙니다. 잔고가 보이는 것 자체가 정보 유출이고, 그래서 뒤에 적을 두 번째 자물쇠가 필요합니다. 다만 "키를 주면 돈을 잃는다"는 걱정과 "키를 주면 잔고를 들킨다"는 걱정은 크기가 다릅니다. 체크박스 하나가 그 둘을 가릅니다.

IP 등록이 두 번째 자물쇠다

업비트·빗썸처럼 키를 만들 때 IP 주소 등록을 요구하는 거래소가 있습니다. 등록한 IP가 아니면 그 키로 하는 호출은 전부 막힙니다. 귀찮은 절차처럼 보이지만, 조회 권한의 유출 걱정을 거의 지워 주는 장치입니다. 키가 새도 그 IP 밖에서는 잔고를 읽을 수 없으니까요.

사토시노트는 여러분 폰이 아니라 우리 서버가 대신 거래소를 호출합니다. 그래서 연동 화면에 "거래소에 등록할 IP 주소"와 "IP 복사하기" 단추가 있고, 그 서버 IP를 거래소에 등록하게 안내합니다. 등록을 안 하면 호출 자체가 막히는 거래소에서는 이 단계가 필수입니다.

우리가 키를 받을 때 하는 일

사토시노트는 보기만 하는 서비스라, 출금 권한이 있는 키는 받지 않는 것을 원칙으로 합니다. 연동 화면의 "저장 전에 시험해 보기"가 그 원칙을 실제로 집행합니다.

  1. 키를 저장하지 않고 잔고(또는 최근 체결)를 한 번만 읽어 키가 맞는지 봅니다.
  2. 권한을 API로 돌려주는 거래소(바이낸스·바이비트·비트겟·코인베이스)에는 거래·출금 권한이 켜져 있는지 묻습니다. 출금 권한이 켜져 있으면 화면이 저장 단추를 잠급니다. 거래 권한은 저장을 막진 않지만 끄라고 안내합니다.
  3. 권한을 API로 물을 수 없는 거래소(업비트·빗썸 등)는 "조회 권한만 켰어요(출금·주문 끔)" 체크를 해야 저장됩니다.

저장된 키는 서버에서 AES-256-GCM으로 암호화해 보관하고, 암호화 열쇠는 데이터베이스가 아니라 서버 환경 설정에 따로 둡니다. 연결을 해제하면 그 행을 지웁니다.

그래도 남는 것

여기까지가 우리가 하는 일이고, 아래는 우리가 못 하는 일입니다.

  • 권한을 API로 물을 수 없는 거래소에서는 "조회만 켰어요" 체크, 즉 사용자의 말에 기댑니다. 출금 권한이 켜진 키를 사용자가 체크하고 넣으면 우리는 알 수 없습니다.
  • 암호화 열쇠와 암호문이 같은 서버에 있습니다. 서버가 통째로 뚫리면 암호화가 모든 것을 막아 주진 않습니다. 그래서 "출금 권한 없는 키만 받는다"가 암호화보다 앞에 있는 첫 번째 방어입니다.
  • 거래소마다 권한 이름이 다르고(자산조회·잔고조회·읽기·Read), 어떤 거래소는 체결을 읽는 데 주문 쪽 권한까지 요구합니다. 우리 가이드는 거래소별로 어떤 체크를 켜야 하는지 적어 두지만, 거래소가 화면을 바꾸면 가이드가 뒤처질 수 있습니다.

그래서 어떤 서비스에든 물어볼 세 가지

키를 넣기 전에 서비스 쪽에 세 가지를 확인해 보시길 권합니다. 사토시노트를 포함해서요.

  1. 출금 권한 없이도 되는가. 출금이 필요하다는 자산관리 서비스는 자산관리가 아닙니다.
  2. IP를 묶을 수 있는 거래소에서 IP를 알려 주는가.
  3. 출금 권한이 켜진 키를 거절하는가, 아니면 그냥 받는가.

세 번째가 서비스의 태도를 가장 잘 보여 줍니다. 받을 수 있는 권한을 일부러 안 받는 서비스와 주는 대로 받는 서비스는 사고가 났을 때 결과가 다릅니다.

자주 묻는 질문

읽기 전용 API 키로 코인을 빼 갈 수 있나요?

없습니다. 조회 권한만 켠 키는 잔고와 체결 내역을 읽을 수만 있고, 주문·출금은 거래소가 권한 층에서 막습니다. 키가 새더라도 할 수 있는 일은 "내 잔고를 보는 것"까지입니다.

사토시노트는 받은 키를 어떻게 다루나요?

저장하기 전에 거래소에 조회 요청을 보내 키를 시험하고, 출금 권한이 켜진 키는 등록을 거부합니다. 통과한 키는 AES-256-GCM으로 암호화해 두고, 푸는 열쇠는 서버 환경변수에만 있습니다.

키를 맡기기 전에 어떤 서비스에든 물어볼 것은?

셋입니다. 출금 권한이 켜진 키를 거부하는가, 키를 어떻게 암호화해 어디에 두는가, 허용 IP를 어떤 값으로 등록하라고 안내하는가. 셋 중 하나라도 답이 없으면 키를 넣지 않는 편이 낫습니다.


이 글은 사토시노트 팀의 생각을 적은 칼럼입니다. 특정 거래소나 서비스를 권하지 않습니다. 거래소별로 어떤 권한을 켜야 하는지는 설정 › 자산 연동의 거래소 카드와 거래소 연동 가이드에 적어 두었습니다.

‹ 블로그 목록

사토시노트는 토큰포스트가 만든 무료 암호화폐 자산관리 앱이에요. 거래소 13곳의 자산·손익·거래 기록을 한 화면에 모으고, 하이퍼리퀴드·라이터·dYdX·파시피카 고수 트레이더가 지금 무엇을 들고 있는지 보여 줍니다. 사토시노트 열기