Do you Hacken?

Hier auf dem BarCamp Ruhr 2 gab es endlich Poken, der (nicht mehr ganz so) neue Visitenkarten- und Soziale-Kontakte-Ersatz aus der Schweiz. Als Early Adopter haben wir sie auch gleich mal ordentlich genutzt, und dann angefangen, sie zu hacken.

Kurz zur Funktion der Pokens: Ein Poken ist ein RFID/USB-Gerät. Hält man zwei Poken aneinander, wird (magnetisch?) ein RFID-Handshake ausgelöst, wobei die Poken-IDs ausgetauscht werden. Anschließend steckt man sein Poken an einen Rechner und ruft eine HTML-Seite auf, die auf die Poken-Webseite umleitet und Daten in der URL übergibt. Durch Tastendruck kann man außerdem einen “Discreet Mode” aktivieren, wodurch der Gegenüber keine persönlichen Daten erhält, bevor man sie explizit freigegeben hat. Auf einen Poken passen 64 Begegnungen, danach beginnt er, die ersten wieder zu überschreiben. Ich bin nicht sicher, was geschieht, wenn man Begegnungen schon übertragen hat, aber dann die 64 voll macht.

Erste Erkenntnisse:

  • Die Verschlüsselung benutzt Blockgrößen von maximal 8 Byte (64 bit). “State of the art encryption” ist also etwas übertrieben.
  • Nicht verschlüsselt sind die Poken IDs, weder die eigene noch die der Begegnungen.
  • Jede Begegnung hinterlässt einen 16-Byte-Eintrag in der HTML-Datei
  • Mehrfache Begegnungen werden auch mehrfach eingetragen
  • Poken IDs haben 4 Byte
  • Der Ghost Mode / Discreet Mode setzt lediglich ein Flag
  • In der Begegnung ist ein Timestamp enthalten (3 Byte)
  • Die restlichen drei Byte sehen zufällig aus (Checksumme?)

Scotty wies mich dann darauf hin, dass Didier Stevens in seinem “Poken Peek“-Artikel einiges davon schon beschrieben hat. Na gut, hatten wir halt Spaß beim Hacken.

Mehr morgen.

Update: Kathrin hat natürlich völlig Recht. Meine Formulierung war irreführend: Es ist Absicht, dass mehrfache Begegnungen geloggt werden, damit man eine Social Timeline bauen kann.

Update: Der Timestamp hat nur 3 Byte. Danke, Didier.

8 Replies to “Do you Hacken?”

  1. Mehrfache Begegnungen werden erkannt und trotzdem mehrfach eingetragen, weil das so gewollt ist: "Even if you’ve already connected with someone, it’s worth high-fouring your friends every time you hang out with them. You’ll be able to view all your social interactions in a timeline. The Poken high-four can become your new greeting. You can then keep track of when and how often you and your friends hang out." (http://www.doyoupoken.com/PokenWeb/corporate/howdoesitworks.jsf?panel=connect)

  2. Einfach nachlesen kann ja jeder. 😉

    Ja, ist natürlich richtig. Die Timestamps sind ja auch nicht ohne Grund da. Eintrag ist aktualisiert.

  3. Wann kommt endlich der Hack um die vollen 1GB Flash-Speicher auf dem Poken zu entfesseln?!

  4. Erst mal rausfinden, ob die Sperre von der Hardware enforced wird, oder nur ein Flag gesetzt wird. Da muss vermutlich der Lötkolben ran.

  5. First sorry for posting in English. I can read a bit of German, but can’t write it.

    Some comments:
    – I believe the data is exchanged with magnetic coupling
    – the timestamp entry in a record is 3 bytes long, not 4 bytes
    – the Poken doesn’t have 1GB of memory, it emulates a USB memory stick of 1GB. It has a 8MB memory chip and a PIC (PIC18F14K50) with 256 bytes of EEPROM.

  6. The [project website](http://tinyurl.com/cnmrvr) claims it’s RFID. The magnetic coupling serves as user feedback ("you’re doing it right") and might initiate the RFID connection, I think.

    Too bad about the 1GB 🙂 Why would it emulate a 1GB stick instead of an 8MB one? Also, the controller seems broken because trying to read the full claimed size results in a lot of I/O errors, especially towards the end. That might be the reason why the MBR claims a FAT partition of 900-something MB in the beginning and some 70 unallocated MB.

    Do you have any more info about the encryption used?

  7. The only thing about the crypto I’ve noticed and haven’t mentioned on my blogpost is this: when you’ve 2 contacts immediately after each other, sometimes they have the same timestamp. Even then the 8 "random" bytes are different between the 2 records. This probably means that the encryption is salted.

    I can’t access the link you mentioned, I’ve to provide credentials.

Comments are closed.