RSA me voilà

Aux assises de la sécurité, M. Patrick Pailloux en sa qualité de directeur de l’ANSSI a annoncé que le challenge n’était toujours pas résolu !

Voici encore une raison pour se pencher sur la partie cryptographique de ce challenge. En effet, cette clé RSA est assez mystérieuse :

Lorsque nous essayons de déchiffrer un blop de données avec cette clé en utilisant openssl, nous nous prenons une erreur un peu abscons :

jshmendes@me$ openssl rsautl -encrypt \
-keyform PEM -pubin -inkey 03-green-block-PKEY.txt \
-in blop.txt
RSA operation error
140090228864672:error:04068065:rsa routines:
RSA_EAY_PUBLIC_ENCRYPT:bad e value:rsa_eay.c:178:

Après un rapide apt-get source openssl (et oui je suis sous ubuntu), nous nous lançons à la recherche de la ligne 178 du fichier rsa_eay.c qui se trouve dans ./crypto/rsa/ (Pour la petite histoire le EAY vient de Eric A. Young)

/* for large moduli, enforce exponent limit */
if (BN_num_bits(rsa->n) > OPENSSL_RSA_SMALL_MODULUS_BITS)
{
  if (BN_num_bits(rsa->e) > OPENSSL_RSA_MAX_PUBEXP_BITS)
  {
    RSAerr(RSA_F_RSA_EAY_PUBLIC_ENCRYPT, RSA_R_BAD_E_VALUE);
    return -1;
  }
}

Donc visiblement, notre clé ne correspond pas au standard auquel s’attend l’ami openssl.

Regardons y d’un peu plus près avec l’excellent outil de M. Peter Gutmann:

jshmendes@me$ ./dumpasn1 pkey.der
   0 1057: SEQUENCE {
   4   13:   SEQUENCE {
   6    9:     OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
  17    0:     NULL
         :     }
  19 1038:   BIT STRING, encapsulates {
  24 1033:     SEQUENCE {
  28  513:       INTEGER
         :         00 83 0F 5B BA 9D 3A C5 D5 81 93 01 B6 DF 98 B9
         :         2D 1B D0 5D A1 5D A1 4E D2 02 73 ED 62 38 8D 19
         :         26 5D 3B DE 8E D7 57 8A AB 6A 43 1C B1 87 C7 13
         :         AF 39 1E E8 3A 83 64 F2 98 83 4D 87 BB 90 EE DA
         :         93 74 71 59 B5 96 72 52 75 BB 37 52 F6 30 A8 AB
         :         C0 7E 8B 16 9F 80 0E BC 21 E5 91 F3 1D E2 23 33
         :         17 0C 21 B2 3D A2 8F 5C 21 43 C6 E1 25 9E 78 22
         :         30 1B 3D 73 7C C1 7F CE CA 55 18 6D 93 72 2E 60
         :         1B D4 62 07 FA 58 95 10 18 18 E4 C5 C0 C1 A2 94
         :         00 58 0C 7E 4B 00 23 DB 62 41 EB 2F D0 1B 24 91
         :         D7 60 7F 7B 8B 14 F5 D0 CF 7F 99 39 98 B0 85 AF
         :         A6 6F A0 80 29 A9 DA DF 9C 87 06 5E C3 63 1B 3C
         :         03 45 9F AA BB 1E 7A B3 F8 A5 1F C2 7F DF 2F AB
         :         D8 38 F4 69 CE 5F 4C D9 5E 85 A6 B1 7A F0 68 EB
         :         AB 9C FF 94 D6 F4 B1 A7 B6 93 BE 01 6D 44 6D 34
         :         C7 E5 E3 23 02 12 9C FB CB 60 25 6F 48 0E A4 91
         :         75 F3 29 69 E9 B2 62 7B F0 2D 17 D0 60 45 8E 55
         :         B6 67 ED 19 DC C3 BE F1 37 94 2C 86 55 B3 5C 1C
         :         50 1D 74 75 30 68 65 59 18 AA 71 F1 DD D7 DB 50
         :         B6 A5 1A DA 05 E6 AD 20 E4 F1 27 1F 77 45 9A E4
         :         02 39 E4 0C 8E 7A 2D C7 B2 15 F6 9A 0B F8 F0 63
         :         9A 3C 40 28 9D 47 EC 29 4C 39 B8 C1 68 12 D1 A4
         :         39 B8 F7 9B 71 9E 1B C3 6F 73 E6 75 44 35 DA BF
         :         05 4D 66 B2 57 C4 B6 88 68 6E AA C2 99 77 1C 5E
         :         08 6E E5 16 5F 72 D3 F3 FA 7E 63 2D D3 5A 6F A3
         :         3A 21 B9 F4 F2 6E EC 3E E0 FC 6A F6 53 1C D9 9E
         :         3C 33 DD 8D 6C 03 AB 8C F8 F4 BE AE ED DB 88 75
         :         6B 8B C3 F4 79 61 19 25 82 1D 10 83 E3 8F 22 B8
         :         11 DA A2 06 BB BC 49 8B C1 F7 1D 2E C2 AB 21 8D
         :         0B 7A D5 BC 09 1F FC FD 7E DA 59 95 8F 97 92 9A
         :         97 B7 90 EE 72 E9 CB 3C 6F 46 8A 12 06 71 D3 1E
         :         6A DE C2 C2 B3 A6 8B 0C EF C6 BB 80 C9 26 40 82
         :         33
 545  512:       INTEGER
         :         0D 91 2C C1 4E BE CB C4 97 C2 F2 0A 1E 40 42 54
         :         4B 8A 90 88 B1 FC F0 B0 51 6D 54 B6 2E 6E 49 2D
         :         15 A8 01 0B 62 EC 06 07 AD 15 DF A5 D0 86 E3 33
         :         19 DB A2 12 5F 26 B4 62 CE 46 07 38 06 E3 99 B3
         :         53 D9 22 0D 3C E4 01 89 61 D3 A1 E7 A7 C8 A7 9E
         :         CC 16 36 B1 88 B3 83 5A 79 11 3D 09 56 21 85 5D
         :         93 FA 81 19 14 3C E1 3E D5 DA A4 2F 2F 51 9C FA
         :         95 3E 52 64 D7 8E EA 85 BA 96 F9 07 36 A0 AA 61
         :         7E 49 09 39 90 AF 81 35 DB 03 A1 A1 AE E8 25 29
         :         69 9B B3 D6 D7 DB A7 9C AE C9 B3 D5 D3 74 43 4F
         :         D4 54 D6 22 FB AF 3E 72 5C 6E 16 21 30 10 E4 D9
         :         CA 9C F8 53 9F D6 89 98 AF 27 3D 3D FF 05 0E 6F
         :         2C CD CC 93 FC B7 07 43 C5 0D D9 62 7A 39 20 84
         :         0E 16 E2 D4 92 1A B0 A1 3B F6 31 F0 7C DC 1B 9E
         :         DC 53 31 5B D7 F7 91 9E 08 F7 1D D3 C9 33 21 63
         :         3F 78 44 6B 6E B0 E1 D2 F5 E7 FD 0B 68 21 63 B8
         :         B5 34 F6 1C 2D 39 2C 0E 04 77 F6 05 62 B8 1B 18
         :         A6 9A 73 6C E4 1C E1 94 49 EE 00 5B 1B 7E 89 13
         :         C1 BC A3 5C A2 67 95 0A D6 2B 81 E7 B1 76 66 36
         :         47 5A A5 2B 79 3F 28 33 A0 8F CC 07 F6 7B C3 1C
         :         C5 10 AB E7 62 52 AC 76 1D B3 D9 17 8F 28 4E 31
         :         C4 EF 91 5D EB CB 70 35 33 BE 4F F5 65 EB E0 95
         :         49 F1 68 15 9C 02 35 5E 9F F8 02 EF CA 3A 04 3A
         :         EA B0 14 39 E4 D1 8F 92 5E FB F4 DB B6 22 F8 B5
         :         C4 FE 61 17 14 D4 6E 1B A9 3D DB 5D AB 11 1F 91
         :         7A AF 37 4B B8 CB 27 60 5D 10 DF 21 B9 8A BF 7E
         :         E8 D5 2C 88 8C 77 A9 BC 7F 4B 5F 1E 95 73 C4 51
         :         45 BF 08 CC B1 12 A0 EE AC E6 5C 54 1C AB 52 DA
         :         C9 82 D1 32 51 D1 2E D6 3A CC 06 8C 6F 76 B3 7F
         :         DF E4 CE 58 88 76 F9 22 CC 84 45 D9 8C FE 75 D7
         :         FD 1D 97 B1 5C C9 40 54 E2 8E C3 C3 F7 90 BC 5E
         :         90 40 2F 0A 55 67 43 8E B3 56 58 51 B0 BD 3A 11
         :       }
         :     }
         :   }

Pour les aficionados d’openssl, vous pouvez aussi utiliser la commande suivante :


jshmendes@me$ openssl asn1parse -inform PEM -in PKEY.txt

Ah ha ! Voici qui est intéressant : Nous avons deux nombres de (très) grande taille : environ 4096 bits chacun.

4096 bits cela fait beaucoup pour un exposant public RSA, surtout lorsqu’on sait que dans la majorité des clés RSA l’exposant public aussi connu sous le sobriquet de e vaut 65537 : un nombre de 17 bits.

Ceci explique donc pourquoi notre bon vieil openssl part en erreur. D’ailleurs voici une petite note sur le sujet en rapport DNSSEC !

Bref, voici une caractéristique bien singulière de cette clé RSA… Nous nous penchons dessus et revenons vers vous !

Publicités

A propos JoMendes

Amateur de mathématiques et d'hexadécimal. Je m'intéresse de près ou de loin suivant mon niveau à tous les sujets de sécurité de l'information.
Cet article, publié dans Challenge ANSSI, Cryptographie Asymétrique, est tagué . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s