ব্যক্তিগত এন্ডপয়েন্টগুলির জন্য প্রমাণীকরণ অ্যালগরিদম কী?

সর্বশেষ আপডেট: ১ এপ্রি, ২০২৫

যখনই একটি API কল ব্যক্তিগত API পদ্ধতিগুলির মধ্যে একটির মাধ্যমে একটি অ্যাকাউন্ট অ্যাক্সেস করে, তখনই API প্রমাণীকরণ প্রয়োজন হয়।

উদাহরণস্বরূপ, ব্যালেন্স (Balance), ট্রেডব্যালেন্স (TradeBalance) এবং ওপেনঅর্ডারস (OpenOrders)-এর মতো অ্যাকাউন্ট ম্যানেজমেন্ট পদ্ধতিগুলি; অ্যাডঅর্ডার (AddOrder) এবং ক্যানসেলঅর্ডার (CancelOrder)-এর মতো ট্রেডিং পদ্ধতিগুলি; এবং ডিপোজিটঅ্যাড্রেসেস (DepositAddresses) এবং উইথড্রইনফো (WithdrawInfo)-এর মতো ফান্ডিং পদ্ধতিগুলি সবই ব্যক্তিগত API পদ্ধতি যা API প্রমাণীকরণের প্রয়োজন হবে।

API কী এবং ক্রিপ্টোগ্রাফিক স্বাক্ষর

API প্রমাণীকরণ একটি পাবলিক/প্রাইভেট কী জোড়ার (সম্মিলিতভাবে একটি API কী হিসাবে পরিচিত) উপর ভিত্তি করে তৈরি এবং SHA256 ও HMAC SHA512-এর মতো হ্যাশ অ্যালগরিদম ব্যবহার করে একটি ক্রিপ্টোগ্রাফিক স্বাক্ষর ব্যবহার করে।

একটি উদাহরণ API কী নিম্নলিখিতগুলির মতো একটি পাবলিক এবং প্রাইভেট কী নিয়ে গঠিত হবে:

bash

Bash

Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
 
 Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==

মনে রাখবেন যে এই উদাহরণগুলি ব্যবহার করা যাবে না কারণ এগুলি কোনও ক্র্যাকেন অ্যাকাউন্টের সাথে যুক্ত নয়।

ক্রিপ্টোগ্রাফিক স্বাক্ষরগুলি API ক্লায়েন্ট কোড দ্বারা রিয়েল টাইমে তৈরি করা হয়। API কলের ডেটা হ্যাশ এবং মেসেজ প্রমাণীকরণ অ্যালগরিদমগুলির একটি সিরিজের মাধ্যমে পাস করা হয় যা API গোপনীয়তা (API কী-এর ব্যক্তিগত অংশ) ব্যবহার করে ডেটা সুরক্ষিতভাবে স্বাক্ষর করে।

HTTP হেডার

API কী এবং স্বাক্ষর কাস্টম HTTP হেডার API-Key এবং API-Sign এর মাধ্যমে API-কে সরবরাহ করা হয়।

API কী ব্যবহার করা হয় কোন অ্যাকাউন্ট অ্যাক্সেস করা হচ্ছে তা সনাক্ত করতে, তাই প্রতিটি API কলের জন্য কী মান অভিন্ন। ক্রিপ্টোগ্রাফিক স্বাক্ষর API কল প্রমাণীকরণ করতে ব্যবহৃত হয় এবং পরিবর্তনশীল মান (যেমন ননস) ব্যবহার করে গণনা করা হয়, তাই প্রতিটি API কলের জন্য স্বাক্ষরের মান ভিন্ন হয়।

API-Key এবং API-Sign HTTP হেডারগুলির উদাহরণগুলি নিম্নরূপ:

  • এপিআই-কী: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y

  • এপিআই-সাইন: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==

মনে রাখবেন যে API-Key মানটি উপরে দেখানো পাবলিক কী-এর মতোই, কিন্তু API-Sign মান (স্বাক্ষর) উপরে দেখানো প্রাইভেট কী থেকে ভিন্ন এবং প্রতিটি API কলের জন্য একটি নতুন মানে পরিবর্তিত হবে।

স্বাক্ষর সিউডো কোড

আমাদের API ডকুমেন্টেশন বলে যে API-Sign মানটি হল "HMAC-SHA512 ব্যবহার করে একটি বার্তা স্বাক্ষর (URI পাথ + SHA256(ননস + POST ডেটা)) এবং base64 ডিকোড করা গোপন API কী", যা নিম্নলিখিতভাবে কয়েকটি স্বতন্ত্র অংশে বিভক্ত করা যেতে পারে:

ভেরিয়েবল

  • URI পাথ = API কলের URL, 'https://api.kraken.com' ছাড়া।

  • ননস = একটি অনন্য শনাক্তকারী যা প্রতিটি API কলের সাথে মান বৃদ্ধি করতে হবে (প্রায়শই একটি UNIX টাইমস্ট্যাম্প, যা 1লা জানুয়ারী 1970 সাল থেকে সেকেন্ডে (বা উচ্চতর রেজোলিউশনের জন্য মিলিসেকেন্ডে) বর্তমান সময়)।

  • POST ডেটা = ননস এবং API পদ্ধতির প্যারামিটারগুলির ফর্ম এনকোড করা নাম/মান জোড়া।

TradeBalance পদ্ধতিতে একটি কলের জন্য ভেরিয়েবলগুলির উদাহরণগুলি নিম্নরূপ (মনে রাখবেন যে মানগুলি কী প্রতিনিধিত্ব করে তা নির্বিশেষে সমস্ত মান স্ট্রিং মান):

  • URI পাথ = "/0/private/TradeBalance"

  • ননস = "1540973848000"

  • POST ডেটা = "nonce=1540973848000&asset=xbt"

অ্যালগরিদম

  • ননস এবং পোস্ট ডেটার SHA256 গণনা করুন।

  • বেস64 থেকে API সিক্রেট (API কী-এর ব্যক্তিগত অংশ) ডিকোড করুন।

  • URI পাথ এবং SHA256-এর HMAC গণনা করুন, HMAC হ্যাশ হিসাবে SHA512 এবং ডিকোড করা API সিক্রেটকে HMAC কী হিসাবে ব্যবহার করে।

  • HMAC-কে বেস64-এ এনকোড করুন।

উপরে দেখানো ভেরিয়েবল ব্যবহার করে অ্যালগরিদমের একটি উদাহরণ নিচে দেওয়া হলো:

  • 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

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())


নোডজেএস

bash

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);


পিএইচপি

bash

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;

আরও সাহায্যের প্রয়োজন?