Forum Programmation.c Manipulation de clé

Posté par  (site web personnel) .
Étiquettes : aucune
0
9
avr.
2008
Bonjour à tous,

Durant mon temps libre, je bidouille en C et en crypto et je me demandais comment gérer directement (sans passer par des librairies telles GMP) des clés de 256 bits. J'entend par la générer ces clés, les stocker et les manipuler (faire des XOR avec un bloc de texte par exemple).

J'imagine que cela doit passer par des tableaux, mais n'étant pas expert dans le domaine, j'aurais voulu avoir un peu de doc sur le sujet.

Note : inutile de me renvoyer vers les codes sources d'openssl et gmp, j'y suis déjà allé mais ils sont trop complexes pour être compris rapidement.

Merci,
Julien
  • # Wikipédia, par exemple

    Posté par  . Évalué à 2.

    Les principaux algorithmes sont tous documentés, tu en trouveras toute la description sur le Wikipédia. Je te conseille de commencer par MD5, c'est probablement ce qu'il y a de plus simple. La procédure complète est décrite dans un petit synoptique.

    C'est très adapté à l'assembleur, également, si tes orientations sont la concision, l'indépendance et la performance du code.

    http://fr.wikipedia.org/wiki/MD5
    http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman
    http://fr.wikipedia.org/wiki/Digital_Signature_Algorithm
    http://fr.wikipedia.org/wiki/SHA-256
    • [^] # Re: Wikipédia, par exemple

      Posté par  (site web personnel) . Évalué à 2.

      Huumm..... ce n'est pas ma question...
      Je connais ces algorithmes et je les utilisent régulièrement via différentes API (le plus souvent, openssl).

      La, ce que je souhaite étudier, c'est les calculs sur des clés de 1024 bits (par exemple) en C.
      Comment on les stockent ? Comment on les calculent ?
      • [^] # Re: Wikipédia, par exemple

        Posté par  . Évalué à 2.

        C'est un très bon exercice d'algorithmique que d'imaginer une façon de les stocker et de les gérer.

        Par exemple, on peut les stocker comme un tableau d'entiers machine int, et faire les opérations comme à la main, avec les retenues, etc.

        Puis améliorer les divers algorithmes, etc. etc. Wikipedia donne pas mal d'infos à ce sujet http://fr.wikipedia.org/wiki/Arithm%C3%A9tique_binaire

        Pour la multiplication, il y a par exemple l'algorithme de Karatsuba http://fr.wikipedia.org/wiki/Algorithme_de_Karatsuba
      • [^] # Re: Wikipédia, par exemple

        Posté par  . Évalué à 2.

        Regarde bien l'article sur le MD5, par exemple : tout y est expliqué : l'algorithme, le synoptique, et même un bout de pseudo-code. Cela n'a rien à voir avec la description d'une API.

        Gérer une clé de 1024 bits se fait de la même manière que pour une clé de 128. Dès lors que l'on dépasse la taille d'un registre (ou des types prédéfinis), il faut vectoriser. Le plus simple est effectivement d'utiliser un tableau d'octets consécutifs.

        La plupart du temps, il s'agit de décalage et d'opération bit à bits, et de quelques opérations arithmétiques (domaines dans lesquels le jeu d'instruction d'un CPU excelle, généralement).

        Si ce qui te préoccupe en premier lieu est la manière de traiter de grands objets, cela se fait généralement comme à l'école, en arithmétique, avec une retenue du format des blocs que l'on traite. Cela peut être un bit, un octet, un long de 32 bits, etc. Par exemple, lorsque l'on calcule des CRC, on est amené à considérer tout un bloc de données comme un immense nombre qu'il faudrait diviser par une valeur fixe. Pour ce faire, le plus simple est d'utiliser l'approche habituelle : tu commences par le premier octet (ou plus précisément le premier bloc du format de ton diviseur), tu soustrais, tu décale, et tu "fais descendre" le bloc suivant simplement en allant le lire en mémoire.

        En fait, il faut se souvenir que ce qui est applicable en base 10 l'est généralement dans les autres aussi. Tu peux travailler en base 2, s'il le faut, comme en base 256,
  • # xyssl

    Posté par  . Évalué à 1.

    salut,

    j'ai eu à faire de la crypto en C et je me suis tourner vers xyssl. Le code est superbement bien écrit et facile à appréhender (beaucoup plus facile qu'openssl). Donc je te conseil vivement d'aller faire un tour sur xyssl.org

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.