Forum général.général Signer un fichier

Posté par  .
Étiquettes : aucune
0
22
juin
2010
Bonjour,

je zone dans les documentations d'OpenSSL et de GNU PG pour trouver une jolie solution à un problème courant: signer un fichier.
Le genre de chose qu'on trouve dans n'importe quel dépôt de n'importe quelle distribution Linux/BSD/etc (ah... non ? Tiens, j'aurais juré).
Le moins qu'on puisse dire, c'est que je n'y trouve rien qui m'aide à comprendre :-)

Admettons que j'ai un fichier nommé fichier.dat
Je souhaite créer un certificat (auto-signé, ça suffit), puis signer ce fichier avec, afin que mes correspondant aient la certitude que le fichier viens bien de moi. J'aurais alors un fichier nommé fichier.dat.signature

Ca c'est la théorie. En pratique, je viens de passer pas mal de temps avec OpenSSL, et les docs et exemples que je trouve ne me permettent pas cela (ou alors je suis nul, hypothèse à retenir).

J'y arrive tout de même sous forme s/mime, car les exemples sont tout cuits:

# générer un certificat
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout cert.pem -out cert.pem

# générer la partie publique du certificat
openssl x509 -in cert.pem -out public.cert

# jetter un coup d'oeil
openssl x509 -text -in cert.pem
# ou
openssl x509 -text -in public.cert

# jusque là, je sais faire depuis longtemps.
# c'est la suite que je ne connais pas.

# signer avec s/mime
openssl smime -sign -signer cert.pem -in fichier.txt -out fichier.txt.signed

# vérifier
openssl smime -verify -in fichier.txt.signed -CAfile cert.pem


Avec cette méthode, si le fichier fait 1Mo alors le fichier de signature aussi. Savez-vous comment faire pour générer une signature séparée ?

Avec

# signer
openssl dgst -sha512 -sign cert.pem -out fichier.txt.sha1 fichier.txt

# vérifier
openssl dgst -sha512 -verify public.cert -signature fichier.txt.sha1 fichier.txt
# ... erreur: le fichier public.cert ne contient pas de certificat public (ah ?!)

Ca ne fonctionne pas. Dommage, ça ressemble à quelque chose de sympa, mais non, erreur.

Quelqu'un sait faire ?
  • # PGP

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

    Laisse tomber SSL, si c'est juste pour signer des fichiers et si tu n'as pas d'autorité de certification sous la main, PGP sera plus adapté. Les gens à qui tu as donné ta clef publique pourront la signer et noter ainsi, pour eux-mêmes et pour les autres, qu'ils croient que cette clef est à toi.

    Donc, avec GnuPG :

    $ gpg --gen-key
    $ gpg --sign FICHIER


    Et voilà, ce n'est pas plus difficile que ça. Pour vérifier ton fichier, accompagné de sa signature FICHIER.gpg :
    $ gpg --verify FICHIER.gpg

    Pour cela il faut disposer de ta clef publique : tu peux la diffuser sur ton site, la donner par clef USB, la publier sur des serveurs de clef…
    • [^] # Re: PGP

      Posté par  . Évalué à 3.

      Cela revient malheureusement exactement au même que s/mime avec OpenSSL: le fichier est inclus dans la signature.

      Si mon fichier d'origine fait 30 Go (une sauvegarde), alors j'ai une signature d'un peu plus de 30 Go.

      Bon, la documentation est bien meilleure
      Je fais "gpg --detach-sign mon_fichier" et hop j'ai un minuscule fichier comportant la signature, problème réglé.

      Je me penche sur les autres options.

      Merci :-)
      • [^] # Re: PGP

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

        En même temps, l'avantage d'une signature qui inclut le fichier, c'est qu'on doit pouvoir ne distribuer que ce fichier, les gens pouvant en extraire les données utiles et vérifier la signature.
        • [^] # Re: PGP

          Posté par  . Évalué à 4.

          il me semble (mais je n'y connais pas gd chose), qu'en faisant une signature détachée, on obtient le checksum du fichier signé, donc il suffit de vérifier que la signature + checksum correspondent bien au fichier en question.

          Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

  • # Taille signature

    Posté par  . Évalué à 3.

    "Avec cette méthode, si le fichier fait 1Mo alors le fichier de signature aussi."

    Non, normalement, quand tu signes un fichier, tu signes un hash.
    Fichier -> hash du fichier -> signature du hash.
  • # Signer des sommes de contrôles

    Posté par  . Évalué à 1.

    Pour répondre à un besoin similaire, je me suis inspiré de certains dépôts de fichiers qui génèrent un fichier de hash (contenant la taille du fichier et au moins 2 hash différents tels que md5 et sha1 afin de limiter les risques de génération de fichier possédant une taille et un hash identique) et qui signent ce fichier de hash.
    • [^] # Re: Signer des sommes de contrôles

      Posté par  . Évalué à 4.

      Pour info, il vaut mieux utiliser un hash de meilleure qualité (par exemple sha256, ou mieux sha384 ou sha512) que deux hash de qualité piètre.

      Notamment parce que contrairement à l'intuition, le temps de calcul pour trouver une collision sur deux fonctions de hachage en même temps n'est pas égal au produit des temps de calculs pour trouver une collision sur chaque, mais lui est largement inférieur (et pas substantiellement plus important que le temps de trouver une collision sur la plus forte des deux).
      • [^] # Re: Signer des sommes de contrôles

        Posté par  . Évalué à 3.

        Voir par exemple à ce sujet l'article de wikipedia sur les fonctions de hachage, paragraphe "concatenation of cryptographic hash functions" : http://en.wikipedia.org/wiki/Cryptographic_hash_function
        • [^] # Re: Signer des sommes de contrôles

          Posté par  . Évalué à 4.

          Je n'avait pas compris la subtilité de concaténer. Mais en fait c'est une bonne idée. Ca permet de ne pas voir tout par terre si l'un des algo est cassé.

          Pour ma part j'utilise en général 2 algo différents pour que des personnes peu à l'aise (enfin des gros nuls, car ils sont sensés être admin) puissent tout de même faire un semblant de vérification. Donc MD5 toujours (bien qu'il soit cassable théoriquement) et SHA512.
          Je vais ajouter Whirlpool alors :-)

Suivre le flux des commentaires

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