2026-08-07 기준 구현 그대로

내 거래소 키는 어떻게 보관되나

자동 매매 도구를 쓰려면 결국 거래소 키를 넘겨야 하고, 그게 가장 망설여지는 지점이라는 걸 압니다. 그래서 저희가 무엇을 하고 무엇을 못 하는지 코드에 있는 그대로 적었습니다.

먼저: 저희에게 키를 맡기지 않아도 됩니다

열쇠를 맡기는 방법과, 열쇠는 회원님이 들고 저희는 심부름만 하는 방법 두 가지가 있습니다. 후자를 고르면 저희 서버에는 저희가 열 수 없는 잠긴 상자만 남습니다. 어느 쪽이든 회원님이 고르는 것이고, 고르는 대가가 무엇인지도 아래에 적었습니다.

1. 두 가지 보관 방식

vault 모드

내 PC 에만 보관

저희는 열 수 없습니다

어떻게 잠그나
브라우저가 회원님이 정한 vault 비밀번호로 키를 잠급니다. PBKDF2-SHA256 60만 회로 잠금키를 만들고 AES-GCM-256 으로 암호화합니다.
저희 서버에 남는 것
저희 서버에는 저희가 열 수 없는 암호문 덩어리만 남습니다. 요청 형식 자체에 평문 키를 담을 칸이 없고, 혹시 섞여 오면 서버가 거부합니다.
주문은 누가 서명하나
주문 서명도 브라우저 안에서 만들어집니다. 저희 서버는 이미 서명된 요청을 거래소로 전달만 합니다.
대신 감수하는 것
회원님 PC 와 브라우저가 켜져 있는 동안에만 자동 매매가 돕니다. 비밀번호를 잊으면 저희도 풀어드릴 수 없어 키를 다시 등록해야 합니다.
서버 모드 (기본값)

서버에 암호화해 보관

PC 를 꺼도 돕니다

어떻게 잠그나
서버가 XChaCha20-Poly1305 로 암호화해 저장합니다. 자격증명마다 다른 값(nonce)을 쓰고, 용도별로 한 번 더 갈라 씁니다.
저희 서버에 남는 것
복호화 키는 데이터베이스 안이 아니라 서버 환경변수에 있습니다. DB 파일만 유출돼서는 열리지 않습니다.
주문은 누가 서명하나
서버가 서명하고 주문을 냅니다. 그래서 PC 가 꺼져 있어도 규칙이 계속 돕니다.
대신 감수하는 것
대신 이 방식은 저희 서버가 키를 풀 수 있다는 뜻입니다. 그게 마음에 걸린다면 위의 vault 모드를 쓰시면 됩니다.

설정 → 키 등록 화면의 고급 항목에서 고르실 수 있습니다. 기본값은 서버 모드입니다 — PC 를 꺼도 규칙이 돌아야 하는 분이 더 많기 때문이고, 그 선택의 위험은 아래 6번에 적어두었습니다.

2. 실제 주문이 나가기까지 통과해야 하는 것

키를 넣었다고 바로 매매가 시작되지 않습니다. 아래 10개가 전부 정렬돼야 첫 주문이 나갑니다. 하나라도 비어 있으면 그 상태로 잠긴 채 멈춰 있습니다.

  1. 1키가 살아 있는가폐기한 키는 그 즉시 어떤 주문에도 쓰이지 않습니다.
  2. 2Kill Switch 가 내려가 있는가전체 / 회원 / 거래소 3단계 중 하나라도 올라가 있으면 매매가 멈춥니다.
  3. 3키 점검을 통과했는가등록한 키로 계좌 조회(읽기)가 실제로 되는지 먼저 확인합니다. 이게 실패하면 잠긴 상태로 남습니다.
  4. 4출금 권한을 뺐다고 확인했는가출금 권한 없는 키로 만들었다는 확인이 기록돼야 넘어갑니다. (아래 '저희가 검증하지 못하는 것' 참고)
  5. 5허용 IP 를 등록했는가거래소에 저희 서버 IP 만 허용해 두면, 키가 새어나가도 다른 곳에서는 쓸 수 없습니다.
  6. 6운용할 금액을 정했는가총자산이 아니라 회원님이 지정한 운용금 안에서만 움직입니다. 정하지 않으면 시작하지 않습니다.
  7. 7한도를 정했는가1회 주문 한도, 하루 주문 한도, 최소 현금 비율을 정해야 합니다.
  8. 8주문 권한을 확인했는가현물 주문 권한이 확인돼야 합니다.
  9. 9현재 정책 버전에 동의했는가정책이 바뀌면 이전 동의는 무효가 되고 다시 동의할 때까지 실주문이 잠깁니다.
  10. 10마지막 dry-run 가드위를 전부 통과해도 이 가드가 켜져 있으면 주문은 모의로만 나갑니다.

3. 키가 통째로 새어나갔다면

가장 무서운 경우를 먼저 가정해 보겠습니다. 회원님 PC 가 감염돼서 키가 그대로 빠져나갔다면 어떻게 될까요. 방어선은 한 겹이 아니라 여러 겹이고, 각 겹이 언제 무너지는지도 함께 적었습니다. 그걸 빼면 "털려도 안전하다"는 말이 되는데, 그건 사실이 아닙니다.

1층

허용 IP — 다른 곳에서는 그 키가 죽어 있습니다

거래소에 저희 서버 IP 만 허용해 두시면, 키가 그대로 유출돼도 다른 컴퓨터에서는 아무 요청도 통하지 않습니다. 거래소가 IP 를 보고 거절하기 때문입니다.

이 층이 무너질 때 저희 서버 자체가 뚫린 경우에는 요청이 허용된 IP 안에서 나가므로 이 층은 작동하지 않습니다. 그때부터는 아래 2층이 방어선입니다.

2층

출금 권한 없음 — 할 수 있는 건 거래뿐입니다

출금 권한을 뺀 키라면, 그 키를 쥔 사람이 할 수 있는 일은 거래소 안에서 사고파는 것뿐입니다. 코인이나 원화를 계좌 밖으로 빼낼 수 없습니다. 저희 코드에도 출금을 부르는 곳이 아예 없습니다.

이 층이 무너질 때 자산을 빼앗기지는 않지만 손실을 막아주지는 않습니다. 원치 않는 매매를 반복당하면 수수료와 체결 손실만큼은 줄어듭니다. 그래서 3층과 Kill Switch 가 함께 있어야 합니다.

3층

다루는 종목이 비트코인 하나입니다

저희 자동매매가 주문을 내는 종목은 KRW-BTC 하나뿐입니다. 회원님이 종목을 고르는 화면도, 다른 코인을 주문하도록 요청할 수 있는 API 도 없습니다. 이름 모를 코인이 회원님 계좌에서 매수될 일은 저희 쪽에서 생기지 않습니다.

이 층이 무너질 때 이건 '저희가 무엇을 사는가'에 대한 약속이지, 회원님 키를 쥔 제3자가 거래소에서 직접 무엇을 하는지까지 제한하지는 못합니다. 그 부분은 1층과 2층이 맡습니다.

최후

Kill Switch — 회원님이 직접, 즉시

이상하다고 느끼시면 Kill Switch 를 올려 그 자리에서 매매를 멈출 수 있습니다. 저희 승인도, 문의도, 영업시간도 필요 없습니다. 이어서 거래소에서 키를 삭제하시면 완전히 끝납니다.

이 층이 무너질 때 멈추는 것은 저희 자동매매입니다. 키가 유출된 상황이라면 Kill Switch 만으로는 부족하고, 거래소에서 그 키를 직접 삭제하셔야 합니다.

정리하면 — 키가 밖으로 새면 허용 IP 가 막고, 그마저 통과당해도 출금 권한이 없어 자산은 계좌를 벗어나지 못하며, 저희 자동매매가 손대는 종목은 비트코인 하나입니다. 그리고 이상하면 회원님이 직접 즉시 멈출 수 있습니다. 다만 1층과 2층은 회원님이 거래소에서 설정하셔야 존재합니다 — 저희가 대신 걸어드릴 수 없습니다.

4. 저희가 하지 않는 일

출금 기능이 아예 없습니다

저희 코드 어디에도 거래소 출금 API 를 부르는 곳이 없습니다. 기능을 잠가둔 게 아니라 만들지 않았습니다. 여기에 출금 권한 없는 키까지 더해지면, 설령 저희 서버가 뚫려도 코인을 빼낼 경로가 없습니다.

등록한 키를 다시 보여주지 않습니다

저장한 뒤에는 화면에도 API 응답에도 평문 키가 나오지 않습니다. 어떤 키인지 구분할 지문 끝자리만 표시됩니다.

기록에 비밀값을 남기지 않습니다

감사 기록에 남길 때 키·비밀키·토큰·비밀번호 항목은 명시적으로 지우고 저장합니다.

회원님 세션을 거래소로 흘리지 않습니다

거래소로 요청을 전달할 때 쿠키와 내부 주소 관련 헤더는 떼고 보냅니다.

5. 회원님이 직접 쥐고 있는 것

  • 언제든 멈추기Kill Switch 를 올리면 그 즉시 매매가 서지 않습니다. 저희 승인이 필요 없습니다.
  • 키 폐기폐기하면 그 키는 어떤 주문에도 쓰이지 않습니다. 거래소에서도 키를 삭제하시면 완전히 끝납니다.
  • 무슨 일이 있었는지 직접 확인키 등록·점검·사용 이력을 회원님이 직접 조회할 수 있습니다. 저희만 보는 기록이 아닙니다.

계정 자체를 지키는 장치

  • 비밀번호는 Argon2id 로 해싱해 저장합니다. 원문은 저희도 모릅니다.
  • 로그인 세션 쿠키는 자바스크립트가 읽을 수 없고(HttpOnly), 다른 사이트에서 실려 나가지 않으며(SameSite), HTTPS 에서만 오갑니다.
  • 소셜 로그인(구글·카카오)은 로그인 요청과 응답이 같은 흐름인지 매번 대조합니다.

6. 저희가 못 하는 것, 안 되는 것

보안 설명에서 좋은 얘기만 적으면 그건 광고지 설명이 아닙니다. 아래는 지금 구조의 실제 한계입니다.

가장 중요한 두 가지를 저희가 대신 걸어드릴 수 없습니다

출금 권한 제외와 허용 IP 등록은 거래소에서 회원님이 직접 하셔야 하고, 저희는 '했다'는 확인을 기록할 뿐 거래소에 물어 검증하지 못합니다. 즉 위 1층·2층 방어선은 회원님이 그 두 가지를 실제로 하셨을 때만 존재합니다. 키를 만드실 때 출금 권한 체크를 반드시 빼고, 허용 IP 를 꼭 등록해 주세요.

키 점검은 '읽기가 되는지'까지만 봅니다

등록한 키로 계좌 조회가 되는지 확인하는 것이고, 그 키에 어떤 권한이 붙어 있는지 훑는 검사가 아닙니다.

서버 모드는 저희가 풀 수 있습니다

암호화해 두었지만 주문을 대신 내려면 저희 서버가 키를 풀 수 있어야 합니다. 즉 저희 서버가 뚫리면 그 키는 위험합니다(다만 출금 권한이 없다면 빼낼 수는 없습니다). 이 위험까지 지우고 싶다면 vault 모드를 쓰세요.

외부 보안 감사를 받은 적이 없습니다

위 내용은 저희가 만든 구조를 저희가 설명한 것이고, 제3자 기관의 점검을 받은 결과가 아닙니다. 그 사실을 감추지 않겠습니다.

아직 베타입니다

지금은 모든 회원이 모의 거래로 고정돼 있어 실제 주문이 나가지 않습니다. 실거래를 여는 시점에는 다시 공지하겠습니다.

키를 넣기 전에 먼저 확인해 보세요

가입도 키 등록도 없이, 전략이 과거 데이터에서 어떻게 움직였는지 바로 돌려보실 수 있습니다. 납득이 된 다음에 키를 생각하셔도 늦지 않습니다.

이 페이지는 서비스의 보안 구조를 설명한 것이며, 어떤 경우에도 자산의 안전이나 수익을 보장하지 않습니다. 암호화폐 거래에는 원금 손실 위험이 있고, 거래소 자체의 사고나 회원님 기기의 감염처럼 저희가 통제할 수 없는 위험도 존재합니다. 투자 권유가 아닙니다.