Partage
  • Partager sur Facebook
  • Partager sur Twitter

[NFC - Mifare 1k] Authentification, changer la clé

Sujet résolu
    26 août 2013 à 17:58:51

    Bonjour,

    j'utilise ce produit : http://www.adafruit.com/products/364 avec une carte MiFare 1k et la bibliothèque écrite par Adafruit (SPI : http://learn.adafruit.com/adafruit-pn532-rfid-nfc/arduino-library).
    Ce document à également l'air utile (notamment page 6).

    Première question :
    Comment se fait-il que l'on puisse écrire (voir par exemple l'exemple readMifare avec la ligne que l'on peut "décommenter") si l'on ne s'authentifie qu'avec la clé A ?
    => nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 11, [0 pour clé A et 1 pour clé B], [la clé]); 
    Dans le document, ils semblent écrire que pour la lecture c'est la clé A et pour l'écriture c'est la B...

    Donc je ne comprends pas.

    Ensuite, j'ai voulu changer la clé (par exemple du secteur 2 en accédant au bloc 11 - voir tableau du document).
    L'authentification avec la clé par défaut se fait.
    Puis voilà ce que j'effectue :

     uint8_t newKey[6] = { 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA };
    nfc.mifareclassic_ReadDataBlock(11, data);
              
              for (int i(0); i < 6; i++)
              {
                data[i] = newKey[i];            
              }
              
              for (int i(10); i < 16; i++)
              {
                data[i] = newKey[i];            
              }
                        
              nfc.mifareclassic_WriteDataBlock(11, data); // J'ai fait un test avec if (...) cela renvoie VRAI

    Le but étant de changer les deux clés...
    Mais ensuite, je n'arrive plus à accéder au bloc... (donc au secteur je suppose).

    Une idée ?

    Merci d'avance :)
    Soaocohoa

    EDIT : Vous pouvez voir sur le tableau entre les clés "Bits d'accès". Je les recopie, mais je ne sais pas à quoi ils correspondent.

    -
    Edité par Soaocohoa 5 novembre 2013 à 18:41:03

    • Partager sur Facebook
    • Partager sur Twitter
      28 août 2013 à 11:09:46

      Alors, personne n'a une idée ?
      :(

      Merci ^^ 

      • Partager sur Facebook
      • Partager sur Twitter
        28 août 2013 à 13:41:29

        Je présume que tu as lu entièrement la datasheet du PN532 et celle de la carte Mifare que tu utilise ?
        • Partager sur Facebook
        • Partager sur Twitter
          28 août 2013 à 20:47:01

          Bien sûr, deux fois.
          Je précise que pour ce que je voulais précédemment faire avec le PN532, j'ai réussi, et ce, sans lire quatre fois l'intégralité du site de NXP. Donc peut-être que quelqu'un a une réponse simple à apporter. 

          -
          Edité par Soaocohoa 28 août 2013 à 20:48:34

          • Partager sur Facebook
          • Partager sur Twitter
            28 août 2013 à 21:47:57

            http://www.nxp.com/documents/data_sheet/MF1S50YYX.pdf  C'est une datasheet pour une Mifare Classic 1k, vu que tu ne donnes pas le modèle précis j'ai pris ce que j'ai trouvé sur le site de NXP, mais même si c'est pas ton modèle exact, il ne doit pas y avoir beaucoup de choses qui changent.

            Chapitre 8.7 Memory Access

            8.7.2 Access to the sector trailer

            T'as un tableau qui t'explique la value des "access bits" pour changer les valeurs des clés A et B. Si tu as du mal à comprendre comment faire, une petite recherche sur le net "Mifare 1k change key" et tu devrais avoir des résultats de personnes qui veulent faire comme toi.

            Et si tu avais lu la datasheet de la Mifare, bah tu n'aurais pas poser la question sur les access bit, mais bon, je te renvoie sur ma réponse sur ton accéléromètre/gyroscope : prend le temps de lire. Tu es sur 50 000 milliards de projets à la fois et assimilier autant de datasheet c'est impossible quand on est débutant.
            • Partager sur Facebook
            • Partager sur Twitter
              28 août 2013 à 23:26:11

              Je suis en train de regarder une documentation, j'espère qu'elle correspond au produit que j'ai...
              Il y a donc déjà quelque chose qui (me) pose problème :

              Apparemment, au début, je suis censé pouvoir écrire sur la clé A, les bits d'accès et la clé B pourvu que je dispose de la clé A.

              C'est le cas. J'écris une nouvelle clé pour A, je copie sur les bits d'accès et sur la clé les valeurs qui y sont déjà.
              Alors pourquoi y a-t-il un problème lorsque je fournis la nouvelle clé A ? 

              • Partager sur Facebook
              • Partager sur Twitter
                28 août 2013 à 23:43:03

                Donc si l'on prend cette datasheet : http://www.nxp.com/documents/data_sheet/MF1S503x.pdf, page 12 (et après) :
                Je comprends bien les tableaux 6 et 7, mais je n'arrive pas (bien que je soupçonne que la figure 9 puisse être utile) à comprendre comment s'organisent les bits d'accès... A part voir que l'on stocke leur valeur et leur valeur complémentée... je ne comprends pas tout :p
                • Partager sur Facebook
                • Partager sur Twitter
                  29 août 2013 à 10:12:26

                  Je n'ai pas l'équipement donc je ne pas tester, mais après avoir regardé la doc, pour le moment le seul truc que je vois, c'est que tu ne réécris que la clé A ce qui fait seulement 6 bytes. Essaie d'écrire 16 bytes, donc la clé A (modifiée), les bits de controle, et la clé B (les même qu'avant).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 août 2013 à 10:21:47

                    "Essaie d'écrire 16 bytes, donc la clé A (modifiée), les bits de controle, et la clé B (les même qu'avant)."

                    Euh... Ce n'est pas exactement ce que j'ai fait ?
                    Par contre,  j'ai peut-être une idée, et j'ai l'impression de ne pas avoir précisé cela.
                    Si j'essaie l’authentification avec une clé qui n'est pas la bonne, est-ce que l'accès est définitivement bloqué ? 
                    Il est marqué parfois il me semble que si l'on ne respecte pas les conditions posées par les bits d'accès, ce peut-être le cas.
                    Parce qu'en premier lieu, j'avais tenté une authentification avec l'ancienne clé, pour constater que cela ne fonctionnait pas... Mais peut-être que la carte n'a pas apprécié du tout... :-°

                    Au fait, quelques explications sur l'organisation des bits d'accès ?

                    Merci :) 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 août 2013 à 11:54:58

                      Il y a encore un autre problème apparemment :
                      "nfc.mifareclassic_ReadDataBlock(11, data);"
                      Or, selon le tableau que j'ai envoyé, on ne peut pas lire la clé A.
                      Sauf que la fonction readDataBlock lit le block en entier.
                      Donc, avec cette fonction, si j'ai bien compris, je ne peux rien faire sur le "sector trailer".
                      Dommage... :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 septembre 2013 à 11:55:40

                        Salut :)
                        Est-ce qu'au final, tout le problème est résumé dans le tableau 6 ?
                        La carte n'est pas très contente puisque dès le début j'essaie de lire tout le bloc, dont la clé A, que je ne suis pas censé pouvoir lire.

                        Pour utiliser cela correctement, je devrais donc réécrire les fonctions de la bibliothèque pour cibler les bytes sur lesquels agir... mais ce n'est pas pour tout de suite :p

                        Deuxième question :
                        Pouvez-vous m'éclairez sur la façon dont sont stocké les bits d'accès ? (cf : "Je comprends bien les tableaux 6 et 7, mais je n'arrive pas (bien que je soupçonne que la figure 9 puisse être utile) à comprendre comment s'organisent les bits d'accès... A part voir que l'on stocke leur valeur et leur valeur complémentée... je ne comprends pas tout :p")

                        Merci !

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 septembre 2013 à 19:04:16

                          ... Euuuuuh...
                          Personne ne sait ?

                          Merci :)  :)  :)  

                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 octobre 2013 à 0:40:22

                            Regarde aussi la figure 10. Elle t'explique comment sont organisés les bits d'accès.

                            En gros les bytes 6,7,8 de ton bloc 3 de chaque secteur sont tes bits d'accès.

                            Ils sont placés suivant la figure 10 :

                            ¬C23,¬C22,¬C21,¬C20,¬C13,¬C12,¬C11,¬C10 (byte 6)

                            C13,C12,C11,C10,¬C33,¬C32,¬C31,¬C30 (byte 7)

                            C33,C32,C31,C30,C23,C22,C21,C20 (byte 8)

                            Après il faut que tu saches que tu as 4 accès différents, renseignés dans la table 6.

                            CX3 correspond au bloc 3,

                            CX2 correspond au bloc 2, etc...

                            Il faut faire gaffe à une chose, c'est qu'on peut bloquer l'écriture sur les bytes 6,7,8,9 d'un bloc. Si tu bloque l'écriture des bytes 6,7,8,9 d'un bloc 3, ça veut dire qu'on ne pourra plus jamais les changer. Et donc que le secteur de ta carte est plus ou moins fichu.

                            Donc pour une clé CX3, toujours laisser possible l'écriture des access bits. (soit 001, 011, ou 101, voir tableau 7)

                            Je mets généralement 011, qui ne permet pas la lecture des clés, et qui demande B pour l'écriture. (Pour moi A = lecture, B = écriture, mais tu fais comme tu veux)

                            Pour les clés des blocs (CX0,1,2), il faut que tu regardes la table 8.

                            Généralement je mets 100, ce qui fait A ou B pour la lecture, B pour l'écriture. (J'utilise du data, donc pas besoin d'incrémentation/décrémentation).

                            Mais pareil, à toi de voir.

                            Si on a bien suivi, mes clés d'accès sont donc :

                            CX3: 011

                            CX2: 100

                            CX1: 100

                            CX0: 100

                            Après un petit coup de figure 10, ça nous donne (gaffe aux inversés !) :

                            Byte 6: 0111 1000 (0x78)

                            Byte 7: 0111 0111 (0x77)

                            Byte 8: 1000 1000 (0x88)

                            Un autre grand attention cette fois, (je n'ai jamais testé, parce que je ne veux pas mettre des cartes en l'air) mais il est précisé que si les bits d'accès ne présentent pas le bon format, le secteur entier sera bloqué (on parle donc là des l'ordre des bits dans les bytes, en fasiant attention à leurs inversions).

                            C'est peut-être ce qui t'es arrivé ?

                            Si tu ne te rappelles plus des clés que tu as utilisées, il existe des outils, basés sur des attaques, te permettant de les retrouver. Contacte moi si tu en as besoin.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 novembre 2013 à 19:09:34

                              Merci !
                              Premièrement, pour que tout le monde puisse suivre (il y a deux documentations citées plus haut, et au début je ne comprenais pas parce que je ne cherchais pas dans la bonne !) : ici, il s'agit de celle-là : http://www.nxp.com/documents/data_sheet/MF1S50YYX.pdf.

                              Donc, on a un même couple de clés pour le secteur entier, mais on définit les règles d'accès pour chaque bloc de ce secteur. Est-ce juste ?


                              Mais même si je comprends, il me semble que le problème persiste :
                              en effet, si j'ai bien compris, les fonctions de la bibliothèque distribuée par Adafruit ne permettent que de lire/écrire un bloc entier.

                              De ce fait, dès le début, lorsque je lis le bloc 3, je lis la clé A, et le tableau 7 indique que je n'ai pas le droit (si j'ai bien compris CX1, CX2, CX3 définissent certaines règles pour l'accès aux blocs 0, 1, et 2 (tableau 8) et en même temps d'autres règles pour le bloc 3 (tableau 7)).
                              Et si je ne me trompe, violer les conditions d'accès entraîne un blocage.

                              Donc suis-je bloqué ?
                              (il ne s'agit pas de modifier les fonctions de la bibliothèque, je n'ai pas le temps !)

                              Merci d'avance,

                              Soaocohoa

                              -
                              Edité par Soaocohoa 5 novembre 2013 à 19:11:36

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 novembre 2013 à 22:15:11

                                Non, ne t'inquiètes pas, lire un bloc que tu n'as pas le droit de lire ne bloquera pas ta carte, il te rendra juste des 0. Tu ne bloqueras ta carte que si tu mets des bits d'accès ne respectant pas le format.

                                Tu imagines sinon ? Il suffirait de se balader avec un lecteur dans la rue pour bloquer toutes les cartes des gens ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  6 novembre 2013 à 8:22:36

                                  OK !
                                  Donc quand j'ai "read" : never, j'aurais 0 pour chaque bits de cette section.
                                  Pour "write", les données envoyées pour ces bits vont seulement ne pas être écrites ? 

                                  Merci :)

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 novembre 2013 à 16:27:32

                                    C'est ça. Si tu n'as pas la bonne clé, cela ne marchera pas.

                                    Je ne connais pas du tout le produit que tu utilises par contre, donc je ne pourrais pas t'aider au niveau du code...

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 novembre 2016 à 2:07:10

                                      Salut à tous,

                                      J'ai bricolé un spreadsheet google qui calcul le trailer block ... mais c'est du vite bricolé. 

                                      J'espère que ça pourra aider, et si qqn voit une erreur, merci de me la signaler !!! (j'ai tester avec la proposition de camiami et ça a l'air juste)

                                      Vous pouvez le copiez sans autre dans votre drive.

                                      https://drive.google.com/open?id=1D3f13-bLIxbIyT-VRbDVayCPR3p40lF3aMkLmmV1mng

                                      A+
                                      Ph.R.

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [NFC - Mifare 1k] Authentification, changer la clé

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown