Que sont les signatures numériques et comment fonctionnent-elles ?
Les signatures numériques sont un peu comme des versions électroniques de vos signatures manuscrites. Ils permettent aux gens de vérifier le authenticité et intégrité des données , ainsi qu'empêcher le signataire de pouvoir répudier (nier) son implication.
Ces propriétés ont conduit à l'adoption des signatures numériques dans un large éventail d'applications, notamment bon nombre de nos protocoles de sécurité, la messagerie sécurisée et la gestion des droits numériques.
Dans cet article, nous discuterons que sont les signatures numériques , où ils sont utilisés, ainsi que les détails techniques de deux des algorithmes les plus populaires, RSA et DSA .
Que sont les signatures numériques ?
Comme indiqué ci-dessus, les signatures numériques nous confèrent trois propriétés très importantes. Il s’agit de l’authentification, de l’intégrité et de la non-répudiation.
Authentification est le processus permettant de vérifier que la personne qui envoie un message est bien celle qu'elle prétend être, et non un imposteur.
Le intégrité de données ou d'un message indique s'il est arrivé dans le même état que lors de son envoi. Si un message a été modifié ou falsifié, il ne conserve plus son intégrité.
Si des données ou un message sont non répudiable, cela signifie que son auteur ne peut contester qu'il est le véritable créateur du document. Cette propriété élimine le déni plausible, ou la vieille excuse « Désolé, mon ami utilisait mon compte ».
Tant que la clé privée de l’individu n’a pas été compromise, les signatures numériques peuvent fournir ces trois propriétés aux données.
Vous vous demandez peut-être pourquoi nous avons besoin de ces propriétés en premier lieu. Prenons du recul et réfléchissons à la façon dont nous faisons les choses lors d’une rencontre en face à face.
Disons que vous devez 100 $ à votre ami Mike. Vous êtes une bonne personne, vous êtes donc heureux de le rembourser lorsque vous recevez l’argent.
La meilleure façon de le faire serait de simplement donner un billet de 100 $ à Mike. Vous le connaissez depuis des années et savez à quoi il ressemble, alors ce seraitfacile de vérifier son identité et ainsi authentifier que vous donnez l'argent à la bonne personne.
Si vous étiez vraiment anal, vous pourriez même vérifier sa carte d'identité et lui faire signer un reçu manuscrit pour vous.La signature sur le reçu lui donnerait son intégrité et le rendrait non répudiable.
Et si, au lieu d'effectuer la transaction en face à face, vous receviez un appel de quelqu'un vous disant qu'il s'agit de Mike et que vous devriez envoyer 100 $ au numéro de compte 12345678.
'Mais tu ne ressembles pas à Mike', dites-vous.
'J'ai un rhume. Envoyez-le maintenant, j’ai besoin d’argent.
Enverriez-vous l'argent ? Probablement pas.
Il n'y a aucun moyen de savoir s'il s'agit réellement de Mike ou du bon numéro de compte. Pour autant que vous le sachiez, il pourrait s’agir d’un imposteur qui essaie de vous voler. Au lieu de transférer l’argent immédiatement, il serait préférable d’attendre de voir Mike pour pouvoir lui remettre l’argent en personne.
Tout comme dans le scénario ci-dessus, nous nous trouvons fréquemment dans des situations où nous devonsvérifier l'identité d'une partie ou l'intégrité des données dans le monde en ligne. C’est pourquoi les signatures numériques sont devenues un mécanisme capable de fournir ces propriétés et de faciliter des transactions en ligne sécurisées.
Sans eux, nous ne pourrions pas savoir à qui nous parlons, nous ne pourrions pas être sûrs si les données ont été falsifiées ou non, et la personne pourrait nier qu'elle en était responsable.
Les utilisations des signatures numériques
Ces propriétés des signatures numériques les rendent utiles dans une grande variété d'applications. Ils sont souvent utilisés seuls ou en conjonction avec le cryptage dans une gamme de protocoles de sécurité différents, tels que :
- IPsec
- SSH
- TLS
Ils sont également fréquemment utilisés dansgestion des droits numériques, dans technologie blockchain , dansla gestion des contratscandidatures, dans le cadre deDistribution de logiciels, et enfinance.
Histoire des signatures numériques
L’idée des signatures numériques a été lancée pour la première fois par des cryptographes renommés Whitfield Diffie et Martin Hellman dans leur papier de 1976 Nouvelles orientations en cryptographie. En 1978, Ronald Rivest, Adi Shamir et Len Adleman ont présenté au public l’algorithme RSA, qui pourrait être utilisé pour produire des signatures numériques non sécurisées.
Il a fallu encore une décennie pour que les signatures numériques émergent dans une application généralisée : la sortie du logiciel IBM LotusNotes 1.0 . À partir de ce moment-là, les signatures numériques ont commencé à être plus largement adoptées à mesure que de nouvelles techniques émergeaient et que le besoin d’authentification et de contrôle d’intégrité en ligne augmentait.
Une brève introduction à la cryptographie à clé publique
Avant de nous lancer dans les signatures numériques, il est préférable d'aborder certains des aspects importants de la cryptographie à clé publique,qui constituent la base du fonctionnement des signatures numériques.
Si vous êtes relativement nouveau dans le domaine de la cryptographie, le système que vous connaissez le mieux est le cryptage à clé symétrique. Cela signifie simplement que la même clé (qui est similaire à un mot de passe, mais présente quelques différences) est utilisée à la fois pour crypter et déchiffrer les données.
Le chiffrement à clé publique a été une révolution, car il impliquaitutiliser des clés distinctes pour le processus de cryptage et de déchiffrement, conduisant à une gamme d'applications cryptographiques différentes. Ces deux clés formaient une bi-clé, composée de la clé publique et de la clé privée. La clé publique peut évidemment être partagée publiquement, tandis que la clé privée doit rester secrète pour que le système soit sécurisé.
Les deux utilisations les plus courantes de la cryptographie à clé publique sont le chiffrement et les signatures numériques.
Chiffrement
L'une des caractéristiques révolutionnaires de la cryptographie à clé publique était queil permet à des parties qui ne se sont jamais rencontrées de s'envoyer des messages de manière confidentielle. L'expéditeur recherche la clé publique du destinataire souhaité (celles-ci peuvent être trouvées sur des serveurs de clés publiques, sur des sites Web personnels ou simplement en demandant à l'individu), puis crypte un message avec cette clé, avant de l'envoyer au destinataire.
Le destinataire est la seule personne qui peut accéder au message (en supposant que la clé privée n'a pas été compromise) en le déchiffrant avec sa clé privée. Même si la clé publique a été utilisée pour chiffrer le message, celui-ci ne peut être déchiffré que par la clé privée. Si le destinataire souhaite répondre, il trouve la clé publique de l'expéditeur d'origine, puis répète le processus.
Voir également: Types de cryptage courants expliqués
Comment fonctionnent les signatures numériques ?
Comme nous l'avons dit, les signatures numériques sont utilisées pour l'authentification, pour vérifier si les données ont été falsifiées et pour assurer la non-répudiation. Il existe une gamme de mécanismes différents qui peuvent être utilisés pour les signatures numériques, et chacun présente de légères variations dans la façon dont ils sont structurés.
En général, ces algorithmes doivent être composés de trois sous-algorithmes :
- Un algorithme de génération de clé – Cet algorithme génère une paire de clés aléatoires pour un utilisateur. Les numéros impliqués dans la paire de clés doivent respecter certains paramètres pour être considérés comme sécurisés. Deux des aspects les plus importants sont que les nombres soient suffisamment aléatoires et de taille adéquate.
- Un algorithme pour signer des données – Une fois qu'un utilisateur possède ses clés, il existe des manières spécifiques de les appliquer aux données dans le processus de signature.
- Un algorithme de vérification de la signature – De même, la vérification d’une signature suit un processus prédéterminé.
Pour qu’un système de signature numérique soit efficace, il doit être structuré de telle manière que :
- Les données signées avec une clé privée sontvérifié avec la clé publique correspondante du même individu.
- Il devrait être pratiquement impossible (avec la technologie et les techniques actuelles) de falsifier une signature valide sans connaître la clé privée de l’individu.
Certains des systèmes de signature numérique les plus courants incluent RSA, DSA, EcDSA et EdDSA.
Cette image donne une représentation visuelle des processus de signature et de vérification. Diagramme de signature numérique par Acdx sous licence CC0
RSA
RSA a été le premier algorithme de signature numérique, mais il peut également être utilisé pour le chiffrement à clé publique. Dans cet article, nous passerons l’aspect chiffrement, mais vous pourrez en savoir plus à ce sujet dans notre article complet qui couvre qu'est-ce que le RSA et comment il fonctionne .
Génération de clé RSA
Dans les implémentations sécurisées de RSA, les paires de clés seront généralement établies automatiquement selon le processus suivant :
Première génération
Deux nombres premiers individuels sont sélectionnés, p et q . La taille exacte de ces nombres premiers varie en fonction de la taille de la clé. De nos jours, un minimum de clés RSA de 2 048 bits est généralement recommandé pour une sécurité adéquate. Nous parlons donc de deux nombres premiers qui se multiplient pour produire un nombre de 2 048 bits.
2048 bits est une taille dans le système de nombres binaires. Si un nombre de cette taille était converti dans notre système décimal plus familier, il serait à peu près aussi long :
790279459827301874397592846209502937592870495029380589710393
7019019209839375970193850891039510730584153687576287365984259
3824756984376582763487912837582736592873684273684728938575872
4958729873958729835792875982795837529876348273685729843579348
7958458720948602984912837502948019371092482793857928739548772
3975928375924785938670358103799581093750193850791345986792384
7378267352673547623568734869386945673456827659493849024875809
6039429837592834759348759384759284780634701938091803984091804
9810938592873995710901985013984019835091835019830910791803958
1039519039518093581093850198401935801938401983409180938510983
09180019
Les nombres premiers dans RSA doivent être sélectionnés au hasard et doivent avoir des longueurs similaires.
Dans notre exemple, nous utiliserons des nombres beaucoup plus petits pour faciliter la compréhension. Sachez que l’utilisation de clés de cette taille rendrait les signatures numériques faciles à falsifier. C'est pourquoi des valeurs aussi élevées sont utilisées dans la pratique.
Disons que :
p = 13
q = 17
La première étape serait de calculer le module n en utilisant la formule suivante :
n = pq
n= 13x17
n = 221
La valeur denest également la longueur de la clé.
Fonction totale de Carmichael
Maintenant que nous avons la valeur den, l’étape suivante consiste à utiliser la fonction totient de Carmichael :
je(n) =lcm(p−1,q−1)
Il y a quelques choses que vous devez comprendre :
- je(n) désigne le totient de Carmichael pour la valeur den
- lcmreprésente le multiplicateur commun le plus bas. Il s'agit du nombre commun le plus petit que les deuxp-1etq-1peut se diviser en
Branchons nos chiffres dans l’équation :
je(221) =lcm(13 − 1, 17 − 1)
je(221) =lcm(12, 16)
Si vous êtes bon en calcul mental, vous avez peut-être compris que 48 est le plus petit multiplicateur commun des deux 12 et 16 . En effet, 48 est le plus petit nombre dans lequel ces deux nombres peuvent entrer (12 x 4 = 48, 16 x 3 = 48). Donc:
je (221) = 48
Trouver la clé publique
En RSA, la clé publique est composée de la valeur n (que nous avons déjà calculé comme 221 ) et et . Puisque la clé publique est librement partagée, la valeur deetne doit pas être un secret. En fait, dans la pratique, il est souvent fixé à 65 537, car des nombres plus élevés ralentiraient le processus de cryptage. Dans notre exemple, nous définirons et à 5 , juste pour en faire un nombre petit et simple avec lequel travailler.
Par conséquent, la clé publique de cet exemple est composée de 221 et 5. Nous aborderons les détails de la façon dont la clé publique est appliquée dans les sections suivantes.
Comprendre la clé privée
Tout comme notre clé publique est composée de deux nombres, notre clé privée l’est également. Les clés privées sont composées de d et et . Nous connaissons déjà la valeur de et (5) , et nous pouvons utiliser la formule suivante pour trouver d :
d=1/etcontreje(n)
Noter que contre symbolise simplement une opération modulo, ce qui signifie normalement que vous devez trouver le reste une fois que vous divisez le côté gauche par le droit. Par exemple:
17 contre 3 = 2
En effet, 3 rentre dans 17 5 fois au total, avec un reste de 2.
Notre exemple est un peu différent. Le ' 1/ et contre ' Un segment de l'équation peut sembler vous dire de diviser 1 par et , mais ce n’est pas le cas. C’est déroutant, mais c’est une façon de représenter le inverse modulaire . L'équation nous demande en fait de calculer l'inverse modulaire deetetje(n).
L'inverse modulaire est normalement dérivé en utilisant le algorithme euclidien étendu , mais nous n’en parlerons pas dans cet article. Au lieu de cela, nous utiliserons simplement un calculateur en ligne pour rendre les choses plus faciles.
Maintenant que nous avons réglé cela, entrons nos valeurs dans la formule :
d=1/5 contre 48
Trouverd, tout ce que nous avons à faire est de saisir notre valeur pour et (5) dans la calculatrice en ligne où il est écrit entier , alors notre valeur pour je ( n ) , lequel est 48 , Où il est dit module .
Cela nous donne un résultat de 29 selon le calculateur en ligne. Ainsi, notre clé privée sera composée de :
et = 5
d = 29 .
Maintenant que nous avons généré nos deux clés, la question suivante est : « Qu'en faisons-nous ? » Eh bien, nous pourrions les utiliser pour chiffrer et déchiffrer des messages via la cryptographie à clé publique, mais cet article concerne les signatures numériques, nous allons donc nous concentrer là-dessus.
Signature numérique des données avec RSA
Disons que quelqu'un souhaite envoyer un message à son ami, mais veut s'assurer que cet ami peut vérifier l'authenticité et l'intégrité du message. Pour ce faire, ils pourraient utiliser une signature numérique RSA pour signer le message.
La première étape consiste à exécuter l'intégralité du message via une fonction de hachage . Ce sont des fonctions unidirectionnelles qui fournissent toujours le même résultat pour une entrée donnée. Les fonctions de hachage sécurisées sont essentiellement impossibles à inverser, ce qui signifie que la sortie ne peut pas être utilisée pour comprendre l'entrée. Il est également impossible que deux messages distincts aient le même résultat.
Vous pouvez en savoir plus sur les fonctions de hachage dans le Qu’est-ce que le hachage ? Section de notre article ,Chiffrement, hachage, salage : quelle est la différence ?
Disons que nous souhaitons signer numériquement le message »Il fait chaud aujourd'hui» afin que notre destinataire puisse savoir si le message est authentique ou non et s'il a été falsifié. Alors nous courrions »Il fait chaud aujourd'hui» via une fonction de hachage.
Comprendre les fonctions de hachage
De nos jours, la fonction de hachage sécurisée la plus couramment utilisée est SHA-256. Lorsque nous transmettons notre message à travers un calculateur SHA-256 en ligne , cela nous donne un résultat comme ceci :
efbcf22b4cd04d49daa87cfbda7d2313cc665c35bc9e18954af16c104a731952
Cela pose quelques problèmes pour notre exemple. La première est qu’il ne s’agit pas d’un nombre décimal comme ceux auxquels la plupart des gens sont habitués. Vous avez peut-être remarqué qu'il y a des lettres dans ce numéro, et qu'elles ne vont que jusqu'àF. Cela nous donne une idée qu’il s’agit en fait d’un nombre hexadécimal.
LeLe système hexadécimal repose sur une base de 16 plutôt que sur une base de 10, comme le système numérique que nous utilisons habituellement. Cela signifie qu'au lieu de compter par multiples de 10, on compte par multiples de 16, et les 6 premières lettres de notre alphabet sont utilisées pour composer ces nombres supplémentaires. Un nombre comme celui-ci peut être converti dans notre système décimal quotidien, mais cela sort du cadre de cet article.
Le deuxième problème que nous avons est qu’il s’agit d’un chiffre très important. S'il était converti en décimal, ce serait encore plus long. Puisque nous visons la simplicité dans ce guide, exécuter les calculs avec un nombre aussi grand rendrait les choses trop confuses pour faire comprendre les concepts de base.
Dans l’idée de démontrer le fonctionnement des signatures numériques RSA d’une manière facile à comprendre, nous n’utiliserons pas une valeur de hachage aussi importante dans l’exemple suivant. Au lieu de cela, nous ferons comme si la valeur de hachage de «Il fait chaud aujourd'hui' est simplement dix .
Nous devrons également prétendre que, comme tout hachage réel, chaque fois que nous saisissons « Il fait chaud aujourd’hui » via la fonction de hachage, il renverra toujours la valeur de dix . Pour être cohérent avec le fonctionnement normal des fonctions de hachage, nous devrons prétendre qu’il est extrêmement improbable qu’une autre entrée donne la même valeur. De la même manière, nous devons prétendre qu’il n’est pas non plus possible de déterminer notre entrée initiale à partir de cette valeur. Ces propriétés rendent les hachages extrêmement utiles.
Comment la clé privée de l'expéditeur est utilisée pour signer numériquement la valeur de hachage
Notre expéditeur a tapé son message, puis l'a soumis à une fonction de hachage, qui, comme nous l'avons fait croire, a renvoyé une valeur de dix . Une fois que l'expéditeur dispose du hachage du message, il peut créer la signature numérique en appliquant sa clé privée à la valeur de hachage avec la formule suivante :
m(c) =cdcontren
Il s’agit en fait de la formule permettant de déchiffrer les données chiffrées avec la clé publique du destinataire, mais elle est également utilisée pour signer numériquement des documents.
En matière de signatures numériques :
- La valeur de m ( c ) sera la signature.
- La valeur de c est le hachage du message ( dix) .
- La valeur de d fait partie de la clé privée de l’expéditeur, que nous avons dérivée précédemment ( 29 ).
- Le contre la fonction est la même opération de reste que nous avons abordée plus tôt.
- La valeur de n est l’autre partie de la clé privée de l’expéditeur, que nous avons calculée au début ( 221 ).
Alors mettons tout cela dans notre formule :
m(c) = 1029contre 221
m(c) = 100 000 000 000 000 000 000 000 000 000 contre 221
Passons cela en revue ce qui suit module de calcul (nous avons expliqué le fonctionnement de ces opérations sous le Comprendre la clé publique section). Pour que cela fonctionne correctement, nous devons définir nos entrées comme suit :
- Nombre un taper - décimal
- Nombre un valeur - 100000000000000000000000000000
- Nombre b taper - décimal
- Nombre b valeur - 221
- Équation de calcul (il s'agit simplement du code qui indique à la calculatrice quelle opération effectuer. Ce code et d'autres peuvent être trouvés sur la page Web liée au-dessus de la section de saisie) - mod(a,b)
Si vous avez fait les choses correctement, cela devrait ressembler à ceci :
Le numéro dans la case jaune est notre réponse, donc la signature numérique pour le hachage du message est 147 .
Pour prouver l'authenticité et l'intégrité du message, tout en assurant la non-répudiation, notre expéditeur transmettrait le message 'Il fait chaud aujourd'hui» à côté de la signature numérique de 147 au destinataire souhaité. N'oubliez pas que nous avons utilisé une petite valeur pour le hachage afin de simplifier les choses, au lieu du véritable hachage du message.
Vérification des signatures numériques
Les signatures numériques ne sont utiles que si nous pouvons vérifier si elles sont légitimes. Tant que la clé privée d'un expéditeur n'a pas été compromise, le destinataire peut tester si un message est authentique et conserve son intégrité en appliquant la formule suivante à la signature numérique :
cm)=metcontren
Dans une inversion du processus de signature, c'est en fait la formule utilisée pour chiffrer les données dans RSA. Lorsque nous utilisons cette formule pour vérifier les signatures :
- La valeur de cm ) sera la valeur de hachage de l'expéditeur au moment où il l'a signé (en raison de la structure de l'algorithme de clé publique RSA, l'application de la clé publique de l'expéditeur via cette formule annulera l'opération de signature que nous venons d'effectuer, nous laissant avec notre faux hachage original ).
- La valeur de m est la signature numérique ( 147 ).
- La valeur de et fait partie de la clé publique de l’expéditeur, que nous avons dérivée précédemment ( 5 ).
- Le contre la fonction est la même opération de reste que nous avons abordée plus tôt.
- La valeur de n est l’autre partie de la clé publique de l’expéditeur, que nous avons calculée au début ( 221 ).
Mettons tout cela dans la formule :
cm)= 1475contre 221
cm)= 68 641 485 507 contre 221
Utilisons le même module de calcul comme avant et gardez tout pareil, sauf :
- Nombre un valeur - 68 641 485 507
Si vous avez correctement saisi les éléments, vous devriez obtenir le résultat suivant :
cm) = 10
Maintenant que le destinataire a calculé la valeur de hachage à partir de la signature numérique, l'étape suivante consiste à calculer la valeur de hachage du message qu'il a reçu.Il fait chaud aujourd'hui». Si vous vous souvenez plus tôt, nous n’avons pas réellement utilisé le véritable hachage SHA-256 du message, car le nombre aurait été trop grand et aurait rendu l’exemple trop compliqué.
Au lieu de cela, nous avons prétendu que la fonction de hachage nous donnait réellement le petit nombre, dix , pour notre contribution. Puisque les fonctions de hachage génèrent toujours le même résultat pour une entrée donnée, lorsque notre destinataire met «Il fait chaud aujourd'hui' Grâce à notre fonction de hachage imaginaire, ils auraient également reçu la valeur de dix .
Le processus de vérification de la signature aboutit à deux valeurs. La première valeur est le hachage tel qu'il était lorsque l'expéditeur l'a signé numériquement avec sa clé privée. Nous avons calculé cela ci-dessus en utilisant la clé publique de l’expéditeur.
La deuxième valeur est le hachage du message reçu par le destinataire. Ceci est calculé en utilisant la même fonction de hachage que celle utilisée par l'expéditeur pour hacher son message d'origine. Ces deux valeurs sont ensuite comparées, et si les valeurs sont les mêmes, alors nous pouvons supposer que le message est authentique, conserve son intégrité et qu'il est non répudiable. Bien entendu, cela suppose que la clé privée de l’expéditeur n’a pas été compromise.
Puisque notre exemple a renvoyé une valeur de dix pour le hachage lorsqu'il a été signé par l'expéditeur, ainsi qu'une valeur de dix comme hachage du message reçu, nous pouvons supposer que le message, 'Il fait chaud aujourd'hui'vient de celui qui prétend l'avoir envoyé, et qu'il n'a pas été modifié depuis son envoi.
Si le destinataire souhaite répondre afin que son correspondant puisse vérifier son message de la même manière, tout le processus est répété, sauf que les clés privée et publique du destinataire sont utilisées respectivement pour les processus de signature et de vérification.
Tous ces calculs vous ont peut-être dissuadé de penser aux signatures numériques. Ne vous inquiétez pas, car les implémentations de RSA automatisent ce processus, vous n'avez donc pas à faire de calculs.
Avantages et inconvénients du RSA
RSA est l'un des algorithmes de signature numérique les plus largement pris en charge et mis en œuvre, bien qu'il y ait une tendance vers des algorithmes plus récents, plus efficaces et plus sécurisés tels que ECDSA et EdDSA.
Comparé au DSA (que nous aborderons dans la section suivante), RSA est plus rapide à vérifier les signatures, mais plus lent à les générer. Étant donné que les signatures ont tendance à être créées une seule fois et vérifiées plusieurs fois, RSA est généralement préféré à DSA.
DSA
La sécurité de l'algorithme de signature numérique repose sur deux concepts mathématiques, le logarithme discret problème, et certaines propriétés de exponentiation modulaire . Pour certains groupes, il est impossible de calculer leurs logarithmes discrets avec les techniques et technologies actuelles.
Génération de clé DSA
Pour générer des clés DSA, la première étape consiste à choisir les paramètres qu'un groupe d'utilisateurs du même système peut utiliser pour générer une paire de clés.
Génération des paramètres
- Choisir unfonction de hachage– SHA-256 est l’option la plus courante pour répondre aux exigences de sécurité modernes.
- S'installer sur les longueurs de clé, LetN- Ces jours,Ldoit avoir une longueur d'au moins 2 048 bits, tandis queNdoit être d'au moins 256 bits.
- Décidez d'un prime,q,c'est la même longueur queN.
- Sélectionnez un nombre premier,p, oùp-1 est un multiple deq.
- Choisissez un numéro,g, en utilisant la formule suivante (oùhest un nombre arbitraire compris entre 1 etp-1) :
g=h(p−1)/qcontrep
Normalement, ces valeurs sont de très grands nombres afin de sécuriser l'algorithme. Pour éviter que notre exemple ne soit trop difficile à calculer ou à expliquer, nous utiliserons des nombres beaucoup plus petits qui ne seraient pas réellement sécurisés. Disons que :
q = 5
p = 11
Trouver g , nous insérons nos chiffres dans la formule. Nous utiliserons 3 comme notre valeur pour h :
g= 3(11-1)/5vers 11
g= 3deuxvers 11
g= 9 contre 11
Nous utiliserons le même module de calcul comme dans le Comment la clé privée de l'expéditeur est utilisée pour signer numériquement la valeur de hachage section. Les paramètres seront les mêmes, sauf :
- Nombre un valeur - 9
- Nombre b valeur - onze
Si vous avez tout saisi correctement, cela vous donnera un résultat pour g de 9 .
Génération des clés utilisateur
Les utilisateurs individuels prennent ensuite ces paramètres et les utilisent pour former leur paire de clés :
- La clé privée ( X ) est un nombre intermédiaire 0 et q ,que nous fixons à 5. Pour notre exemple, nous choisirons 2 être X , notre clé privée.
- La clé publique ( ET ) est calculé à l'aide de la formule suivante :
ET=gXcontrep
Donc:
ET= 9deuxvers 11
ET= 81 contre 11
Nous utiliserons le même module de calcul une fois de plus. Les paramètres seront les mêmes, sauf :
- Nombre un valeur - 81
- Nombre b valeur - onze
Si vous avez saisi les choses correctement, vous devriez avoir obtenu un résultat de y = 4 . La clé publique est donc 4 .
Maintenant que nous avons généré toutes nos valeurs, faisons un petit récapitulatif. Les paramètres du système sont :
- p = 11
- q = 5
- g = 9
Notre bi-clé est composée de :
- La clé privée, X = 2
- La clé publique, ET = 4
Signature numérique des données avec DSA
Les expéditeurs peuvent utiliser leur clé privée DSA pour signer numériquement les données, ce qui permet à leur destinataire de vérifier si le message est authentique et conserve son intégrité. Cela empêche également l’expéditeur de pouvoir rejeter le message.
Le processus de signature commence par générer une valeur aléatoire k , qui se situe entre 1 et q . Pour cet exemple, choisissons simplement 3 comme notre numéro « aléatoire », k .
Nous suivons ensuite la formule suivante pour créer une clé individuelle ( r ) pour le message :
r= (gkcontrep) modq
Ajoutons nos chiffres :
r= (93contre 11) contre 5
r= (729 contre 11) contre 5
Nous utilisons notre module de calcul encore une fois, entrant 729 et onze , ce qui nous donne un résultat de 3 . Donc:
r= 3 contre 5
Et puis on répète encore une fois l’opération modulo avec les nouvelles valeurs pour nous donner :
r = 3
Notre valeur pourrest utilisé comme clé du message.
Nous arrivons à l'autre partie de la signature numérique,s,avec la formule suivante :
s=k-1(H(m) +xr) contreq
Le k -1 ne représente pas prendre le pouvoir négatif dek, mais en calculant plutôt l'inverse modulaire, tout comme dans notre Comprendre la sous-section de la clé privée dans la première partie de l’article où nous parlions du RSA.
H(m) est la valeur de hachage du message que l'expéditeur signe. Normalement, il s'agirait d'une longue valeur de hachage dérivée du message, tout comme dans le cas Comprendre les valeurs de hachage sous-section ci-dessus, que nous avons abordée lorsque nous parlions de l'algorithme RSA.
Pour cet exemple, nous garderons les choses simples. Tout comme dans la rubrique RSA, nous dirons que notre message, m , est ' Il fait chaud aujourd'hui » et que le hachage du message H ( m ), est 10 .
Entrons donc toutes nos valeurs dans la formule :
s= 3-1(10 + 2 x 3) (contre 5)
s= 3-1(10 + 6) (contre 5)
s= 3-1(16) (contre 5)
Maintenant, nous prenons l'inverse modulaire de 3 pour l'ordre de 5 (parce que 5 est notre valeur pour q ), en utilisant le même calculatrice inverse modulaire d'avant. Entrer 3 comme l'entier et 5 comme le modulo, qui vous donnera un résultat de deux . Donc:
s= 2 (16) (contre 5)
s= 32 (contre 5)
Revenons à notre calculateur pour le fonctionnement modulo normal , en conservant les mêmes paramètres que nous avons utilisés précédemment, sauf :
- Nombre un valeur - 32
- Nombre b valeur - 5
Si vous avez fait cela correctement, cela donnera une valeur pour s de 2 . La signature numérique est composée de r et s (3 et 2, respectivement) . Les expéditeurs transmettent la signature numérique à leur destinataire avec leur message, 'Il fait chaud aujourd'hui». Ils partageront également les valeurs dep, q,getETavec leur destinataire.
Vérification des signatures numériques
Lorsque le destinataire reçoit la signature numérique avec le message, il peut vérifier l'intégrité et l'authenticité du message avec l'ensemble de calculs suivant.
La première étape consiste à trouver le hachage du message qu’ils ont reçu. Pour ce faire, le destinataire exécute l'intégralité du message via une fonction de hachage. Pour garder les choses simples et cohérentes, disons que le hachage du message, H ( m ) vaut 10 .
Le destinataire a également reçu les valeurs suivantes, qu'il utilise dans le processus de vérification :
- La signature numérique (r, s) – 3, 2
- p-1
- q-5
- g-9
- et – 4
Le premier calcul consiste à trouverdans:
dans=s-1contreq
Encore une fois, les-1représente la prise de l'inverse modulaire. Entrons nos valeurs :
dans= 2-1contre 5
Nous utiliserons le calculatrice inverse modulaire d'avant. Entrer deux comme l'entier et 5 comme le modulo, qui vous donnera un résultat de 3 pour dans . La prochaine étape consiste à trouverdans1avec la formule suivante :
dans1=H(m) Xdanscontreq
Ajoutons nos valeurs :
dans1= 10 x 3 contre 5
dans1= 30 contre 5
Retour à la module normal de la calculatrice , en conservant les mêmes paramètres que nous avons utilisés précédemment, sauf :
- Nombre un valeur - 30
- Nombre b valeur - 5
Cela nous donne un résultat de 0 pour dans 1 .
Nous utilisons la formule suivante pour trouverdansdeux:
dansdeux=rXdanscontreq
Entrons nos chiffres :
dansdeux= 3 x 3 contre 5
dansdeux= 9 contre 5
Nous retournons ensuite au module normal de la calculatrice , en utilisant les mêmes paramètres que précédemment, sauf :
- Nombre un valeur - 9
- Nombre b valeur - 5
Si vous l'entrez correctement, cela vous donnera un résultat pour dans deux de 4 .
Maintenant que nous avons nos valeurs pourdans1etdansdeux, nous pouvons trouverdans, avec la formule suivante :
dans =(gen 1ETu2 contrep) contreq
Ajoutons nos chiffres :
dans= (90x44contre 11) contre 5
dans= (1 x 256 contre 11) contre 5
dans= (256 contre 11) contre 5
Nous revenons à notre module normal de la calculatrice , en utilisant les mêmes paramètres que précédemment, sauf :
- Nombre un valeur - 256
- Nombre b valeur - onze
Cela nous donne un résultat de 3 . Donc:
dans= 3 contre 5
Ensuite, nous utilisons le module normal de la calculatrice une dernière fois, toujours avec les mêmes paramètres, sauf :
- Nombre un valeur - 256
- Nombre b valeur - onze
Cela nous donne un résultat pour dans de 3 .
Si le message est authentique et n’a pas été falsifié, alors danssera égal àr:
dans= 3
r= 3
3 = 3
Le message a donc été envoyé par le propriétaire de la clé privée, et le message n'a pas été modifié depuis sa signature.
Avantages et inconvénients du DSA
La sécurité du DSA dépend de l’utilisation ou non de numéros adéquats. En plus dep, qetgen respectant les paramètres corrects, la valeur dekdoit également être aléatoire. Il ne doit pas s'agir d'une valeur prévisible ou d'une valeur utilisée plusieurs fois. Si ces conditions ne sont pas remplies, la clé peut être récupérée par un attaquant.
Malgré cette possibilité,DSA est généralement considéré comme sécurisé tant qu'il est implémenté correctement et qu'il utilise des valeurs adéquates.. Même s’il est relativement sécurisé, le DSA n’est généralement pas beaucoup mis en œuvre par rapport au RSA ou aux autres méthodes de signature numérique. Comparé au RSA, il peut générer des clés plus rapidement et est également plus rapide pour générer des signatures numériques, mais plus lent pour les vérifier.
La version 7.0 d'OpenSSH a cessé de prendre en charge les clés DSA par défaut, ce qui semble être le signe que le monde dépasse le DSA et se tourne vers d'autres algorithmes.
ECDSA et EdDSA
RSA et DSA ne sont pas les seuls algorithmes de signature numérique, ni les plus adaptés à toutes les situations. Il en existe toute une série d'autres, commeECDSA et EdDSA, qui ont des propriétés qui les rendent préférables dans certaines circonstances.
Malheureusement, ceux-ci reposent sur des mathématiques encore plus compliquées, telles que la cryptographie à courbe elliptique et à courbe d’Edwards. Nous ne les aborderons pas en détail aujourd’hui en raison de cette complexité supplémentaire, mais nous parlerons de certains de leurs potentiels positifs et négatifs.
ECDSA
L'algorithme de signature numérique à courbe elliptique est une variante du DSA qui intègre la cryptographie à courbe elliptique. Il offre un niveau de sécurité similaire à RSA, mais avec une clé beaucoup plus petite. Cela le rend plus efficace que RSA ou DSA dans la plupart des aspects des performances.
EdDSA
Il s'agit d'une autre alternative DSA, sauf qu'elle est basée sur Courbes d'Edwards tordues . C’est relativement nouveau en ce qui concerne les algorithmes, ce qui présente à la fois des avantages et des inconvénients. Du côté positif, il utilise des techniques plus récentes qui ajoutent à ses performances.
Malheureusement, les algorithmes les plus récents n’ont pas été soumis à autant d’examens minutieux, c’est pourquoi de nombreuses personnes sont prudentes lorsqu’elles décident de les mettre en œuvre ou non.
Malgré cela, l'utilisation deEdDSA offre un haut niveau de performance, la résistance aux attaques par canal secondaire et supprime le besoin d'un nombre aléatoire unique dans chaque signature. À ce stade, EdDSA semble prometteur et sa mise en œuvre commence à être plus large, mais nous devrons attendre de voir si les études futures découvriront des failles de sécurité.
Certificats numériques
N’importe qui peut facilement créer une paire de clés, même un attaquant. Alors, qu’est-ce qui empêche quelqu’un de fabriquer un trousseau de clés et de prétendre qu’il est le président, ou de se faire passer pour n’importe qui d’autre ?
Eh bien, rien n’empêche quelqu’un de prétendre qu’il est une autre personne, mais il existe un système qui permet aux autres de vérifier si la personne est vraiment celle qu’elle prétend être. Cela s'appelle le infrastructure à clé publique (PKI) , et cela implique certificats numériques qui relient la clé publique d’un individu ou d’une entité à sa véritable identité . Ces certificats sont signés par d'autres pour indiquer à quel point le certificat doit être fiable.
Vous pouvez comparer le processus au recours à des notaires pour vérifier les documents. Si quelqu’un possède une copie d’un acte de naissance, vous pourriez être sceptique quant à sa légitimité ou non. Si ce même acte de naissance était signé et tamponné par un notaire, vous seriez beaucoup plus susceptible de croire qu'il s'agit d'une véritable copie.
Pourquoi?
Parce que la signature et le cachet montrent qu'une entité publique de confiance a vu la personne et son acte de naissance original, puis a vérifié que la copie est effectivement légitime. Le notaire valide la copie de l'acte de naissance et y met sa réputation avec sa signature et son cachet.
La confiance que nous avons envers le notaire se transfère à la copie de l'acte de naissance, ce qui nous permet de lui faire bien plus confiance qu'à une copie non notariée.
Il existe deux grands types de certification, cles autorités de certification (CA) et le réseau de confiance.
Autorités de certification
Les autorités de certification sontorganisations de confiance qui effectuent des contrôles sur des individus ou des entités pour vérifier s'ils sont le propriétaire légitime d'une clé publique. Si les vérifications révèlent que l'individu est le véritable propriétaire, l'autorité de certification signera le certificat avec sa propre clé, signifiant qu'elle a effectué la vérification et estime que l'individu et la clé publique sont légitimement liés.
Tant que nous faisons confiance à l'autorité de certification et à son processus de vérification de la clé, nous pouvons faire confiance à un certificat qui a été signé par elle., et donc que la clé publique représente véritablement cet individu.
Selon le type de certificat et son application, différents niveaux peuvent avoir des processus de vérification différents et représentent donc un degré de confiance plus ou moins élevé.
Le réseau de confiance
Le réseau de confiance fonctionne selon un principe similaire, sauf que til n'y a pas d'organismes centraux icicomme les autorités de certification qui effectuent le processus de vérification et signent les certificats.
Au lieu de cela, le réseau de confiance s’appuie sur d’autres individus pour signer des certificats, mettant ainsi leur réputation en jeu sur le lien entre l’individu et la clé publique. Ce système est principalement utilisé avec PGP , où les utilisateurs peuvent facilement créer leurs propres certificats.
Cela fonctionne comme ceci :
Supposons que vous ayez deux amis qui souhaitent que leurs certificats soient signés pour prouver qu'ils sont les propriétaires légitimes de leurs clés publiques respectives. Vous connaissez bien ces personnes, et elles vous montrent leurs cartes d'identité gouvernementales, ce qui vous garantit absolument qu'elles sont bien celles qu'elles prétendent être, et qu'elles sont donc les véritables propriétaires des clés publiques qu'elles revendiquent.
Puisque vous savez qu’ils sont les propriétaires légitimes de leurs clés publiques, vous êtes heureux d’utiliser votre clé privée pour signer leurs certificats, en mettant votre réputation sur eux et en disant essentiellement « »Oui, j'ai vérifié l'identité de ces personnes et elles sont bien celles qu'elles prétendent être.». Ces deux amis pourront alors vous faire de même.
Disons que chacun de vos deux amis a deux autres amis qui souhaitent que leurs certificats soient signés. Si vos deux amis signent ces autres certificats, vous pouvez alors utiliser la confiance que vous avez en vos amis pour accepter que ces autres personnes sont également réellement celles qu’elles prétendent être.
Les amis de vos amis peuvent ensuite signer les certificats des personnes en qui ils ont confiance, etc., créant ainsi un vaste réseau d'individus de confiance. Une fois que ces réseaux seront suffisamment grands et interconnectés avec d’autres réseaux,ils peuvent être utilisés comme moyen de faire confiance à n’importe qui d’autre sur le réseau.
Plus il y a de signatures sur un certificat, surtout s'il s'agit de signatures de personnes hautement fiables,plus vous pouvez faire confiance au certificat numérique d’une personne et au lien entre sa clé publique et son identité.
Les utilisateurs de PGP organisent fréquemment des soirées de signature de clés où les gens se rassemblent afin de faire vérifier leur identité et de faire signer leurs certificats numériques. Ces rassemblements contribuent à attirer de nouvelles personnes dans le réseau.
Même s’il comporte certaines complexités, l’avantage du système de réseau de confiance est qu’il n’existe aucun organe central susceptible d’être corrompu.
Les signatures numériques sont-elles sûres ?
D'une manière générale,les signatures numériques sont sécurisées sauf si la clé privée du signataire a été compromise. Si le propriétaire a informé une autre personne, a laissé la clé privée écrite ou s'est fait voler celle-ci d'une autre manière, il est alors possible pour un attaquant de signer numériquement les messages comme s'il en était le propriétaire.
Cela peut amener l’attaquant à se faire passer pour sa victime ou à falsifier ses données. Il s'agit d'un énorme problème de sécurité, et toute personne soupçonnant que sa clé a été compromise doit révoquer son certificat numérique qui la relie à sa clé publique et en faire émettre un nouveau.
Il existe quelques autres mises en garde concernant la sécurité des signatures numériques. Un algorithme de signature numérique approprié doit être utilisé et doit également être mis en œuvre correctement. Parallèlement, il doit également exister un moyen de relier la clé publique à son propriétaire, généralement via des certificats numériques.
Tant que ces exigences sont remplies, que vous suivez les meilleures pratiques du secteur et que votre clé privée n'a pas été compromise, alorsles signatures numériques sont un excellent moyen de garantir l'authenticité, l'intégrité et la non-répudiation des données.
Données structurées par Kai Stachowiak sous licence CC0