Sobes.tech
Middle

რა არის HMAC და როგორ გამოიყენება?

sobes.tech AI

პასუხი AI-სგან

HMAC (Hash-based Message Authentication Code) — ეს არის მექანიზმი შეტყობინების მთლიანობისა და სისწორეს დასადასტურებლად, რომელიც იყენებს საიდუმლო გასაღებს და კრიპტოგრაფიულ ჰეშ-ფუნქციას.

მუშაობის ალგორითმი:

  1. შიდა და გარე გასაღებების შექმნა საიდუმლო გასაღებიდან (ipad, opad კონსტანტებთან ერთად).
  2. შიდა ჰეშის გამოთვლა: hash(საიდუმლო გასაღები XOR ipad + შეტყობინება).
  3. გარე ჰეშის გამოთვლა: 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 კონსტანტებით.