Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/04/2006, à 04:22

Lknight

Question de Cryptographie : Signature numérique

Voilà je me posais une bête question, lorsqu'on signe un fichier digitalement, cmt en pratique cela se passe, je sais en gros comment cela se passe, mais ce qui me pose problème c'est la signature du fichier proprement dite, est-ce que la clé de signature générée est placée par watermarking sur le fichier ou alors est-ce que lorsque le programme à généré les clés, il place la clé de signature dans une partie du fichier non lisible par l'utilisateur lambda ? ou alors j'ai rien compris?

PS : C'est parce que j'ai besoin de comprendre pour mon mémoire, cette etape m'echappe, c'est p-e con, mais ca m'echappe.

Merci.


- LK -
-------------------------------------------------------
DAMNED!  Why is it always 42 !!
I hate this fucking calculator!

Hors ligne

#2 Le 15/04/2006, à 04:36

amadeus

Re : Question de Cryptographie : Signature numérique

Qu'est-ce que tu entend par "non lisible par l'utilisateur lambda"?


Dumbledore returns from the dead and declares it to be hammertime, Harry proceeds to break it down, Voldemort is unable to touch this.

Hors ligne

#3 Le 15/04/2006, à 08:04

Black_pignouf

Re : Question de Cryptographie : Signature numérique

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

http://www.gnupg.org/(fr)/index.html

Réponse: ca dépend de ce que tu choisis. Soit tu signes le fichier
séparément pour ne pas le modifier (genre fichier binaire qui ne
fonctionnerait plus sinon). Tu peux signer le texte (comme à la fin) en
clair dans le message (crypté en 7 bits), ou signer en 8 bits, ce qui rend
le message impossible à lire sans GPG.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

iD8DBQFEQIzeLZ1XcYQlaCERAsNdAKCliYlcM3hGg8T83z8r81lWBXsxyACgqoYm
OUK2kluZXMdESgSZXkIPn1g=
=ok9e
-----END PGP SIGNATURE-----

Hors ligne

#4 Le 15/04/2006, à 14:02

Lord Alembert

Re : Question de Cryptographie : Signature numérique

Les signatures de fichier sont basées sur des chiffrements à clef asymétrique, comme RSA.

En général, on chiffre le condensé du fichier, mais en inversant la clef secrète et la clef privée.

Donc, Alice chiffre avec sa propre clef privée. Pour que Bernard vérifie que c'est bien Alice qui a signé (et en plus s'assurer que le fichier est correctement transmis), celui-ci déchiffre le condensé avec la clef publique d'Alice (que tout le monde peut avoir).

Si on retombe après déchiffrement sur le condensé du fichier envoyé, c'est que

1- C'est bien Alice qui a chiffré le condensé (car elle seule possède sa clef secrète), et donc on a sa signature sur ce fichier.

2- Le fichier est resté intact, sans quoi le condensé calculé par Bernard et celui déchiffré ne seraient pas les mêmes.


Pour signer une image, on utilise en général une autre technique qui consiste à cacher de l'information dans les zones de fort contraste de l'image (typiquement, à la bordure entre deux objets représentés).

Plus précisément, on réalise un tatouage par étalement de spectre. Cela consiste (en gros) à créer un tatouage représentant une variation de luminosité dans l'image. Cette variation est définie par une 'tôle ondulée'  elle-même définie en fréquence et en direction par une clef secrète. On applique le tatouage à l'image originale, l'image obtenue n'est visuellement pas différente de l'original car le tatouage est surtout effectif dans des zones où l'oeil ne peut pas bien percevoir les différences de luminosité.

Pour vérifier la présence de tatouage, on extrait de la transformée de Fourier de l'image tatouée le signal caché. On prend alors la transformée de Fourier inverse, et on retombe sur le masque. Même si le masque n'est plus exactement le même qu'à l'origine (on a déformer l'image, ou on l'a compressée en la dégradant, ce genre de choses), on peut quand même déterminer si les deux masques correspondent.

Et donc on peut dire si l'image traitée correspond à l'image originale, même si on l'a légèrement modifiée.

Remarquez qu'on peut combiner les techniques : je crée une image tatouée avec ma clef secrète, et je vous donne l'image tatouée. Si je vous prouver qu'une image que vous avez est à moi, il suffit de déchiffrer l'image avec ma clef publique (tout le monde peut le faire, même une tierce personne) et comparer le masque obtenu avec celui qui m'a permis de tatouer l'image.

Ainsi je peux franchement mettre mes images bien copyrigthées sur internet, je saurais prouver que vous me les avez volées...

Cf "Le tatouage des images numériques", dans le "Pour la science" HS de juillet/octobre 2002 pour la deuxième partie.

Dernière modification par Lord Alembert (Le 15/04/2006, à 14:10)

Hors ligne

#5 Le 15/04/2006, à 14:46

Lknight

Re : Question de Cryptographie : Signature numérique

Le truc c que je vais implémenter un système de signature à clé publique tel que RSA (plutot DSA en fait), sans GPG (mon programme dois posséder son propre systeme) je dois signer le fichier (un fichier source, tel un ".C") et permettre qu'il sois lisible et modifiable après signature.
mais ce que je ne comprend toujours pas c'est comment integrer la signature au fichier et permettre la verification par mon programme par apres?
je pensais à un système melant la stéganographie et DSA, ainsi après generation des clés, tatouerais le fichier, le tatouage se composerais du nom du créateur du fichier et de la clé, de ce fait mon programme verifieras si la signature correspond et me diras si le fichier a été modifié, une modification entraineras une vérification érronée etant donné que l'empreinte signée n'est plus la même comparée à l'actuelle.
je ne sais pas si c faisable. je dois dire que je m'en-mêle dans mes neurones :-s

Dernière modification par Lknight (Le 15/04/2006, à 14:48)


- LK -
-------------------------------------------------------
DAMNED!  Why is it always 42 !!
I hate this fucking calculator!

Hors ligne

#6 Le 15/04/2006, à 15:47

Lord Alembert

Re : Question de Cryptographie : Signature numérique

Pourquoi passer par la stégano? Ca va te compliquer considérablement la tâche pour rien!

Bien sûr ca lie la signature au fichier, mais tu vas devoir manipuler des images 2-3 fois plus grosses que les fichiers d'origine, et à la moindre modification de l'image tu perds et le fichier et la signature...

Pour un fichier quelconque, il faut chiffrer la hash du fichier avec ta clef privée. Une fois que c'est fait, il faut lier le tout. Soit tu crées un fichier texte contenant d'une part le nom du fichier signé et d'autre par le hash chiffré (c'est ce qu'on fait d'habitude avec GPG), soit tu crée un tar ou un zip et dedans tu mets le chiffré du hash + le fichier clair. Ton programme doit alors lire le tar/zip et en extraire les deux entrées, alors qu'avec la première méthode il ne fallait pas manipuler de tar/zip mais il fallait se trainer 2 fichiers.

Note que si tu fais un tout-en-un, tu peux en profiter pour y placer ta clef publique.

Je suis en train de faire ce genre de chose en Java avec RSA. Plus précisément, j'ai un flux de données en entrée. Je le compresse, je le chiffre par XOR (la clef XOR est établie au hasard). Ensuite j'envois dans un zip ma clef publique, un chiffrement du hash (pour signature), la clef XOR chiffrée par RSA et enfin le fichier chiffré lui-même.

Quand on veut déchiffrer ou autentifier le fichier, on ouvre le ZIP, on déchiffre la clef XOR par RSA, avec la clef XOR en clair on peut déchiffrer le fichier. On peut alors établir son hash. On déchiffifre le hash chiffré (avec ma clef publique fournie) et on compare les deux hash pour vérifier la signature.

Finalement le fichier clair est transmis comme flux de sortie pour en faire ce qu'on veut.

Hors ligne

#7 Le 15/04/2006, à 23:48

Lknight

Re : Question de Cryptographie : Signature numérique

Mon programme a pour but de verifier l'integrité des données saisie dans le source et ce n'est pas une bonne aproche en ce qui me concernerais, car mon programme est un editeur de texte, avec ce dernier, je dois pouvoir signer le fichier tout en le laissant lisible en clair et modifiable, en gros j'aurai un fichier source (par ex: source.cpp) sur lequel je v signer, je dois pouvoir aussi en tirer le(s) nom(s) de(s) auteur(s) du fichier si demandé, c'est pourquoi je voulais "watermarker" le fichier avec le(s) auteur(s) et l'empreinte signée, ensuite ce fichier dois pouvoir éventuellement être compilé/interprété tel quel par un compilo sans aucune manipulation(s) de(s) l'auteur(s).
Je ne vois pas bien comment procéder, je connais la théorie mais la pratique non, c'est ce qui me pose problème dans le cas qui m'occupe.

Si quelqu'un vois ce que je vx dire et cmt proceder je suis ouvert à toutes les suggestions, c'est un programme pour mon mémoire.

Merci beaucoup.


- LK -
-------------------------------------------------------
DAMNED!  Why is it always 42 !!
I hate this fucking calculator!

Hors ligne

#8 Le 16/04/2006, à 11:00

Lord Alembert

Re : Question de Cryptographie : Signature numérique

Le problème du tatouage c'est qu'il déforme de support. Ca ne cause pas de problème pour une image ou pour du son, car l'oreille ou l'oeil n'est pas assez sensible pour détecter la perturbation.

Si tu veux utiliser cette technique sur un fichier quelconque (un fichier de texte dans ton cas), il faut que la modification n'endommage pas la structure du fichier, sans quoi il deviendrait illisible pour l'ordinateur, ce qui est intolérable.

On pourrait planquer le tatouage dans les zones inutilisées du fichier, mais il faut que de telles zones existent et en quantité suffisament grande pour pouvoir mettre toute l'information. Pire : Si je sais que le tatouage est écrit dans une zone qui n'affecte en rien la lecture du fichier, il me suffit d'écraser ces zones avec de l'aléa pour qu'il n'y ait plus de tatouage. Même principe si le tatouage est écrit dans un commentaire, il suffit que je l'enlève pour que le tatouage s'en aille.

De toute façon dans un fichier texte pur il n'y a pas de telle zone "cachée", chaque octet est utilisé pour stocker des caractères.

Donc pour du texte, tu es obligé de stocker l'information à part, sans quoi le fichier sera abimé et donc significativement différent de l'original.

Ce que je ferais, c'est d'écrire en commentaire l'auteur du fichier. Puis, je signe un condensé le fichier (avec RSA ou autre). Tu écris cette signature dans un fichier à part. Si on veut vérifier l'auteur du fichier non modifié, il suffit de déchiffrer la signature et vérifier qu'il s'agit du même condensé que celui obtenu à partir de l'original.

Mais évidement il faut fournir la signature avec le fichier, ou bien le donner à la demande. Attention que contrairement au tatouage ton travail ne sera pas préservé : il suffit que j'enlève ton nom dans le commentaire, de supprimer le tien et de signer le nouveau fichier pour prétendre être l'auteur du fichier. Bref cette signature n'est pas résistante aux changements, elle permet juste de dire "oui, le fichier que j'ai devant les yeux a été signé par Marcel, mais peut-être qu'il n'a fait que mettre son nom en commentaire du travail d'un autre".

Si tu veux qu'on ne puisse pas voler ton travail, tu es obligé de chiffrer le fichier même afin que Marcel ne puisse pas l'ouvrir et changer les noms, puis créer sa propre signature.

Aussi, si tu utilises la stégano pour transformer ton fichier en image, un compilateur ne pourra plus le lire wink donc cette solution ne te convient absolument pas.

Dernière modification par Lord Alembert (Le 16/04/2006, à 11:02)

Hors ligne

#9 Le 16/04/2006, à 15:54

Lknight

Re : Question de Cryptographie : Signature numérique

mon travail a pour but de verifier l'integrité du code, donc de verifier si aucune modif n'a été effectuée par un attaquant lors de l'absence de l'auteur, d'où la signature, ainsi lors de la verification si quoi que ce soit a été modifié, ca ne devrait plus passer lors de la vérif, je me trompe?

je pensais integrer le tout au fichier, mais puisque ce n'est pas possible de la faire sans altérer l'original, je pense alors faire une image, contenant la signature et le(s) auteur(s), le tout encrypté et tatoué par watermarking et me debrouiller pour ne pas compliquer la vie de l'utilisateur avec des clés de décodage multiples, je pense utiliser la clé de vérif de signature pour decrypter et verifier en une seule étape, evidamment le fichier de signature accompagne le fichier. donc de ce fait, je ne me trompe, si quoi que ce soit dans le fichier est altéré, lors de la vérification de l'empreinte, ca ne passeras plus et donc j'avertirai l'utilisateur de l'erreur. est-ce correct? ou j'oublie quelque chose en court de route?

merci deja à tous pour vos conseils et explications wink


- LK -
-------------------------------------------------------
DAMNED!  Why is it always 42 !!
I hate this fucking calculator!

Hors ligne

#10 Le 16/04/2006, à 17:09

Lord Alembert

Re : Question de Cryptographie : Signature numérique

En effet, si le fichier a été modifié ne fut-ce que d'une seule lettre, la signature sera très différente.

Si le but c'est que l'auteur vérifie que son propre travail n'a pas été modifié, il n'est pas nécessaire de signer : un simple chiffrement du condensé suffit. Pour vérifier le contenu, il déchiffre et compare avec le condensé nouvellement calculé. Même plus besoin de clef asymétrique, vu que c'est l'auteur qui est vérifieur.

Je répète que si tu mets tout dans une image, tu auras des problèmes de tailles, des problèmes d'insertion/extraction, des problèmes de calculs à cause de Fourier. De plus je peux conserver le tatouage de l'image et perdre le travail qu'elle contient, ta sécurité est donc cassée sans que je connaisse la clef.

Le tatouage est intéressant, bien que difficile à implémenter. Mais pourquoi veux-tu absolument l'utiliser alors que cette technique est complètement à coté de la plaque ici?

Hors ligne

#11 Le 16/04/2006, à 17:45

Lknight

Re : Question de Cryptographie : Signature numérique

je dois avoir un système de signature afin de permettre d'identifier la ou les personne(s) ayant travaillé sur le code, et donc pour ce faire je dois implémenter un système à clé publique (RSA, DSA, plutot DSA car RSA est cassé depuis lgt) et integrer le tout dans mon programme. à la réouverture du fichier, mon prog va vérifier la signature et l'integrité, ainsi si le collègue du premier programmeur modifie le code source, il signeras le fichier à l'enregistrement, mais lorsque le premier programmeur reviendras, il pourras voir qui a modifié le code en son absence, ainsi par exemple si une personne tierce viens modifier le code avec un editeur externe, la verif seras erronée mais aucun nouvel utilisateur ne seras present, le fichier auras donc été falsifié.

non non, pas tout mettre dans une image, seulement la signature et le nom de l'auteur, ou alors dans un autre fichier qui n'est pas une image peu importe, c'etais de pouvoir integrer la signature et le nom de l'auteur qui m'interressais. je voulais au départ integrer la signature au fichier d'origine, mais cela semble peu faisable. je suis certain que certaine choses m'echappent mais je ne vois pas quoi.

Si tu le vx, je t'envois par email mon énoncé de base. Je précise que ce sujet m'a été proposé par un des mes anciens prof d'unif en sécurité informatique (en effet suite à un incident de parcours je me retrouve à faire un cursus de merde, hors unif, que je deteste, mais bon, en sortie ca me feras un papier pour bosser voir prendre d'autres cours); j'étais à cours d'idée, et mnt je suis en retard lol, de pls mois ^^ (non suis pas fier :-s)

Dernière modification par Lknight (Le 16/04/2006, à 17:50)


- LK -
-------------------------------------------------------
DAMNED!  Why is it always 42 !!
I hate this fucking calculator!

Hors ligne

#12 Le 16/04/2006, à 18:02

Lord Alembert

Re : Question de Cryptographie : Signature numérique

RSA, DSA, plutot DSA car RSA est cassé depuis lgt

RSA-256, oui. On prévoit de casser RSA-1024 vers 2035 aux dernières nouvelles. Plus tu donnes une longue clef, plus elle tiendra longtemps à une attaque par force brute ou factorisation.

Je veux bien voir l'énnoncé, mon email est disponible en cliquant sur mon nom.

Avec ces nouvelles données, je ne pense pas qu'il soit nécessaire de transmettre le signataire : tu verras bien quelle clef publique permet d'authentifier la signature. Si tu ne veux pas les passer toutes en revue (s'il y a beaucoup de clef), tu peux lier la signature et la clef publique en un fichier unique, comme je disais au début ou alors faire en sorte que la signature commence par le nom du signataire.

Attention qu'une tierce personne ne signe pas de lui-même un fichier modifier : il faut s'assurer non seulement que la signature est valide, mais aussi que la personne qui a signé soit digne de confiance.

Dernière modification par Lord Alembert (Le 16/04/2006, à 18:03)

Hors ligne