RSA est bien un algorithme de chiffrement asymétrique, chaque utilisateur a donc une clé publique (accessible par tous dans par exemple un serveur de clés, sorte d'annuaire) et une clé secrète.
Chiffrement : Alice écrit un message, le chiffre avec la clé publique de Bob, l'envoie à Bob qui le déchiffre avec sa clé secrète. La confidentialité est assurée.
Signature : Alice calcule le 'haché' de son message, en utilisant une fonction de hachage (fonction à sens unique : il est 'difficile' de calculer l'antécédent à partir de l'image), et calcule la signature correspondante à l'aide de sa clé secrète : sigma = h(m)^(s_A) (mod N). N est le module publique, produit de 2 grands nombres premiers. Elle envoie sa signature à Bob, qui peut vérifier à l'aide de la clé publique d'Alice que Alice est bien l'auteur du message, au moyen de la formule : sigma^(p_A) (mod N) ?=? h(m). L'authenticité est assurée.
En crypto on parle de Alice et Bob comme de deux utilisateurs lambda, pour expliquer un protocole. On évoque aussi Charlie, pour désigner un attaquant... Quelle imagination !
Ensuite, oui pour l'instant les clés utilisées sur RSA sont assez grandes pour que nous puissions dormir sur nos 2 oreilles, quoique pour certaines applications où les enjeux ne sont pas grands, une sécurité moindre est plus intéressante car elle a un moindre coût et des performances accrues. Oui tu as compris, dans le design d'une solution cryptographique, il s'agit souvent de placer le curseur au milieu de ce triangle : Sécurité, Coût, Performance.
Pour un attaquant, il y a 2 questions essentielles :
1. De quels moyens dispose-t-il ? dans l'ordre croissant
- il connait seulement la clé publique (attaque sans message)
- il a connaissance de couples (message clair, message chiffré) (attaque par msg connus)
- il a connaissance de couples de son choix (attaques par msg choisis)
2. Quel est son objectif ? dans l'ordre décroissant
- trouver la clé secrète (cassage total)
- signer tous les messages (forge universelle)
- signer un message de son choix (forge sélective)
- produire un couple (m, sigma) valide (forge existentielle)
La notion de sécurité, c'est donc la résistance à la forge existentielle face à une attaque à messages choisis, i. e. le plus petit objectif contre les plus gros moyens mis à sa disposition.
Ca c'est le schéma traditionnel en cryptographie. Il a été un peu secoué il y a une dizaine d'années quand sont apparues les attaques par canal auxiliaire (mon sujet de thèse). Ces attaques fonctionnent à partir de nouveaux moyens : les caractéristiques physiques de l'appareil cryptographique sur lequel est implémenté l'algorithme. Ca se déroule comme suit :
- On choisit une valeur intermédiaire de l'algorithme
- On enregistre le signal physique, un certain nombre de fois, pour un certain nombre de messages. On obtient par exemple des courbes de consommation électrique.
- On imagine quelles sont les hypothétiques valeurs intermédiaires en fonction d'une partie du message et d'une partie de la clé (hypothétique). C'est une méthode diviser-pour-régner : on retrouve la clé partie par partie, ce qui ramène le problème a une complexité acceptable.
- On applique à ces valeurs hypothétiques un modèle de consommation, pour obtenir d'hypothétiques valeurs de consommation (en mV) en fonction des parties de message et d'hypothétiques clés.
- Au moyen d'une analyse statistique on choisit quelle hypothèse de clé colle le plus aux courbes de consommation obtenues à l'étape 2.
Voilà, à peu près, le déroulement d'une attaque par canal auxiliaire. Le canal auxiliaire le plus courant est la consommation électrique du device, mais ça peut aussi être le champ électromagnétique, ou d'autres mais moins répandus (le rapport signal-to-noise est plus petit, c'est donc moins intéressant... )
Bon, ça fait déjà un bon petit topo ça...