Question

Au fil des années, je suis venu dans ce scénario plus d'une fois. Vous avez un tas de données relatives à l'utilisateur que vous souhaitez envoyer d'une application à une autre. La deuxième application devrait « confiance » ce « jeton » et utiliser les données qu'il contient. Un horodatage est inclus dans le jeton pour empêcher une attaque de vol / réutilisation. Pour une raison quelconque (ne nous inquiétons pas ici) une solution personnalisée a été choisie plutôt que d'une norme de l'industrie comme SAML.

Pour moi, il semble que la signature numérique des données est ce que vous voulez ici. Si les données doivent être secrètes, vous pouvez également chiffrer.

Mais ce que je vois beaucoup est que les développeurs utiliseront le chiffrement symétrique, par exemple AES. Ils partent du principe que, en plus de faire les données « secret », le chiffrement fournit également 1) l'intégrité des messages et 2) la confiance (authentification de la source).

Ai-je raison de croire qu'il ya une faiblesse inhérente ici? À première vue, il ne semble fonctionner, si la clé symétrique est géré correctement. Manquant cette clé, je ne voudrais certainement pas savoir comment modifier un jeton crypté, ou lancer une sorte d'attaque cryptographique après avoir intercepté plusieurs jetons. Mais serait un attaquant plus sophistiqué capable d'exploiter quelque chose ici?

Était-ce utile?

La solution

Une partie de celui-ci dépend du mode de cryptage. Si vous utilisez la BCE ( Honte à vous! ) je pourrais échanger des blocs autour, modifier le message. Stackoverflow a été touché par ce bug très .

Moins menaçant - sans contrôle d'intégrité, je pourrais faire un homme-in-the-middle, et d'échanger toutes sortes de bits autour, et vous recevriez et tenter de le déchiffrer. Vous auriez omettez bien sûr, mais la tentative peut être révélatrice. Il y a des attaques de canal latéral par « Bernstein (exploitant une combinaison de caractéristiques de cache et microarchitecture) et Osvik, Shamir et Tromer (exploitation des collisions de cache) reposent sur l'acquisition des données statistiques sur la base d'un grand nombre de tests aléatoires. » 1 L'article est en bas de page par un cryptographe de une plus grande note que moi, et il conseille réduire la surface d'attaque avec un MAC:

  

si vous pouvez vous assurer qu'un attaquant   qui n'a pas accès à votre MAC   La clé ne peut jamais nourrir le mal à une entrée   bloc de code, cependant, vous   réduire considérablement les chances qu'il   sera en mesure d'exploiter les bugs

Autres conseils

Eh oui. Le cryptage seul ne fournit pas d'authentification. Si vous voulez l'authentification, vous devez utiliser un code d'authentification de message tel que les signatures numériques ou HMAC (selon vos besoins).

Il y a un assez grand nombre d'attaques qui sont possibles si les messages sont simplement chiffrés, mais pas authentifiées. Voici juste un exemple très simple. On suppose que les messages sont cryptés en utilisant CBC . Ce mode utilise un IV randomiser le cryptogramme afin que chiffrer le même message deux fois ne se traduit pas dans le même cryptogramme. Maintenant, regardez ce qui se passe lors du déchiffrement si l'attaquant modifie juste la IV mais laisse le reste du cryptogramme comme est. Seul le premier bloc du message déchiffré changera. De plus exactement ces bits modifiés dans le changement IV dans le message. D'où l'attaquant sait exactement ce qui va changer lorsque le récepteur décrypte le message. Si ce premier bloc était par exemple un horodatage un l'attaquant sait quand le message d'origine a été envoyé, alors il peut facilement corriger l'horodatage à tout autre moment, juste en feuilletant les bits droite.

D'autres blocs du message peuvent également être manipulés, bien que ce soit un peu plus délicat. A noter également, que ce n'est pas seulement une faiblesse de la SRC. D'autres modes comme OFB, BFC ont des faiblesses similiar. Donc attendre que le cryptage fournit à elle seule l'authentification est juste une hypothèse très dangereuse

Une approche de chiffrement symétrique est aussi sûr que la clé. Si les deux systèmes peuvent être donnés la clé et maintenez la touche en toute sécurité, cela est bien beau. La cryptographie à clé publique est certainement un ajustement plus naturel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top