ToolDeck

HMAC জেনারেটর

SHA-256, SHA-384 বা SHA-512 দিয়ে HMAC স্বাক্ষর তৈরি করুন

অ্যালগরিদম

বার্তা

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ

গোপন কী

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ

HMAC স্বাক্ষর

HMAC স্বাক্ষর এখানে দেখাবে…

HMAC কী?

HMAC (Hash-based Message Authentication Code) হলো RFC 2104-এ সংজ্ঞায়িত একটি ক্রিপ্টোগ্রাফিক কনস্ট্রাকশন যা একটি হ্যাশ ফাংশনকে একটি গোপন কী-এর সাথে মিলিয়ে একটি নির্দিষ্ট আকারের প্রমাণীকরণ ট্যাগ তৈরি করে। সাধারণ হ্যাশের মতো নয়, যা যে কেউ গণনা করতে পারে — HMAC কেবল তাদের দ্বারা তৈরি ও যাচাই করা যায় যারা গোপন কীটি ভাগ করে নেয়। HMAC হলো একটি বার্তার অখণ্ডতা ও সত্যতা উভয়ই যাচাই করার মানক পদ্ধতি — এটি নিশ্চিত করে যে তথ্য পরিবর্তিত হয়নি এবং একটি বিশ্বস্ত প্রেরক দ্বারা তৈরি হয়েছে।

HMAC অ্যালগরিদম যেকোনো পুনরাবৃত্তিমূলক হ্যাশ ফাংশনের সাথে কাজ করে: SHA-256, SHA-384, SHA-512 এবং এমনকি পুরনো SHA-1 বা MD5। ফলস্বরূপ কনস্ট্রাকশনকে এর অন্তর্নিহিত হ্যাশ দ্বারা চিহ্নিত করা হয় — HMAC-SHA256, HMAC-SHA384 বা HMAC-SHA512। যেহেতু HMAC-এর নিরাপত্তা প্রমাণ হ্যাশ ফাংশনটির collision-resistant হওয়া এবং কিছু pseudorandom বৈশিষ্ট্য থাকার উপর নির্ভর করে, তাই SHA-2 পরিবারের অ্যালগরিদমগুলো নতুন সিস্টেমের জন্য প্রস্তাবিত পছন্দ। HMAC-SHA256 সর্বাধিক ব্যবহৃত ভ্যারিয়েন্ট — AWS Signature V4, Stripe webhooks, GitHub webhook secrets, Slack request signing এবং JSON Web Tokens (HS256)-এ ব্যবহৃত হয়।

HMAC-এর ডিজাইনে একটি গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে যা সাধারণ হ্যাশিংয়ে নেই: length-extension আক্রমণের বিরুদ্ধে প্রতিরোধ। শুধু SHA-256 দিয়ে, যে আক্রমণকারী H(message) জানে সে মূল বার্তা না জেনেই H(message || attacker_data) গণনা করতে পারে। HMAC-এর দ্বি-হ্যাশিং কাঠামো (ভিন্ন প্যাডেড কী সহ ভেতরের হ্যাশ ও বাইরের হ্যাশ) এই আক্রমণ সম্পূর্ণরূপে প্রতিরোধ করে। এ কারণেই API স্বাক্ষর স্কিমগুলো বার্তায় গোপন কী যুক্ত করে হ্যাশ করার পরিবর্তে HMAC ব্যবহার করে।

অনলাইন HMAC জেনারেটর কেন ব্যবহার করবেন?

HMAC স্বাক্ষর গণনা করতে সাধারণত কোড লেখা বা CLI টুল ব্যবহার করতে হয়। এই ব্রাউজার-ভিত্তিক HMAC জেনারেটর আপনাকে কোনো সফটওয়্যার ইনস্টল বা টার্মিনালে না গিয়েই তাৎক্ষণিকভাবে HMAC-SHA256, HMAC-SHA384 ও HMAC-SHA512 স্বাক্ষর তৈরি করতে দেয়।

তাৎক্ষণিক HMAC গণনা
আপনার বার্তা ও গোপন কী দিন, হ্যাশ অ্যালগরিদম বেছে নিন এবং সঙ্গে সঙ্গে HMAC স্বাক্ষর পান। Web Crypto API গণনাটি আপনার ব্রাউজারে নেটিভলি পরিচালনা করে।
🔒
গোপনীয়তা-প্রথম প্রক্রিয়াকরণ
আপনার বার্তা ও গোপন কী আপনার ডিভাইস থেকে বের হয় না। সমস্ত HMAC গণনা Web Crypto API-এর মাধ্যমে স্থানীয়ভাবে চলে — কোনো সার্ভার অনুরোধ নেই, লগিং নেই, তথ্য সংরক্ষণ নেই।
📋
একাধিক অ্যালগরিদম সমর্থন
এক ক্লিকে HMAC-SHA256, HMAC-SHA384 ও HMAC-SHA512-এর মধ্যে স্যুইচ করুন। আপনার ব্যাকএন্ড বাস্তবায়ন মিলে কিনা যাচাই করতে অ্যালগরিদম জুড়ে আউটপুট তুলনা করুন।
🔍
কোনো অ্যাকাউন্ট বা ইনস্টলেশন নেই
যেকোনো আধুনিক ব্রাউজারে কাজ করে — Chrome, Firefox, Safari, Edge। কোনো সাইন-আপ নেই, কোনো এক্সটেনশন নেই, কোনো CLI সেটআপ নেই। পৃষ্ঠাটি খুলুন এবং HMAC স্বাক্ষর তৈরি শুরু করুন।

HMAC জেনারেটরের ব্যবহারের ক্ষেত্র

ফ্রন্টএন্ড ডেভেলপার — Webhook স্বাক্ষর যাচাইকরণ
Stripe, GitHub ও Shopify HMAC-SHA256 দিয়ে webhook পেলোড স্বাক্ষর করে। উন্নয়নের সময় এই টুলটি ব্যবহার করে একটি পেলোড ও গোপন কী থেকে প্রত্যাশিত স্বাক্ষর গণনা করুন, তারপর HTTP হেডারের স্বাক্ষরের সাথে তুলনা করুন।
ব্যাকএন্ড ইঞ্জিনিয়ার — API অনুরোধ স্বাক্ষর
AWS Signature V4 স্বাক্ষর প্রক্রিয়ার একাধিক পর্যায়ে HMAC-SHA256 প্রয়োজন। স্বাক্ষর অমিল ডিবাগ করতে এবং মধ্যবর্তী গণনার ধাপ যাচাই করতে উন্নয়নের সময় রেফারেন্স HMAC মান তৈরি করুন।
DevOps — গোপন কী পরিবর্তন যাচাইকরণ
Webhook গোপন কী বা API স্বাক্ষর কী পরিবর্তন করার সময়, পুরানো কী মেয়াদ শেষ হওয়ার আগে আপনার অ্যাপ্লিকেশন রূপান্তরটি সঠিকভাবে পরিচালনা করে কিনা নিশ্চিত করতে পুরানো ও নতুন উভয় কী দিয়ে HMAC স্বাক্ষর গণনা করুন।
QA ইঞ্জিনিয়ার — স্বাক্ষর পরীক্ষার ভেক্টর
আপনার প্রমাণীকরণ মিডলওয়্যারের জন্য রিগ্রেশন পরীক্ষা তৈরি করতে পরিচিত ইনপুট ও কী দিয়ে HMAC পরীক্ষার ভেক্টর তৈরি করুন। যাচাই করুন যে আপনার বাস্তবায়ন খালি বার্তা, Unicode ইনপুট ও দীর্ঘ কী সঠিকভাবে পরিচালনা করে।
ডেটা ইঞ্জিনিয়ার — পাইপলাইন বার্তা প্রমাণীকরণ
ইভেন্ট-চালিত পাইপলাইনে (Kafka, SQS) বার্তায় HMAC স্বাক্ষর সংযুক্ত করুন, যাতে সার্ভিসের মধ্যে পরিবহনের সময় বার্তাগুলো পরিবর্তিত হয়নি তা যাচাই করা যায়।
শিক্ষার্থী — ক্রিপ্টোগ্রাফি কোর্সওয়ার্ক
HMAC নিয়ে পরীক্ষা করুন বুঝতে যে বার্তা বা কী-এর একটি অক্ষর পরিবর্তন করলে সম্পূর্ণ ভিন্ন স্বাক্ষর কীভাবে তৈরি হয়। একটি গোপন কী কী পার্থক্য আনে তা পর্যবেক্ষণ করতে HMAC আউটপুটকে সাধারণ SHA-256 আউটপুটের সাথে তুলনা করুন।

HMAC বনাম সাধারণ হ্যাশ বনাম এনক্রিপশন

HMAC, সাধারণ হ্যাশিং ও এনক্রিপশন ভিন্ন ভিন্ন উদ্দেশ্যে কাজ করে। HMAC বার্তার প্রমাণীকরণ প্রদান করে — প্রমাণ যে বার্তাটি গোপন কী-সম্পন্ন কেউ তৈরি করেছে এবং এটি পরিবর্তিত হয়নি। সাধারণ হ্যাশ অখণ্ডতা প্রদান করে কিন্তু প্রমাণীকরণ নয়। এনক্রিপশন গোপনীয়তা প্রদান করে। নিচের সারণি পার্থক্যগুলো স্পষ্ট করে।

বৈশিষ্ট্যHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

HMAC অ্যালগরিদম তুলনা

HMAC যেকোনো হ্যাশ ফাংশন ব্যবহার করতে পারে, তবে অন্তর্নিহিত অ্যালগরিদমের পছন্দ আউটপুটের আকার, নিরাপত্তার মাত্রা ও ব্রাউজার সামঞ্জস্যতা নির্ধারণ করে। নতুন সিস্টেমের জন্য HMAC-SHA256 সবচেয়ে সাধারণ পছন্দ। নিচের সারণি আপনি যে ভ্যারিয়েন্টগুলো সম্মুখীন হতে পারেন তা তুলনা করে।

অ্যালগরিদমডাইজেস্টের আকারহেক্সের দৈর্ঘ্যওয়েব ক্রিপ্টোসবচেয়ে উপযুক্ত
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

HMAC অভ্যন্তরীণভাবে কীভাবে কাজ করে

HMAC অন্তর্নিহিত হ্যাশ ফাংশনটি দুটি ভিন্ন কী-ডেরাইভড প্যাড দিয়ে দুইবার প্রয়োগ করে। কনস্ট্রাকশনটি RFC 2104-এ সংজ্ঞায়িত এবং মানক ক্রিপ্টোগ্রাফিক অনুমানের অধীনে PRF (pseudorandom function) হিসেবে প্রমাণিত। কীটি প্রথমে প্যাড করা হয় বা হ্যাশ ফাংশনের ব্লক আকারের সাথে মেলাতে হ্যাশ করা হয় (SHA-256-এর জন্য 64 বাইট, SHA-512-এর জন্য 128 বাইট)।

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

অ্যালগরিদমটি প্যাডেড কীকে একটি ভেতরের প্যাড কনস্ট্যান্ট (ipad, 0x36 বারবার) দিয়ে XOR করে, বার্তার সাথে যুক্ত করে এবং ফলাফল হ্যাশ করে। তারপর প্যাডেড কীকে একটি বাইরের প্যাড কনস্ট্যান্ট (opad, 0x5C বারবার) দিয়ে XOR করে, ভেতরের হ্যাশ আউটপুটের সাথে যুক্ত করে এবং আবার হ্যাশ করে। এই দ্বি-হ্যাশিং কাঠামোই length-extension আক্রমণ প্রতিরোধ করে এবং নিশ্চিত করে যে গোপন কী-এর জ্ঞান ছাড়া HMAC আউটপুট গণনা করা যায় না।

HMAC কোডের উদাহরণ

HMAC প্রতিটি প্রধান ভাষা ও রানটাইমে নেটিভলি সমর্থিত। Web Crypto API কোনো লাইব্রেরি ছাড়াই ব্রাউজারে HMAC-SHA256, HMAC-SHA384 ও HMAC-SHA512 সরবরাহ করে। নিচের উদাহরণগুলো webhook যাচাইকরণ ও constant-time তুলনাসহ বাস্তব ব্যবহারের ধরন দেখায়।

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

প্রায়শই জিজ্ঞাসিত প্রশ্ন

HMAC ও সাধারণ হ্যাশের মধ্যে পার্থক্য কী?
একটি সাধারণ হ্যাশ (SHA-256, MD5) শুধুমাত্র একটি বার্তা ইনপুট হিসেবে নেয় এবং একটি ডাইজেস্ট তৈরি করে যা যে কেউ গণনা করতে পারে। HMAC একটি বার্তা ও একটি গোপন কী উভয়ই নেয়, এমন একটি স্বাক্ষর তৈরি করে যা কেবল কী-সম্পন্ন কেউ তৈরি বা যাচাই করতে পারে। এর মানে HMAC অখণ্ডতা পরীক্ষার পাশাপাশি প্রমাণীকরণও (প্রেরকের পরিচয়ের প্রমাণ) প্রদান করে। একটি সাধারণ হ্যাশ কেবল প্রমাণ করে যে তথ্য পরিবর্তিত হয়নি, কে তা তৈরি করেছে নয়।
HMAC-SHA256 কি নিরাপদ?
হ্যাঁ। ২০২৬ সালের হিসাবে HMAC-SHA256 নিরাপদ বলে বিবেচিত। এর নিরাপত্তা SHA-256-এর pseudorandom বৈশিষ্ট্য ও HMAC কনস্ট্রাকশনের (RFC 2104) উপর নির্ভর করে। HMAC-SHA256-এর বিরুদ্ধে কোনো ব্যবহারিক আক্রমণ প্রদর্শিত হয়নি। এমনকি HMAC-MD5 ও HMAC-SHA1 বাস্তবে নিরাপদ থাকে কারণ HMAC-এর নিরাপত্তার জন্য অন্তর্নিহিত হ্যাশের পূর্ণ collision resistance প্রয়োজন নেই, তবে নতুন সিস্টেমের জন্য SHA-2 ভ্যারিয়েন্ট প্রস্তাবিত।
Webhook পেলোড এনক্রিপ্ট না করে কেন HMAC ব্যবহার করে?
Webhook পেলোডে সাধারণত এমন তথ্য থাকে যা প্রাপক আগে থেকেই প্রত্যাশা করে — অর্ডারের বিবরণ, ইভেন্ট বিজ্ঞপ্তি, স্ট্যাটাস আপডেট। লক্ষ্য হলো তথ্য লুকানো (গোপনীয়তা) নয়, বরং প্রমাণ করা যে এটি বৈধ প্রেরকের কাছ থেকে এসেছে এবং পরিবহনের সময় পরিবর্তিত হয়নি (সত্যতা ও অখণ্ডতা)। HMAC এটি সর্বনিম্ন ওভারহেডে অর্জন করে: প্রেরক একটি ভাগ করা গোপন কী দিয়ে পেলোডের HMAC গণনা করে এবং একটি HTTP হেডারে অন্তর্ভুক্ত করে। প্রাপক HMAC পুনরায় গণনা করে তুলনা করে। এনক্রিপশন অপ্রয়োজনীয় জটিলতা ও কী ব্যবস্থাপনার বোঝা যোগ করত।
নিরাপদে HMAC স্বাক্ষর কীভাবে তুলনা করব?
সর্বদা একটি constant-time তুলনা ফাংশন ব্যবহার করুন। Python-এ hmac.compare_digest() ব্যবহার করুন। Node.js-এ crypto.timingSafeEqual() ব্যবহার করুন। Go-তে hmac.Equal() ব্যবহার করুন। সাধারণ স্ট্রিং সমতা অপারেটর (== বা ===) টাইমিং তথ্য ফাঁস করতে পারে: একজন আক্রমণকারী তুলনায় কত সময় লাগে তা পরিমাপ করে তাদের জাল স্বাক্ষরের কতগুলো বাইট সঠিক স্বাক্ষরের সাথে মিলে তা নির্ধারণ করতে পারে, তারপর বাকি বাইটগুলো একে একে brute-force করতে পারে।
গোপন কী পুনরুদ্ধার করতে HMAC কি বিপরীত করা যায়?
না। HMAC একটি এক-মুখী হ্যাশ ফাংশনের উপর ভিত্তিক, তাই HMAC আউটপুট থেকে কী বের করার কোনো গাণিতিক শর্টকাট নেই। একজন আক্রমণকারীকে কী স্পেস brute-force করতে হবে, যা 128 বিট বা তার বেশি দৈর্ঘ্যের কী-এর জন্য অকার্যকর। তবে দুর্বল বা ছোট কী (সাধারণ পাসওয়ার্ডের মতো) অভিধান আক্রমণের জন্য ঝুঁকিপূর্ণ হতে পারে, তাই HMAC-SHA256-এর জন্য সর্বদা কমপক্ষে 256 বিটের ক্রিপ্টোগ্রাফিকভাবে র‍্যান্ডম কী ব্যবহার করুন।
HMAC কী হ্যাশের ব্লক আকারের চেয়ে দীর্ঘ হলে কী হয়?
গোপন কী হ্যাশ ফাংশনের ব্লক আকারের (SHA-256-এর জন্য 64 বাইট, SHA-512-এর জন্য 128 বাইট) চেয়ে দীর্ঘ হলে, HMAC অ্যালগরিদম প্রথমে কীটিকে হ্যাশ আউটপুট দৈর্ঘ্যে কমাতে অন্তর্নিহিত হ্যাশ ফাংশন দিয়ে হ্যাশ করে, তারপর সেই হ্যাশকে কার্যকর কী হিসেবে ব্যবহার করে। এর মানে খুব দীর্ঘ কী হ্যাশ আউটপুট আকারের বাইরে অতিরিক্ত নিরাপত্তা দেয় না। HMAC-SHA256-এর জন্য, 64 বাইটের বেশি দীর্ঘ কী 32 বাইটে হ্যাশ করা হয় এবং 64-বাইট কীর চেয়ে কোনো নিরাপত্তা উন্নতি দেয় না; 64 বাইট পর্যন্ত কী তাদের পূর্ণ দৈর্ঘ্যে ব্যবহার করা হয়।
HMAC-SHA256-এর পরিবর্তে HMAC-SHA512 কখন ব্যবহার করব?
HMAC-SHA512 ব্যবহার করুন যখন প্রোটোকল এটি প্রয়োজন করে (HKDF-SHA512-এর মতো কিছু কী ডেরিভেশন ফাংশন, Ed25519 কী জেনারেশন), যখন গভীরতার প্রতিরক্ষার জন্য একটি বিস্তৃত স্বাক্ষর প্রয়োজন, অথবা 64-bit হার্ডওয়্যারে চালানোর সময় যেখানে SHA-512 আসলে SHA-256-এর চেয়ে দ্রুততর। বেশিরভাগ ওয়েব অ্যাপ্লিকেশন, API স্বাক্ষর ও webhook যাচাইকরণের জন্য HMAC-SHA256 যথেষ্ট নিরাপত্তা প্রদান করে এবং ইকোসিস্টেম জুড়ে আরও সাধারণ পছন্দ।