All
필터링 기준:
현금을 내 계정으로 입금하려면 어떻게 하나요?
계정 인증에 대한 도움이 필요합니다
왜 내 계정에 접근할 수 없나요?
암호화폐 출금 수수료가 있나요?
계정에 로그인하는 데 도움이 필요합니다
API 호출이 비공개 API 메서드 중 하나를 통해 계정에 액세스할 때마다 API 인증이 필요합니다.
예를 들어, Balance, TradeBalance, OpenOrders와 같은 계정 관리 메서드, AddOrder, CancelOrder와 같은 거래 메서드, DepositAddresses, WithdrawInfo와 같은 자금 조달 메서드는 모두 API 인증이 필요한 비공개 API 메서드입니다.
API 인증은 공개/비공개 키 쌍(총칭하여 API 키라고 함)과 SHA256 및 HMAC SHA512와 같은 해시 알고리즘을 사용하는 암호화 서명을 기반으로 합니다.
API 키의 예시는 다음과 같은 공개 및 비공개 키로 구성됩니다.
Bash
Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==이 예시는 Kraken 계정과 연결되어 있지 않으므로 사용할 수 없습니다.
암호화 서명은 API 클라이언트 코드에 의해 실시간으로 생성됩니다. API 호출을 위한 데이터는 API 비밀(API 키의 비공개 부분)을 사용하여 데이터를 안전하게 서명하는 일련의 해시 및 메시지 인증 알고리즘을 통해 전달됩니다.
API 키와 서명은 사용자 지정 HTTP 헤더 API-Key 및 API-Sign을 통해 API에 제공됩니다.
API 키는 액세스되는 계정을 식별하는 데 사용되므로 키 값은 모든 API 호출에 대해 동일합니다. 암호화 서명은 API 호출을 인증하는 데 사용되며 변수 값(예: nonce)을 사용하여 계산되므로 서명 값은 모든 API 호출에 대해 다릅니다.
API-Key 및 API-Sign HTTP 헤더의 예시는 다음과 같습니다.
API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==
API-Key 값은 위에 표시된 공개 키와 정확히 동일하지만, API-Sign 값(서명)은 위에 표시된 비공개 키와 다르며 각 API 호출마다 새로운 값으로 변경됩니다.
저희 API 문서에는 API-Sign 값이 "(URI 경로 + SHA256(nonce + POST 데이터))의 HMAC-SHA512를 사용하고 base64로 디코딩된 비밀 API 키를 사용하는 메시지 서명"이라고 명시되어 있으며, 이는 다음과 같이 여러 부분으로 나눌 수 있습니다.
변수
URI 경로 = 'https://api.kraken.com'를 제외한 API 호출의 URL.
nonce = 각 API 호출마다 값이 증가해야 하는 고유 식별자(종종 UNIX 타임스탬프이며, 이는 1970년 1월 1일 이후 초 단위(또는 더 높은 해상도의 경우 밀리초 단위)의 현재 시간입니다).
POST 데이터 = nonce 및 API 메서드 매개변수의 폼 인코딩된 이름/값 쌍.
TradeBalance 메서드 호출을 위한 변수 예시는 다음과 같습니다(값의 의미와 관계없이 모든 값이 문자열 값이라는 점에 유의하십시오).
URI path = "/0/private/TradeBalance"
nonce = "1540973848000"
POST data = "nonce=1540973848000&asset=xbt"
알고리즘
nonce와 POST 데이터의 SHA256을 계산합니다.
base64에서 API 비밀(API 키의 비공개 부분)을 디코딩합니다.
HMAC 해시로 SHA512를 사용하고 디코딩된 API 비밀을 HMAC 키로 사용하여 URI 경로와 SHA256의 HMAC를 계산합니다.
HMAC를 base64로 인코딩합니다.
위에 표시된 변수를 사용하는 알고리즘의 예시는 다음과 같습니다.
Base64Encode(HMAC-SHA512 of ("/0/private/TradeBalance" + SHA256("1540973848000nonce=1540973848000&asset=xbt")) using Base64Decode("FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==") as the HMAC key
결과는 API-Sign 값입니다.
TradeBalance API 엔드포인트에 대한 API 인증 서명을 생성하는 최소한의(오류 검사 없음) 완전한 기능의 예시는 다음과 같습니다.
Python
# Import required Python libraries
import time
import base64
import hashlib
import hmac
# Decode API private key from base64 format displayed in account management
api_secret = base64.b64decode(
"FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ=="
)
# Variables (API endpoint, nonce and HTTP POST data)
api_path = "/0/private/TradeBalance"
api_nonce = str(int(time.time() * 1000))
api_post = "nonce=" + api_nonce + "&asset=xbt"
# Cryptographic hash algorithms
api_sha256 = hashlib.sha256(api_nonce.encode('utf-8') + api_post.encode('utf-8'))
api_hmac = hmac.new(
api_secret,
api_path.encode('utf-8') + api_sha256.digest(),
hashlib.sha512
)
# Encode signature into base64 format used in API-Sign value
api_signature = base64.b64encode(api_hmac.digest())
# API authentication signature for use in API-Sign HTTP header
print(api_signature.decode())NodeJS
Bash
// Import required NodeJS libraries
const crypto = require('crypto');
// Decode API private key from base64 format displayed in account management
const apiSecret = Buffer.from(
'FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==',
'base64'
);
// Variables (API endpoint, nonce and HTTP POST data)
const apiPath = '/0/private/TradeBalance';
const apiNonce = Date.now().toString();
const apiPost = `nonce=${apiNonce}&asset=xbt`;
// Cryptographic hash algorithms
const apiSha256 = crypto.createHash('sha256').update(`${apiNonce}${apiPost}`).digest();
const apiSha512 = crypto.createHmac('sha512', apiSecret).update(apiPath).update(apiSha256).digest();
// Encode signature into base64 format used in API-Sign value
const apiSignature = apiSha512.toString('base64');
// API authentication signature for use in API-Sign HTTP header
console.log(apiSignature);PHP
Bash
// Decode API private key from base64 format displayed in account management
$apiSecret = base64_decode('FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==');
// Variables (API endpoint, nonce and HTTP POST data)
$apiPath = '/0/private/TradeBalance';
$apiNonce = explode(' ', microtime());
$apiNonce = $apiNonce[1] . substr($apiNonce[0], 2, 3);
$apiPost = "nonce={$apiNonce}&asset=xbt";
// Cryptographic hash algorithms
$apiSha256 = hash('sha256', $apiNonce . $apiPost, true);
$apiSha512 = hash_hmac('sha512', $apiPath . $apiSha256, $apiSecret, true);
// Encode signature into base64 format used in API-Sign value
$apiSignature = base64_encode($apiSha512);
// API authentication signature for use in API-Sign HTTP header
print $apiSignature;