From b9aaaf7809aa071282e38e13cdfbf1788ab38fbd Mon Sep 17 00:00:00 2001 From: jsteube Date: Sat, 20 Apr 2019 19:41:37 +0200 Subject: [PATCH] Move 198xx DiskCryptor to 200xx to not collide with Kerberos 5, etype 17, Pre-Auth --- OpenCL/m19800-pure.cl | 83 ++++++++-------- OpenCL/m19900-pure.cl | 94 ++++++++++--------- OpenCL/{m19811-pure.cl => m20011-pure.cl} | 6 +- OpenCL/{m19812-pure.cl => m20012-pure.cl} | 6 +- OpenCL/{m19813-pure.cl => m20013-pure.cl} | 6 +- docs/changes.txt | 2 + docs/readme.txt | 8 +- src/modules/module_07500.c | 2 +- src/modules/module_13100.c | 2 +- src/modules/module_18200.c | 2 +- src/modules/module_19600.c | 2 +- src/modules/module_19700.c | 2 +- src/modules/module_19800.c | 4 +- src/modules/module_19900.c | 4 +- .../{module_19811.c => module_20011.c} | 2 +- .../{module_19812.c => module_20012.c} | 2 +- .../{module_19813.c => module_20013.c} | 2 +- tools/test_modules/{m19811.pm => m20011.pm} | 0 tools/test_modules/{m19812.pm => m20012.pm} | 0 tools/test_modules/{m19813.pm => m20013.pm} | 0 20 files changed, 120 insertions(+), 109 deletions(-) rename OpenCL/{m19811-pure.cl => m20011-pure.cl} (98%) rename OpenCL/{m19812-pure.cl => m20012-pure.cl} (98%) rename OpenCL/{m19813-pure.cl => m20013-pure.cl} (98%) rename src/modules/{module_19811.c => module_20011.c} (99%) rename src/modules/{module_19812.c => module_20012.c} (99%) rename src/modules/{module_19813.c => module_20013.c} (99%) rename tools/test_modules/{m19811.pm => m20011.pm} (100%) rename tools/test_modules/{m19812.pm => m20012.pm} (100%) rename tools/test_modules/{m19813.pm => m20013.pm} (100%) diff --git a/OpenCL/m19800-pure.cl b/OpenCL/m19800-pure.cl index 83cff3ac8..bc960455f 100644 --- a/OpenCL/m19800-pure.cl +++ b/OpenCL/m19800-pure.cl @@ -368,7 +368,7 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) aes_key[1] = hc_swap32_S (tmps[gid].out[1]); aes_key[2] = hc_swap32_S (tmps[gid].out[2]); aes_key[3] = hc_swap32_S (tmps[gid].out[3]); - + u32 aes_iv[4]; aes_iv[0] = 0; @@ -380,11 +380,12 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) aes128_set_encrypt_key (aes_ks, aes_key, s_te0, s_te1, s_te2, s_te3); - u32 key_bytes[4]; - u32 out[4]; + aes128_encrypt_cbc (aes_ks, aes_iv, nfolded, out, s_te0, s_te1, s_te2, s_te3, s_te4); + u32 key_bytes[4]; + key_bytes[0] = hc_swap32_S (out[0]); key_bytes[1] = hc_swap32_S (out[1]); key_bytes[2] = hc_swap32_S (out[2]); @@ -392,11 +393,11 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) // then aes_cbc encrypt this nfolded value with 'key_bytes' as key along with a null IV aes128_set_encrypt_key (aes_ks, key_bytes, s_te0, s_te1, s_te2, s_te3); - + /* we will now compute 'ke' */ u32 ke[4]; - + // we can precompute _nfold(pack('>IB', 1, 0xAA), 16) nfolded[0] = 0xae2c160b; nfolded[1] = 0x04ad5006; @@ -430,9 +431,9 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) // c_1 aka c_n-1 since there are guaranteed to be exactly 3 blocks enc_blocks[4] = esalt_bufs[digests_offset].enc_timestamp[4]; enc_blocks[5] = esalt_bufs[digests_offset].enc_timestamp[5]; - enc_blocks[6] = esalt_bufs[digests_offset].enc_timestamp[6]; + enc_blocks[6] = esalt_bufs[digests_offset].enc_timestamp[6]; enc_blocks[7] = esalt_bufs[digests_offset].enc_timestamp[7]; - + u32 w0[4]; u32 w1[4]; u32 w2[4]; @@ -441,10 +442,10 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) u32 aes_cts_decrypt_ks[44]; AES128_set_decrypt_key (aes_cts_decrypt_ks, ke, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); - + // Our first decryption is the last block (currently in c_n-1) using the first portion of (c_n) as our IV, this allows us to get plaintext in one crypto operation - aes_iv[0] = esalt_bufs[digests_offset].enc_timestamp[8]; - aes_iv[1] = esalt_bufs[digests_offset].enc_timestamp[9]; + aes_iv[0] = esalt_bufs[digests_offset].enc_timestamp[ 8]; + aes_iv[1] = esalt_bufs[digests_offset].enc_timestamp[ 9]; aes_iv[2] = esalt_bufs[digests_offset].enc_timestamp[10]; aes_iv[3] = esalt_bufs[digests_offset].enc_timestamp[11]; @@ -454,7 +455,7 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) w0[1] = hc_swap32_S (decrypted_block[1]); w0[2] = hc_swap32_S (decrypted_block[2]); w0[3] = hc_swap32_S (decrypted_block[3]); - + // Move as much code as possible after this branch to avoid unnecessary computation on misses if (((w0[0] & 0xf0f0f0f0) == 0x30303030) && ((w0[1] & 0xffff0000) == 0x5aa10000)) { @@ -465,12 +466,13 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) w0[1] = decrypted_block[1]; w0[2] = decrypted_block[2]; w0[3] = decrypted_block[3]; - + int enc_timestamp_len = esalt_bufs[digests_offset].enc_timestamp_len; int last_word_position = enc_timestamp_len / 4; - + // New c_1, join c_n with result of the decrypted c_n-1 int last_block_iter; + for (last_block_iter = 4; last_block_iter < 8; last_block_iter++) { if (last_word_position > last_block_iter + 4) @@ -482,62 +484,62 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) // Handle case when the split lands in the middle of a WORD switch (enc_timestamp_len % 4) { - case 1: - enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x000000ff) | (w0[last_block_iter - 4] & 0xffffff00); - break; - case 2: - enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x0000ffff) | (w0[last_block_iter - 4] & 0xffff0000); - break; - case 3: - enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x00ffffff) | (w0[last_block_iter - 4] & 0xff000000); - break; - default: - enc_blocks[last_block_iter] = w0[last_block_iter - 4]; - } + case 1: + enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x000000ff) | (w0[last_block_iter - 4] & 0xffffff00); + break; + case 2: + enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x0000ffff) | (w0[last_block_iter - 4] & 0xffff0000); + break; + case 3: + enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x00ffffff) | (w0[last_block_iter - 4] & 0xff000000); + break; + default: + enc_blocks[last_block_iter] = w0[last_block_iter - 4]; + } } else { enc_blocks[last_block_iter] = w0[last_block_iter - 4]; } } - + // c_2 aka c_n which is now equal to the old c_n-1 enc_blocks[8] = esalt_bufs[digests_offset].enc_timestamp[4]; enc_blocks[9] = esalt_bufs[digests_offset].enc_timestamp[5]; - enc_blocks[10] = esalt_bufs[digests_offset].enc_timestamp[6]; + enc_blocks[10] = esalt_bufs[digests_offset].enc_timestamp[6]; enc_blocks[11] = esalt_bufs[digests_offset].enc_timestamp[7]; - // Go ahead and decrypt all blocks now as a normal AES CBC operation + // Go ahead and decrypt all blocks now as a normal AES CBC operation aes_iv[0] = 0; aes_iv[1] = 0; aes_iv[2] = 0; aes_iv[3] = 0; - + aes128_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); w0[0] = hc_swap32_S (decrypted_block[0]); w0[1] = hc_swap32_S (decrypted_block[1]); w0[2] = hc_swap32_S (decrypted_block[2]); w0[3] = hc_swap32_S (decrypted_block[3]); - + aes128_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks + 4, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); w1[0] = hc_swap32_S (decrypted_block[0]); w1[1] = hc_swap32_S (decrypted_block[1]); w1[2] = hc_swap32_S (decrypted_block[2]); w1[3] = hc_swap32_S (decrypted_block[3]); - + aes128_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks + 8, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); w2[0] = hc_swap32_S (decrypted_block[0]); w2[1] = hc_swap32_S (decrypted_block[1]); w2[2] = hc_swap32_S (decrypted_block[2]); w2[3] = hc_swap32_S (decrypted_block[3]); - + w3[0] = 0; w3[1] = 0; w3[2] = 0; w3[3] = 0; - + /* we will now compute 'ki', having 'key_bytes' */ u32 ki[8]; @@ -562,7 +564,7 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) ki[1] = out[1]; ki[2] = out[2]; ki[3] = out[3]; - + sha1_hmac_ctx_t sha1_hmac_ctx; /* @@ -599,18 +601,19 @@ KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) sha1_hmac_update_64 (&sha1_hmac_ctx, w0, w1, w2, w3, enc_timestamp_len); - sha1_hmac_final(&sha1_hmac_ctx); - + sha1_hmac_final (&sha1_hmac_ctx); + // Compare checksum - if(sha1_hmac_ctx.opad.h[0] == esalt_bufs[digests_offset].checksum[0] - && sha1_hmac_ctx.opad.h[1] == esalt_bufs[digests_offset].checksum[1] - && sha1_hmac_ctx.opad.h[2] == esalt_bufs[digests_offset].checksum[2]) + if ((sha1_hmac_ctx.opad.h[0] == esalt_bufs[digests_offset].checksum[0]) + && (sha1_hmac_ctx.opad.h[1] == esalt_bufs[digests_offset].checksum[1]) + && (sha1_hmac_ctx.opad.h[2] == esalt_bufs[digests_offset].checksum[2])) { if (atomic_inc (&hashes_shown[digests_offset]) == 0) { #define il_pos 0 + mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos, 0, 0); } } } -} \ No newline at end of file +} diff --git a/OpenCL/m19900-pure.cl b/OpenCL/m19900-pure.cl index 26de425b6..1e6d2ebff 100644 --- a/OpenCL/m19900-pure.cl +++ b/OpenCL/m19900-pure.cl @@ -148,7 +148,7 @@ KERNEL_FQ void m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) sha1_hmac_update_global_swap (&sha1_hmac_ctx, esalt_bufs[digests_offset].account_info, esalt_bufs[digests_offset].account_info_len); - for (u32 i = 0, j = 1; i < 8; i += 5, j += 1) + for (u32 i = 0, j = 1; i < 8; i += 5, j += 1) { sha1_hmac_ctx_t sha1_hmac_ctx2 = sha1_hmac_ctx; @@ -194,9 +194,10 @@ KERNEL_FQ void m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) KERNEL_FQ void m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { - /** + /** * base */ + const u64 gid = get_global_id (0); if ((gid * VECT_SIZE) >= gid_max) return; @@ -372,7 +373,7 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) aes_key[5] = hc_swap32_S (tmps[gid].out[5]); aes_key[6] = hc_swap32_S (tmps[gid].out[6]); aes_key[7] = hc_swap32_S (tmps[gid].out[7]); - + u32 aes_iv[4]; aes_iv[0] = 0; @@ -384,11 +385,12 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) aes256_set_encrypt_key (aes_ks, aes_key, s_te0, s_te1, s_te2, s_te3); - u32 key_bytes[8]; - u32 out[4]; + aes256_encrypt_cbc (aes_ks, aes_iv, nfolded, out, s_te0, s_te1, s_te2, s_te3, s_te4); + u32 key_bytes[8]; + key_bytes[0] = hc_swap32_S (out[0]); key_bytes[1] = hc_swap32_S (out[1]); key_bytes[2] = hc_swap32_S (out[2]); @@ -408,11 +410,11 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) // then aes_cbc encrypt this nfolded value with 'key_bytes' as key along with a null IV aes256_set_encrypt_key (aes_ks, key_bytes, s_te0, s_te1, s_te2, s_te3); - + /* we will now compute 'ke' */ u32 ke[8]; - + // we can precompute _nfold(pack('>IB', 1, 0xAA), 16) nfolded[0] = 0xae2c160b; nfolded[1] = 0x04ad5006; @@ -443,7 +445,7 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) ke[5] = out[1]; ke[6] = out[2]; ke[7] = out[3]; - + // Decode the CTS mode encryption by decrypting c_n-1 and swapping it with c_n u32 enc_blocks[12]; @@ -458,9 +460,9 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) // c_1 aka c_n-1 since there are guaranteed to be exactly 3 blocks enc_blocks[4] = esalt_bufs[digests_offset].enc_timestamp[4]; enc_blocks[5] = esalt_bufs[digests_offset].enc_timestamp[5]; - enc_blocks[6] = esalt_bufs[digests_offset].enc_timestamp[6]; + enc_blocks[6] = esalt_bufs[digests_offset].enc_timestamp[6]; enc_blocks[7] = esalt_bufs[digests_offset].enc_timestamp[7]; - + u32 w0[4]; u32 w1[4]; u32 w2[4]; @@ -469,7 +471,7 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) u32 aes_cts_decrypt_ks[60]; AES256_set_decrypt_key (aes_cts_decrypt_ks, ke, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); - + // Our first decryption is the last block (currently in c_n-1) using the first portion of (c_n) as our IV, this allows us to get plaintext in one crypto operation aes_iv[0] = esalt_bufs[digests_offset].enc_timestamp[8]; aes_iv[1] = esalt_bufs[digests_offset].enc_timestamp[9]; @@ -482,23 +484,24 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) w0[1] = hc_swap32_S (decrypted_block[1]); w0[2] = hc_swap32_S (decrypted_block[2]); w0[3] = hc_swap32_S (decrypted_block[3]); - + // Move as much code as possible after this branch to avoid unnecessary computation on misses if (((w0[0] & 0xf0f0f0f0) == 0x30303030) && ((w0[1] & 0xffff0000) == 0x5aa10000)) { // Decrypt c_n-1 without an IV for the padding blocks on c_n aes256_decrypt (aes_cts_decrypt_ks, enc_blocks + 4, decrypted_block, s_td0, s_td1, s_td2, s_td3, s_td4); - + w0[0] = decrypted_block[0]; w0[1] = decrypted_block[1]; w0[2] = decrypted_block[2]; w0[3] = decrypted_block[3]; - + int enc_timestamp_len = esalt_bufs[digests_offset].enc_timestamp_len; int last_word_position = enc_timestamp_len / 4; - + // New c_1, join c_n with result of the decrypted c_n-1 int last_block_iter; + for (last_block_iter = 4; last_block_iter < 8; last_block_iter++) { if (last_word_position > last_block_iter + 4) @@ -510,63 +513,63 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) // Handle case when the split lands in the middle of a WORD switch (enc_timestamp_len % 4) { - case 1: - enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x000000ff) | (w0[last_block_iter - 4] & 0xffffff00); - break; - case 2: - enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x0000ffff) | (w0[last_block_iter - 4] & 0xffff0000); - break; - case 3: - enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x00ffffff) | (w0[last_block_iter - 4] & 0xff000000); - break; - default: - enc_blocks[last_block_iter] = w0[last_block_iter - 4]; - } + case 1: + enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x000000ff) | (w0[last_block_iter - 4] & 0xffffff00); + break; + case 2: + enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x0000ffff) | (w0[last_block_iter - 4] & 0xffff0000); + break; + case 3: + enc_blocks[last_block_iter] = (esalt_bufs[digests_offset].enc_timestamp[last_block_iter + 4] & 0x00ffffff) | (w0[last_block_iter - 4] & 0xff000000); + break; + default: + enc_blocks[last_block_iter] = w0[last_block_iter - 4]; + } } else { enc_blocks[last_block_iter] = w0[last_block_iter - 4]; } } - + // c_2 aka c_n which is now equal to the old c_n-1 - enc_blocks[8] = esalt_bufs[digests_offset].enc_timestamp[4]; - enc_blocks[9] = esalt_bufs[digests_offset].enc_timestamp[5]; - enc_blocks[10] = esalt_bufs[digests_offset].enc_timestamp[6]; + enc_blocks[ 8] = esalt_bufs[digests_offset].enc_timestamp[4]; + enc_blocks[ 9] = esalt_bufs[digests_offset].enc_timestamp[5]; + enc_blocks[10] = esalt_bufs[digests_offset].enc_timestamp[6]; enc_blocks[11] = esalt_bufs[digests_offset].enc_timestamp[7]; - + // Go ahead and decrypt all blocks now as a normal AES CBC operation aes_iv[0] = 0; aes_iv[1] = 0; aes_iv[2] = 0; aes_iv[3] = 0; - - aes256_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); + + aes256_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks + 0, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); w0[0] = hc_swap32_S (decrypted_block[0]); w0[1] = hc_swap32_S (decrypted_block[1]); w0[2] = hc_swap32_S (decrypted_block[2]); w0[3] = hc_swap32_S (decrypted_block[3]); - + aes256_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks + 4, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); w1[0] = hc_swap32_S (decrypted_block[0]); w1[1] = hc_swap32_S (decrypted_block[1]); w1[2] = hc_swap32_S (decrypted_block[2]); w1[3] = hc_swap32_S (decrypted_block[3]); - + aes256_decrypt_cbc (aes_cts_decrypt_ks, enc_blocks + 8, decrypted_block, aes_iv, s_td0, s_td1, s_td2, s_td3, s_td4); w2[0] = hc_swap32_S (decrypted_block[0]); w2[1] = hc_swap32_S (decrypted_block[1]); w2[2] = hc_swap32_S (decrypted_block[2]); w2[3] = hc_swap32_S (decrypted_block[3]); - + w3[0] = 0; w3[1] = 0; w3[2] = 0; w3[3] = 0; - + /* we will now compute 'ki', having 'key_bytes' */ u32 ki[8]; @@ -603,7 +606,7 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) ki[5] = out[1]; ki[6] = out[2]; ki[7] = out[3]; - + sha1_hmac_ctx_t sha1_hmac_ctx; /* @@ -640,18 +643,19 @@ KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) sha1_hmac_update_64 (&sha1_hmac_ctx, w0, w1, w2, w3, enc_timestamp_len); - sha1_hmac_final(&sha1_hmac_ctx); - + sha1_hmac_final (&sha1_hmac_ctx); + // Compare checksum - if(sha1_hmac_ctx.opad.h[0] == esalt_bufs[digests_offset].checksum[0] - && sha1_hmac_ctx.opad.h[1] == esalt_bufs[digests_offset].checksum[1] - && sha1_hmac_ctx.opad.h[2] == esalt_bufs[digests_offset].checksum[2]) + if ((sha1_hmac_ctx.opad.h[0] == esalt_bufs[digests_offset].checksum[0]) + && (sha1_hmac_ctx.opad.h[1] == esalt_bufs[digests_offset].checksum[1]) + && (sha1_hmac_ctx.opad.h[2] == esalt_bufs[digests_offset].checksum[2])) { if (atomic_inc (&hashes_shown[digests_offset]) == 0) { #define il_pos 0 + mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset + 0, gid, il_pos, 0, 0); } } } -} \ No newline at end of file +} diff --git a/OpenCL/m19811-pure.cl b/OpenCL/m20011-pure.cl similarity index 98% rename from OpenCL/m19811-pure.cl rename to OpenCL/m20011-pure.cl index eea61f0bd..3fed10939 100644 --- a/OpenCL/m19811-pure.cl +++ b/OpenCL/m20011-pure.cl @@ -91,7 +91,7 @@ DECLSPEC void hmac_sha512_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *w sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m19811_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -195,7 +195,7 @@ KERNEL_FQ void m19811_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m19811_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -321,7 +321,7 @@ KERNEL_FQ void m19811_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m19811_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20011_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m19812-pure.cl b/OpenCL/m20012-pure.cl similarity index 98% rename from OpenCL/m19812-pure.cl rename to OpenCL/m20012-pure.cl index 46ca244a8..2a75acd23 100644 --- a/OpenCL/m19812-pure.cl +++ b/OpenCL/m20012-pure.cl @@ -91,7 +91,7 @@ DECLSPEC void hmac_sha512_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *w sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m19812_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -195,7 +195,7 @@ KERNEL_FQ void m19812_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m19812_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -321,7 +321,7 @@ KERNEL_FQ void m19812_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m19812_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20012_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m19813-pure.cl b/OpenCL/m20013-pure.cl similarity index 98% rename from OpenCL/m19813-pure.cl rename to OpenCL/m20013-pure.cl index 95bf43644..f7f1239a9 100644 --- a/OpenCL/m19813-pure.cl +++ b/OpenCL/m20013-pure.cl @@ -91,7 +91,7 @@ DECLSPEC void hmac_sha512_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *w sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m19813_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -195,7 +195,7 @@ KERNEL_FQ void m19813_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m19813_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -321,7 +321,7 @@ KERNEL_FQ void m19813_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m19813_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void m20013_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/docs/changes.txt b/docs/changes.txt index 598705580..6f6b68b91 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -21,6 +21,8 @@ - Added hash-mode: QNX /etc/shadow (SHA512) - Added hash-mode: Kerberos 5 TGS-REP etype 17 (AES128-CTS-HMAC-SHA1-96) - Added hash-mode: Kerberos 5 TGS-REP etype 18 (AES256-CTS-HMAC-SHA1-96) +- Added hash-mode: Kerberos 5 Pre-Auth etype 17 (AES128-CTS-HMAC-SHA1-96) +- Added hash-mode: Kerberos 5 Pre-Auth etype 18 (AES256-CTS-HMAC-SHA1-96) - Added hash-mode: sha1(md5(md5($pass))) - Added hash-mode: sha1($salt1.$pass.$salt2) - Added hash-mode: Ruby on Rails Restful-Authentication diff --git a/docs/readme.txt b/docs/readme.txt index 8bc78643a..2614bdf0b 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -122,13 +122,16 @@ NVIDIA GPUs require "NVIDIA Driver" (418.56 or later) - NetNTLMv1+ESS - NetNTLMv2 - IPMI2 RAKP HMAC-SHA1 -- Kerberos 5 AS-REQ Pre-Auth etype 23 +- Kerberos 5 AS-REQ Pre-Auth etype 23 +- Kerberos 5 AS-REP etype 23 +- Kerberos 5 TGS-REP etype 23 (RC4-HMAC-MD5) +- Kerberos 5 Pre-Auth etype 17/18 (AES128-CTS-HMAC-SHA1-96) +- Kerberos 5 TGS-REP etype 17/18 (AES128-CTS-HMAC-SHA1-96) - DNSSEC (NSEC3) - CRAM-MD5 - PostgreSQL CRAM (MD5) - MySQL CRAM (SHA1) - SIP digest authentication (MD5) -- Kerberos 5 TGS-REP etype 23 - TACACS+ - JWT (JSON Web Token) - SMF (Simple Machines Forum) > v1.1 @@ -266,7 +269,6 @@ NVIDIA GPUs require "NVIDIA Driver" (418.56 or later) - Ethereum Wallet, SCRYPT - Ethereum Pre-Sale Wallet, PBKDF2-HMAC-SHA256 - Ansible Vault -- Kerberos 5 AS-REP etype 23 - Plaintext ## diff --git a/src/modules/module_07500.c b/src/modules/module_07500.c index d2f096cce..1026921bc 100644 --- a/src/modules/module_07500.c +++ b/src/modules/module_07500.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 AS-REQ Pre-Auth etype 23"; +static const char *HASH_NAME = "Kerberos 5, etype 23, AS-REQ Pre-Auth"; static const u64 KERN_TYPE = 7500; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED; diff --git a/src/modules/module_13100.c b/src/modules/module_13100.c index 526d73d1a..8619a0d19 100644 --- a/src/modules/module_13100.c +++ b/src/modules/module_13100.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 TGS-REP etype 23 (RC4-HMAC-MD5)"; +static const char *HASH_NAME = "Kerberos 5, etype 23, TGS-REP"; static const u64 KERN_TYPE = 13100; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED; diff --git a/src/modules/module_18200.c b/src/modules/module_18200.c index 1b8ac97a5..22b1549dc 100644 --- a/src/modules/module_18200.c +++ b/src/modules/module_18200.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 AS-REP etype 23"; +static const char *HASH_NAME = "Kerberos 5, etype 23, AS-REP"; static const u64 KERN_TYPE = 18200; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED; diff --git a/src/modules/module_19600.c b/src/modules/module_19600.c index f1d91a1db..4558f75cb 100644 --- a/src/modules/module_19600.c +++ b/src/modules/module_19600.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 TGS-REP etype 17 (AES128-CTS-HMAC-SHA1-96)"; +static const char *HASH_NAME = "Kerberos 5, etype 17, TGS-REP"; static const u64 KERN_TYPE = 19600; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED diff --git a/src/modules/module_19700.c b/src/modules/module_19700.c index cb1ff902e..8a3467e92 100644 --- a/src/modules/module_19700.c +++ b/src/modules/module_19700.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 TGS-REP etype 18 (AES256-CTS-HMAC-SHA1-96)"; +static const char *HASH_NAME = "Kerberos 5, etype 18, TGS-REP"; static const u64 KERN_TYPE = 19700; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED diff --git a/src/modules/module_19800.c b/src/modules/module_19800.c index 9282fd135..7cff3f7f4 100644 --- a/src/modules/module_19800.c +++ b/src/modules/module_19800.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 Pre-Auth etype 17 (AES128-CTS-HMAC-SHA1-96)"; +static const char *HASH_NAME = "Kerberos 5, etype 17, Pre-Auth"; static const u64 KERN_TYPE = 19800; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED @@ -161,7 +161,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE memcpy(account_info_ptr + domain_len, user_pos, user_len); krb5pa->account_info_len = account_info_len; - + // Split checksum checksum_pos = data_pos + data_len - 24; data_len = data_len - 24; diff --git a/src/modules/module_19900.c b/src/modules/module_19900.c index e8ed15ccf..377c244d2 100644 --- a/src/modules/module_19900.c +++ b/src/modules/module_19900.c @@ -17,7 +17,7 @@ static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_NETWORK_PROTOCOL; -static const char *HASH_NAME = "Kerberos 5 Pre-Auth etype 18 (AES256-CTS-HMAC-SHA1-96)"; +static const char *HASH_NAME = "Kerberos 5, etype 18, Pre-Auth"; static const u64 KERN_TYPE = 19900; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED @@ -161,7 +161,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE memcpy(account_info_ptr + domain_len, user_pos, user_len); krb5pa->account_info_len = account_info_len; - + // Split checksum checksum_pos = data_pos + data_len - 24; data_len = data_len - 24; diff --git a/src/modules/module_19811.c b/src/modules/module_20011.c similarity index 99% rename from src/modules/module_19811.c rename to src/modules/module_20011.c index a58e07b1e..1bcad8cb6 100644 --- a/src/modules/module_19811.c +++ b/src/modules/module_20011.c @@ -18,7 +18,7 @@ static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_FDE; static const char *HASH_NAME = "DiskCryptor SHA512 + XTS 512 bit"; -static const u64 KERN_TYPE = 19811; +static const u64 KERN_TYPE = 20011; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64 | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; diff --git a/src/modules/module_19812.c b/src/modules/module_20012.c similarity index 99% rename from src/modules/module_19812.c rename to src/modules/module_20012.c index 4cbc873bd..0dd86e76c 100644 --- a/src/modules/module_19812.c +++ b/src/modules/module_20012.c @@ -18,7 +18,7 @@ static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_FDE; static const char *HASH_NAME = "DiskCryptor SHA512 + XTS 1024 bit"; -static const u64 KERN_TYPE = 19812; +static const u64 KERN_TYPE = 20012; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64 | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; diff --git a/src/modules/module_19813.c b/src/modules/module_20013.c similarity index 99% rename from src/modules/module_19813.c rename to src/modules/module_20013.c index bd69e498c..4a7fb4bc8 100644 --- a/src/modules/module_19813.c +++ b/src/modules/module_20013.c @@ -18,7 +18,7 @@ static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_FDE; static const char *HASH_NAME = "DiskCryptor SHA512 + XTS 1536 bit"; -static const u64 KERN_TYPE = 19813; +static const u64 KERN_TYPE = 20013; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64 | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; diff --git a/tools/test_modules/m19811.pm b/tools/test_modules/m20011.pm similarity index 100% rename from tools/test_modules/m19811.pm rename to tools/test_modules/m20011.pm diff --git a/tools/test_modules/m19812.pm b/tools/test_modules/m20012.pm similarity index 100% rename from tools/test_modules/m19812.pm rename to tools/test_modules/m20012.pm diff --git a/tools/test_modules/m19813.pm b/tools/test_modules/m20013.pm similarity index 100% rename from tools/test_modules/m19813.pm rename to tools/test_modules/m20013.pm