Merge pull request #2593 from Akury83/master
[RRG-proxmark3.git] / tools / hitag2crack / README.md
blob883634423b0db07b301625fb1b241ad5ff4f6dd0
1 HiTag2 Cracking Suite
2 ---------------------
4 Authors:
6 * Attacks 1, 2, 3, 4 : Kevin Sheldrake <kev@headhacking.com>
7 * Attacks 5, 5gpu : anonymous, based on https://github.com/factoritbv/hitag2hell by FactorIT B.V.
8 * Attack  5opencl : Gabriele Gristina <gabriele.gristina@gmail.com>, based on 5gpu
10 Introduction
11 ------------
13 These tools are implementations of the four attacks detailed in the papers,
14 Gone In 360 Seconds - Hijacking With HiTag 2 by Roel Verdult, Flavio Garcia
15 and Josep Balasch, and Lock It And Still Lose It - on the (In)Security of
16 Automotive Remote Keyless Entry Systems by Flavio Garcia, David Oswald,
17 Timo Kasper and Pierre Pavlides.  The first three attacks come from the first
18 paper and the fourth attack comes from the second paper.
21 _note_
22 There are no Proxmark3 client implemented commands for these attacks. Only separate executables to be compiled and run on your own system.
23 No guarantees of working binaries on all systems.  Some work on linux only. 
24 There is no easy way to extract the needed data from a live system and use with these tools.
25 You can use the `RFIdler` device but the Proxmark3 client needs some more love.  Feel free to contribute.
27 Attack 1
28 --------
30 Attack 1 is a nonce replay and length extension attack.  This is an attack on
31 a single HiTag2 RFID tag, given a single encrypted nonce and challenge
32 response value pair (nR, aR) for the tag's UID.  The attack runs entirely on
33 the Proxmark3 with it acting like a RWD that replays the same encrypted nonce
34 and challenge response pair for every interaction; this fixes the key stream
35 that the tag's PRNG outputs to the same stream for every interaction.
37 By brute forcing a subset of the encrypted command space, the Proxmark3 finds a
38 single valid encrypted command - invalid commands return a known unencrypted
39 error response so finding a valid one is simply a case of trying different
40 values until a response other than the error response is received.
42 It then bit flips the valid encrypted command to find the other 15 valid
43 encrypted commands.  By knowing the contents of page 0 - it's the UID that
44 is presented in clear at the start of each interaction - it tries each
45 encrypted response in turn, assuming each to be the encrypted version of
46 'read page 0 non-inverted' and each response to be the encrypted version of
47 page 0.
49 For each attempted command, it calculates the key stream that would have
50 correctly generated the encrypted command and response:
51 command ++ response XOR key stream = encrypted command ++ encrypted response
52 therefore:
53 key stream = command ++ response XOR encrypted command ++ encrypted response
55 It then tests the potentially recovered key stream by creating an encrypted
56 command that consumes as much of it as possible, re-initialising with the same
57 encrypted nonce and challenge response pair (to set the key stream to the
58 same stream as that which produced the encrypted command response it is
59 testing), and then sending this extended encrypted command.  If the response
60 is not the error response, then the key stream is valid and the response is
61 the encryption of the page 0 contents (the UID).
63 When one of the valid encrypted commands satisfies this situation, the
64 recovered key stream must be the output of the PRNG for the given encrypted
65 nonce and challenge response pair.
67 The Proxmark3 then uses this key stream to encrypt commands and decrypt the
68 responses, and therefore requests the contents of all 8 pages.  Pages 1 and 2
69 contain the encryption key.
71 Attack 2
72 --------
74 Attack 2 is a time/space trade off to recover the key for situations where the
75 tag has been configured to prevent reading of pages 1 and 2.  This attack uses
76 a pre-computed table of 2^37 PRNG states and resultant PRNG output, sorted on
77 the PRNG output.  The Proxmark3 is used to recover 2048 bits of key stream using
78 a modification of attack 1 and this is used to search the table for matching
79 PRNG output.  When the output is found, it is tested for validity (by testing
80 previous or following PRNG output) and then the PRNG state is rolled back to
81 the initialisation state, from which the unencrypted nonce and key can be
82 recovered.
84 Attack 3
85 --------
87 Attack 3 is a cryptanalytic attack that focuses on the RWD and a bias in the
88 PRNG output.  By capturing 136 encrypted nonce and challenge response pairs,
89 candidates for the first 34 bits of the key can be identified, and for each
90 the remaining 14 bits can be brute forced.
92 Attack 4
93 --------
95 Attack 4 is a fast correlative attack on the key based on a number of captured
96 encrypted nonce and challenge response pairs (up to 32, but 16 usually
97 sufficient).  It starts by guessing the first 16 bits of the key and scores
98 all these guesses against how likely they are to be the correct key, given the
99 encrypted nonces and the keystream they should produce.  Each guess is then
100 expanded by 1 bit and the process iterates, with only the best guesses taken
101 forward to the next iteration.
103 Attack 5
104 --------
106 Attack 5 is heavily based on the HiTag2 Hell CPU implementation from https://github.com/factoritbv/hitag2hell by FactorIT B.V.,
107 with the following changes:
109 * Main takes a UID and 2 {nR},{aR} pairs as arguments and searches for states producing the first aR sample, reconstructs the corresponding key candidates and tests them against the second nR,aR pair;
110 * Reuses the Hitag helping functions of the other attacks.
112 Attack 5gpu
113 -----------
115 Attack 5gpu is identical to attack 5, simply the code has been ported to OpenCL
116 to run on GPUs and is therefore much faster than attack 5.
118 Attack 5opencl
119 --------------
121 Attack 5opencl is an optimized OpenCL version based on 5gpu.
122 It runs on multi GPUs/CPUs and is faster than 5gpu.
124 Usage details: Attack 1
125 -----------------------
127 Attack 1 requires a valid tag and a valid encrypted nonce and challenge
128 response pair.  The attacker needs to obtain a valid tag and then use this to
129 obtain a valid encrypted nonce and challenge response pair.  This can be
130 achieved by using the Proxmark3 `lf hitag sniff` command, placing the coil on the RWD and
131 presenting the valid tag.  The encrypted nonce and challenge response pairs
132 can then be read out.   
134 _note_  the Proxmark3 hitag sniff command isn't good enough yet to collect the needed data.
136 **TODO** example
139 Usage details: Attack 2
140 -----------------------
142 Attack 2 requires the same resources as attack 1, plus a pre-computed table.
143 The table can be generated on a disk with >1.5TB of storage, although it takes
144 some time (allow a couple of days, privilege SSD). This can be
145 achieved by using the Proxmark3 `lf hitag sniff` command, placing the coil on the RWD and
146 presenting the valid tag.  The encrypted nonce and challenge response pairs
147 can then be read out.  
149 _note_  the Proxmark3 hitag sniff command isn't good enough yet to collect the needed data.
151 **TODO** example
154 Usage details: Attack 3
155 -----------------------
157 Attack 3 requires only interaction with the RWD and does not require a valid
158 tag, although it does require a HiTag2 tag that the RWD will initially respond
159 to; e.g. you could potentially use any HiTag2 tag as long as the RWD starts
160 the crypto handshake with it.  It requires >=136 encrypted nonce and challenge
161 response pairs for the same tag UID.
163 _note_  the Proxmark3 hitag sniff command isn't good enough yet to collect the needed data.
165 **TODO** will be ht2 sim or sniff with actual tag ?
168 Usage details: Attack 4
169 -----------------------
171 Attack 4 requires the same information as attack 3, but only 16-32 encrypted
172 nonce and challenge response pairs are required.
174 _note_  the Proxmark3 hitag sniff command isn't good enough yet to collect the needed data.
176 **TODO** example
178 Usage details: Attack 5
179 -----------------------
181 Attack 5 requires two encrypted nonce and challenge
182 response value pairs (nR, aR) for the tag's UID.
184 **TODO** example
187 Usage details: Attack 5gpu/5opencl
188 ----------------------------------
190 Attacks 5gpu and 5opencl require two encrypted nonce and challenge
191 response value pairs (nR, aR) for the tag's UID.
193 **TODO** example
195 5opencl supports a number of additional parameters, see [crack5opencl/README.md](/tools/hitag2crack/crack5opencl/README.md) for details.
197 Usage details: Next steps
198 -------------------------
200 Once the key has been recovered using one of these attacks, the Proxmark3 can
201 be configured to operate as a RWD and will capture tags using that key.
203 **TODO** example
205 Tags can be copied with standard Proxmark3 commands.
207 **TODO** example