NTLMv2: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Внесены мелкие коррекции
Расставлены ссылки на DES, MD4, MD5, HMAC
Строка 19:
# Полученная последовательность из 14 байт делится на две половины по 7 байт:<code>0x53454352455430</code> и <code>0x31000000000000</code>
# Каждая из половин, состоящая из 7 байт, используется для создания двух DES-ключей, состоящих из 8 байт:<code>0x52a2516b252a5161</code> и <code>0x3180010101010101</code>
# Используя алгоритм [[DES]] и ASCII строку "<code>KGS!@#$%</code>",  а также сформированные ранее два DES-ключа, вычисляется два hash-значения, каждое по 8 байт: <code>0xff3750bcc2b22412</code> и <code>0xc2265b23734e0dac</code>
# Hash-значения из 8 байт обедняются в последовательность из 16 байт, формируя, тем самым '''LM-hash''':<code>0xff3750bcc2b22412c2265b23734e0dac</code>
# '''LM-hash''' из 16 байт дополняется нулями до 21 байта:<code>0xff3750bcc2b22412c2265b23734e0dac0000000000</code>
# Последовательность из 21 байта делится на три части по 7 байт:<code>0xff3750bcc2b224</code>, <code>0x12c2265b23734e</code> и <code>0x0dac0000000000</code>
# Каждая из частей используется для создания трех DES-ключей:<code>0xfe9bd516cd15c849</code>, <code>0x136189cbb31acd9d</code> и <code>0x0dd6010101010101</code>
# Используя алгоритма [[DES]] и Server Challenge,  а также сформированные ранее три DES-ключа, вычисляется три hash-значения, каждое по 8 байт.  Например если Server Challenge был <code>0x0123456789abcdef</code>, тогда получаем: <code>0xc337cd5cbd44fc97</code>, <code>82a667af6d427c6d</code> и <code>e67c20c2d3e77c56</code>
# Hash-значения из 8 байт обедняются в последовательность из 24 байт. Эта последовательность и есть '''LM Response''':<code>0xc337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56</code>
 
=== LMv2 ===
# Из пароля пользователя в виде Unicode строки, при помощи алгоритма MD4 вычисляем '''NTLM-hash''', состоящий из 16 байт. Например, пароль "<code>SecREt01</code>" или Unicode строка <code>0x53006500630052004500740030003100</code> после преобразования посредством алгоритма MD4, будет иметь вид:  <code>0xcd06ca7c7e10c99b1d33b7485a2ed808</code>
# Имя пользователя и имя домена в виде Unicode строк, объединяются и приводятся к верхнему регистру. Далее из этой последовательности и ранее полученного '''NTLM-hash''' при помощи алгоритма [[HMAC]]-[[MD5]] вычисляется '''NTLMv2-hash''', состоящий из 16 байт. Например, имя пользователя "<code>User</code>" и имя домена "<code>Domain</code>" дадут  строку "<code>USERDOMAIN</code>" или Unicode строку <code>0x550053004500520044004f004d00410049004e00</code> после алгоритма [[HMAC]]-[[MD5]] где применяется '''NTLM-hash'''  вычисляется '''NTLMv2-hash''' : <code>0x04b8e0ba74289cc540826bab1dee63ae</code>.
# Формируется последовательность Clinet Challenge из 8 байт, выбранных случайным образом (random), например:<code>0xffffff0011223344</code>
# Server Challenge и Client Challenge объединяются в последовательность из 16 байт. Например, если Server Challenge был 0x0123456789abcdef тогда получаем: <code>0x0123456789abcdefffffff0011223344</code>
Строка 36:
 
=== NTLM ===
# Из пароля пользователя в виде Unicode строки, при помощи алгоритма [[MD4]] вычисляем '''NTLM-hash''', состоящий из 16 байт. Например, пароль "<code>SecREt01</code>" или Unicode строка <code>0x53006500630052004500740030003100</code> после преобразования посредством алгоритма [[MD4]], будет иметь вид:  <code>0xcd06ca7c7e10c99b1d33b7485a2ed808</code>
# '''NTLM-hash''' из 16 байт дополняется нулями до 21 байта: <code>0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000</code>
# Последовательность из 21 байта делится на три части по 7 байт.<code>0xcd06ca7c7e10c9</code>, <code>0x9b1d33b7485a2e</code> и <code>0xd8080000000000</code>
# Каждая из частей, состоящая из 7 байт, используется для создания трех DES-ключей, состоящих из 8 байт:<code>0xcd83b34fc7f14392</code>, <code>0x9b8f4c767543685d</code> и <code>0xd904010101010101</code>
# Используя алгоритм [[DES]] и Server Challenge, а также сформированные ранее три DES-ключа, вычисляется три hash-значения, каждое по 8 байт. Например если Server Challenge был <code>0x0123456789abcdef</code>, тогда получаем:<code>0x25a98c1c31e81847</code>, <code>0x466b29b2df4680f3</code> и <code>0x9958fb8c213a9cc6</code>
# Нash-значения из 8 байт обедняются в последовательность из 24 байт. Эта последовательность и есть '''NTLM Response''':<code>0x25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6</code>
 
Строка 47:
# Clinet Challenge дополняется нулями до 21 байта. Эта последовательность и есть '''LMv2 Response''': <code>0xffffff001122334400000000000000000000000000000000</code>
# Server Challenge и Client Challenge объединяются в последовательность из 16 байт. Например, если Server Challenge был <code>0x0123456789abcdef</code> тогда получаем: <code>0x0123456789abcdefffffff0011223344</code>
# Из полученной последовательности при помощи алгоритма [[MD5]] вычисляем следующую hash-значение, состоящее из 16 байт. <code>0xbeac9a1bc5a9867c15192b3105d5beb1</code>
# Отсекаем первые 8 байт от полученного ранее hash-значения: <code>0xbeac9a1bc5a9867c</code>
# Из пароля пользователя в виде Unicode строки, при помощи алгоритма [[MD4]] вычисляем '''NTLM-hash''', состоящий из 16 байт. Например, пароль "<code>SecREt01</code>" или Unicode строка <code>0x53006500630052004500740030003100</code> после преобразования посредством алгоритма [[MD4]], будет иметь вид:  <code>0xcd06ca7c7e10c99b1d33b7485a2ed808</code>
# '''NTLM-hash''' из 16 байт дополняется нулями до 21 байта: <code>0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000</code>
# Последовательность из 21 байта делится на три части по 7 байт.<code>0xcd06ca7c7e10c9</code>, <code>0x9b1d33b7485a2e</code> и <code>0xd8080000000000</code>
# Каждая из частей, состоящая из 7 байт, используется для создания трех DES-ключей, состоящих из 8 байт:<code>0xcd83b34fc7f14392</code>, <code>0x9b8f4c767543685d</code> и <code>0xd904010101010101</code>
# Используя алгоритм [[DES]] и отсеченную часть hash-значения, а также сформированные ранее три DES-ключа, вычисляется три hash-значения, каждое по 8 байт.  Например если Server Challenge был <code>0x0123456789abcdef</code>, тогда получаем: <code>0x10d550832d12b2cc</code>, <code>0xb79d5ad1f4eed3df</code> и <code>0x82aca4c3681dd455</code>
# Нash-значения из 8 байт обедняются в последовательность из 24 байт. Эта последовательность и есть '''NTLM2 Response''': <code>0x10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455</code>
 
=== NTLMv2 ===
# Из пароля пользователя в виде Unicode строки, при помощи алгоритма [[MD4]] вычисляем '''NTLM-hash''', состоящий из 16 байт. Например, пароль "<code>SecREt01</code>" или Unicode строка <code>0x53006500630052004500740030003100</code> после преобразования посредством алгоритма [[MD4]], будет иметь вид:  <code>0xcd06ca7c7e10c99b1d33b7485a2ed808</code>
# Имя пользователя и имя домена в виде Unicode строк, объединяются и приводятся к верхнему регистру. Далее из этой последовательности и ранее полученного '''NTLM-hash''' при помощи алгоритма [[HMAC]]-[[MD5]] вычисляется '''NTLMv2-hash''', состоящий из 16 байт. Например, имя пользователя "<code>User</code>" и имя домена "<code>Domain</code>" дадут  строку "<code>USERDOMAIN</code>" или Unicode строку <code>0x550053004500520044004f004d00410049004e00</code> после алгоритма [[HMAC]]-[[MD5]] где применяется '''NTLM-hash'''  вычисляется '''NTLMv2-hash''' : <code>0x04b8e0ba74289cc540826bab1dee63ae</code>.
# Формируется последовательность Clinet Challenge из 8 байт, выбранных случайным образом (random), например: <code>0xffffff0011223344</code>.
# Формируется blob, например: <code>0x01010000</code> - the blob signature, <code>0x00000000</code> - reserved value, <code>0x0090d336b734c301</code> - timestamp, <code>0xffffff0011223344</code> - a random Client challange, <code>0x00000000</code> - unknown, <code>0x02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0000000000</code> - target information block, <code>0x00000000</code> - unknown
# Server Challenge и blob объединяются в последовательность из которой при помощи алгоритма [[HMAC]]-[[MD5]] и ранее вычисленного '''NTLMv2-hash''' вычисляется hash-значение, состоящие из 16 байт. Например, если Server Challenge был <code>0x0123456789abcdef</code>, тогда получается следующая последовательность: <code>0x0123456789abcdef01010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d00000000000000000</code>, а после использования алгоритма [[HMAC]]-[[MD5]] получаем следующее hash-значение: <code>0xcbabbca713eb795d04c97abc01ee4983</code>
# Нash-значения из 16 байт обедняется с blob в последовательность. Эта последовательность и есть '''NTLMv2 Response''': <code>0xcbabbca713eb795d04c97abc01ee498301010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000</code>