Udostępnij za pośrednictwem


Tworzenie HMAC

Aby wyliczyć HMAC

  1. Pobierz wskaźnik do dostawcy usług kryptograficznych Microsoft (CSP), wywołując CryptAcquireContext.
  2. Utwórz dojście do obiektu skrótu HMAC, wywołując CryptCreateHash. Przekaż CALG_HMAC w parametrze Algid . Przekaż uchwyt klucza symetrycznego w parametrze hKey. Ten klucz symetryczny jest kluczem używanym do obliczenia HMAC.
  3. Określ typ skrótu, który ma być używany przez wywołanie CryptSetHashParam z parametrem dwParam ustawionym na wartość "HP_HMAC_INFO". Parametr pbData musi wskazywać zainicjowaną strukturę HMAC_INFO.
  4. Wywołaj CryptHashData, aby rozpocząć obliczanie HMAC danych. Pierwsze wywołanie CryptHashData powoduje połączenie wartości klucza przy użyciu operatora XOR z ciągiem wewnętrznym i danymi. Wynik operacji XOR jest haszowany, a następnie dane docelowe dla HMAC (wskazywane przez parametr pbData przekazany w wywołaniu do CryptHashData) są haszowane. W razie potrzeby kolejne wywołania CryptHashData mogą zostać wykonane w celu zakończenia haszowania danych docelowych.
  5. Wywołaj CryptGetHashParam przy użyciu parametru dwParam ustawionego na HP_HASHVAL. To wywołanie powoduje zakończenie skrótu wewnętrznego, a ciąg zewnętrzny zostanie połączony przy użyciu XOR z kluczem. Wynik operacji XOR jest haszowany, a następnie haszowany jest wynik wewnętrznego skrótu (ukończonego w poprzednim kroku). Zewnętrzny skrót jest następnie kończony i zwracany w parametrze pbData, a jego długość w parametrze dwDataLen.

Nota

Nie używaj tego samego klucza symetrycznego (sesji) zarówno do szyfrowania komunikatów, jak i generowania kodu uwierzytelniania komunikatów (MAC). Użycie tego samego klucza dla obu znacznie zwiększa ryzyko dekodowania komunikatów przez osoby atakujące.