logo
Accueil » Ce que d’autres en disent » Le format des informations sur la carte magnétique (2003)

28/05/2014: Le format des informations sur la carte magnétique (2003)


Attention, cet article est réservé à un public averti (informaticien).

La seule analyse indépendante du logiciel DIGIVOTE rendue publique à ce jour date de 2003 (avec une mise à jour en 2004).

Ressortie de nos archives, celle-ci donne un éclairage ancien sur le contenu de la carte magnétique et les parties de code concerné à l’époque.

Sans nul doute un outil pour ceux qui voudront comprendre les bits et les bytes de ce nouveau(?) bug.

Les personnes intéressées ne manqueront pas d’analyser le Code Source des logiciels des années suivantes... en attendant plus d’explication et le code de 2014. Le bug est caché quelque part, peut-être depuis quelques années.

Appendix 3 : Layout of the data on the magnetic card.

Layout of the magnetic card data used for the Digivote automatic voting system used for the 2003 elections.

The magnetic card used for the Digivote automatic voting system is
listed as ISO 7810/7811-2 compliant. [1]

From the definition of the constant MAX_CARD_BUF as 104 [2], we can reasonable infer track 3 (ISO 4909) is used, allowing up to 104 5-bit characters.

The actual layout is as follows [3], [4] :

  • 8 chars session key. This sessionkey seriously compromises the anonymity of the voting process, as the PRNG is seeded with the time for each sessionkey generated.
  • 1 char vote flag. 0 = initial, 1 = voted, 2-9 = canceled.
  • A series of voting data for each election. These are either 8 or 34 characters each, depending on the type of elections.

The total size can be up to 80 characters.

The first four characters are the same for each type of elections :

  • 1 char election id
  • 2 chars party id (0 for blank)
  • 1 char vote type (0 party vote, 1 effective only, 2 replacement only, 3 effective+replacement) the remainder,

for type 0 elections :

  • 2 char effective
  • 2 char replacement

for type 1 elections :

  • 30 chars for up to 90 bits, one for each candidate.
  • 1 char voter type 0 = Belgian, 1 = EU.
  • 0 to 7 bytes padding with zeroes to the next multiple of 8
  • 8 chars signature / MAC

the remainder of the data is padded with zeroes.


[1College van deskundigen belast met de controle van de geautomatiseerde stemmingen en stemopneming - verslag betreffende de verkiezingen van 13 juni 1999.

[2Digivote sourcecode gen/gencard.h, line 25.

[3Digivote sourcecode rev 9.12 gen/gentype.h, lines 207-267.

[4Digivote sourcecode rev 9.13 gen/gendata.cpp, lines 907-948.