Gdy hosty Windows komunikują się między sobą, istnieje wiele sposobów uwierzytelniania systemów, takich jak Kerberos, certyfikaty i NetNTLM. Pierwszym protokołem, na którym się skupimy, jest NetNTLM. Jak sama nazwa wskazuje, NetNTLM zapewnia bezpieczniejszy sposób wysyłania skrótów Windows NT LAN Manager (NTLM) przez sieć. Przed systemem Windows NT skróty LAN Manager (LM) były używane do uwierzytelniania opartego na sieci. Skrót LM był generowany przy użyciu szyfrowania Data Encryption Standard (DES). Jedną ze słabości skrótu LM było to, że w rzeczywistości były to dwa oddzielne skróty połączone razem. Hasło było konwertowane na wielkie litery i uzupełniane znakami null, aż osiągnęło 14 znaków, a następnie pierwsza i druga połowa hasła były używane do utworzenia dwóch części skrótu. Wraz z rozwojem technologii stało się to większym problemem, ponieważ każdą połowę hasła można było złamać osobno, co oznaczało, że łamacz haseł musiałby złamać co najwyżej dwa siedmioznakowe hasła. Wraz z pojawieniem się tablic tęczowych łamanie haseł stało się jeszcze łatwiejsze, więc system Windows NT przeszedł na używanie skrótów NT LAN Manager (NTLM). Hasła dowolnej długości można było haszować, a do generowania skrótu użyto algorytmu RC4. Jest to znacznie bezpieczniejsze w przypadku uwierzytelniania opartego na hoście, ale istnieje problem z uwierzytelnianiem opartym na sieci. Jeśli ktoś podsłuchuje, a my po prostu przesyłamy surowe skróty NTLM, co powstrzymuje tę osobę przed przechwyceniem skrótu i jego odtworzeniem? W rezultacie skróty wyzwania/odpowiedzi NetNTLMv1 i NetNTLMv2 zostały stworzone, aby nadać skrótom dodatkową losowość i spowolnić ich łamanie. NTLMv1 używa opartego na serwerze nonce’a, aby zwiększyć losowość. Kiedy łączymy się z hostem za pomocą NTLMv1, najpierw prosimy o nonce’a. Następnie żądający klient bierze nasz hash NTLM i ponownie go hashuje tym noncem. Następnie wysyłamy to wyzwanie klienta do serwera w celu uwierzytelnienia. Jeśli serwer zna hash NT, może ponownie utworzyć hash wyzwania przy użyciu wysłanego wyzwania. Jeśli oba są zgodne, hasło jest poprawne i serwer może kontynuować działanie. Problem z tym protokołem polega na tym, że złośliwy atakujący może oszukać kogoś, aby połączył się z jego serwerem i podał statyczny nonce. Oznacza to, że hash NTLMv1 jest tylko trochę bardziej złożony niż surowe poświadczenia NTLM i można go złamać niemal tak szybko, jak surowy hash NTLM. Dlatego stworzono NTLMv2. NTLMv2 dostarcza dwa różne nonce w tworzeniu hasha wyzwania. Pierwszy jest określony przez serwer, a drugi przez klienta. W ten sposób, nawet jeśli serwer jest naruszony i ma statyczny nonce, nonce klienta nadal dodaje złożoności, aby zapewnić, że te poświadczenia zostaną złamane wolniej. Oznacza to również, że używanie tablic tęczowych nie jest już skutecznym sposobem łamania tego typu haszy.