Middle
რა არის HMAC და როგორ გამოიყენება?
sobes.tech AI
პასუხი AI-სგან
HMAC (Hash-based Message Authentication Code) — ეს არის მექანიზმი შეტყობინების მთლიანობისა და სისწორეს დასადასტურებლად, რომელიც იყენებს საიდუმლო გასაღებს და კრიპტოგრაფიულ ჰეშ-ფუნქციას.
მუშაობის ალგორითმი:
- შიდა და გარე გასაღებების შექმნა საიდუმლო გასაღებიდან (
ipad,opadკონსტანტებთან ერთად). - შიდა ჰეშის გამოთვლა:
hash(საიდუმლო გასაღები XOR ipad + შეტყობინება). - გარე ჰეშის გამოთვლა:
hash(საიდუმლო გასაღები XOR opad + შიდა ჰეში). ეს არის HMAC.
გამოყენება:
- API მოთხოვნების ავტორიზაცია: სერვერი და მომხმარებელი აქვთ საერთო საიდუმლო გასაღები. მომხმარებელი ითვლის HMAC მონაცემებისთვის და აგზავნის მას სათაურის ნაწილში. სერვერი ითვლის იგივე მონაცემებისა და გასაღების მიხედვით HMAC-ს და ადარებს მის მიერ გამოთვლილს. თუ ემთხვევა, მოთხოვნა მიიჩნევა ავტორიზებულად.
- მონაცემების მთლიანობის შემოწმება: თუ შეტყობინების HMAC ემთხვევა ხელახლა გამოთვლილ HMAC-ს, შეიძლება დარწმუნდეთ, რომ მონაცემები არ შეცვლილა ტრანსპორტის დროს.
- JSON Web Tokens (JWT)-ში გამოყენება: HMAC ხშირად გამოიყენება ციფრული ხელმოწერის ალგორითმად (HS256, HS384, HS512) მონაცემების მთლიანობის უზრუნველსაყოფად.
სავარაუდო კოდი (პსევდოკოდი):
function hmacSHA256(key, message) {
// padding კონსტანტები
const blockSize = 64; // SHA-256-ისთვის
const ipad = 0x36;
const opad = 0x5c;
// გასაღების მომზადება
let paddedKey = key;
თუ (key.length > blockSize) {
paddedKey = sha256(key);
}
სანამ (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// შიდა ჰეშის გამოთვლა
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// გარე ჰეში (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
დაბრუნება hmac;
}
// რეალურ ბიბლიოთეკებში რეალიზაცია ოპტიმიზირებულია და განსხვავებულია
HMAC-ის და უბრალო ჰეშის ძირითადი განსხვავება ის არის, რომ HMAC-ის გამოყენებით დაცულია შეტყობინების გაფართოების შეტევებისგან, რადგან გამოიყენება ორი ფაზის ჰეშტყობა სხვადასხვა padding კონსტანტებით.