Read Me
About Skraken:
Skraken is a tool to break the A5/1 ciphering used in GSM. It is a partial
rewrite of Kraken that solves its stability issues. The attack is based on
a CPU/storage tradeoff that attempts to find the internal state of the A5/1
registers given an observed keystream. The storage component requires a set
of 40 rainbow tables that totals ~1.7 TB, although any subset of the tables
can be used with a reduced success rate. Using all the tables, the success
rate of finding the internal state that generates a GSM burst is around 20%.
Skraken does not provide GPU-accelerated of the A5/1 state chains. Currently
there are no plans to implement this, although patches are welcome.
Requirements:
Compiling Skraken requires the following:
* a C++11 compiler
* cmake (>= 2.6)
* Boost (>= 1.46)
It has been tested with gcc 4.6.3 in Ubuntu 12.04. In Ubuntu, the required
libraries can be installed using:
$ sudo apt-get install g++-4.6 cmake libboost-dev
Compiling:
To compile Skraken, issue the following commands:
$ mkdir build
$ cd build
$ cmake ..
$ make
This generates the skraken binary. To install, simply copy the binary to a
binary directory, e.g.:
$ sudo cp skraken /usr/local/bin/
Copying the rainbow tables:
To use Skraken, the rainbow tables are needed. They are available as torrents
(link below), which must be downloaded and copied to a block device. This is
done using tools from Kraken (not included with Skraken). The general process
is as follows:
$ cd kraken/indexes
$ (edit the device list in tables.conf)
$ (download a set of rainbow tables)
$ ./Behemoth.py <path to downloaded tables>
Repeat step 3-4 until all tables are copied. For each table, an index file of
~80 MB is created.
Skraken usage:
See "skraken --help" for command line options. A console and optionally a TCP
socket is provided. The available commands are:
crack <bits>
Search for an A5/1 state that generates <bits>
crack <bits> <fn>
Search for an A5/1 state that generates <bits>. Perform back-clocking and
unmixing with <fn> to retrieve Kc candidates.
crack <bits> <fn> <bits2> <fn2>
Search for an A5/1 state that generates <bits>. Perform back-clocking and
unmixing with <fn> to retrieve Kc candidates. Verify the Kc candidates
against <bits2> using <fn2>.
test
Perform test search with expected hits in tables 340 and 372.
cancel <id>
Cancel processing of job <id>.
quit
For console: shuts down Skraken. For client: disconnects.
For the crack commands, <bits> is a sequence of keystream bits, normally 114
in length, and <fn> is the TDMA frame number in modified format as used by
A5/1.
Skraken responds to each command with a response. Responses have a three-
digit identifier, a number of numeric parameters, and a textual description.
The following response codes are defined:
101:
Informational message.
103:
TCP connection closed.
104:
Server was shut down.
200 <id>:
Job <id> is put in the processing queue. This is sent as a response to the
crack command and provides each job with a unique id.
201 <id>:
Started processing of job <id>.
202 <id>:
Processing of job <id> completed.
203 <id>:
Job <id> was cancelled.
300 <id> <state> <bitpos>:
A table hit was found for job <id>. <state> is the register state that
generates the keystream at position <bitpos>.
301 <id> <kc>:
A candidate Kc was found. This response is sent when a second burst was not
provided to verify the candidates against.
302 <id> <kc>:
Kc was found and has been verified against the second burst provided.
400:
Illegal command.
401:
Failed parsing arguments of command.
402 <id>:
Error while parsing job <id>.
403 <id>:
Unknown job <id> in command.
404:
Permission denied
Author:
Skraken was written by Anton Blad <trolltok@gmail.com>. Parts of the code is
taken from Kraken.
License:
The code is released under the GNU General Public License. For details, see
the file COPYING.
References:
Kraken is available at:
https://opensource.srlabs.de/projects/a51-decrypt
Torrents for the rainbow tables can be downloaded from:
https://opensource.srlabs.de/projects/a51-decrypt/files