(J'espère que c'est la bonne section, je programme en .NET mais je pense que ça touche plus le développement réseau qu'autre chose)
Voilà je vous explique mon problème, pas bien compliqué :
J'ai un serveur de jeu auquel se connectent des clients identifiés. Inutile de dire que le client envoit parfois des données très confidentielles (du style mots de passes) et qu'il a donc fallu mettre au point un système pour crypter les données de la manière la plus efficace possible.
En me documentant un peu j'ai vu que ce qui était le plus simple était d'utiliser un algorithme symmétrique (type DES ou Rijndael) en envoyant les clefs de cryptage avec un algorithme asymétrique (type RSA).
Ainsi le schéma est :
Serveur -> Client : envoit de la clef publique RSA pour crypter.
Cilent -> Serveur : envoit de la clef de l'algo symétrique pour crypter (et décrypter côté client).
Serveur -> Client : envoit d'une autre clef d'algo symétrique pour crypter (et décrypter côté serveur).
Ainsi on a l'assurance que les clefs n'ont pas été décryptée pendant son envoit.
Jusqu'ici tout va bien mais se pose à moi deux problèmes :
Le premier est simple, si le client se connecte à un faux serveur relié au vrai serveur. Le schéma devient :
Serveur -> Faux serveur : envoit de la clef publique RSA pour crypter.
Faux serveur -> Client : envoit d'une fausse clef publique RSA.
Client -> Faux serveur : envoit d'une clef symétrique.
Faux serveur -> Serveur : envoit d'une fausse clef symétrique.
Serveur -> Faux serveur : envoit d'une autre clef symétrique.
Faux serveur -> Client : envoit d'une fausse clef symétrique.
Ainsi, le faux serveur peut parfaitement intercepter n'importe quoi et l'analyser, sans qu'on y voit rien.
Ceci ne devrait jamais arriver étant donné que pour que le client se connecte au faux serveur, il faudrait qu'il le veuille... Et si c'est le cas, le fait qu'il puisse décrypter son propre mot de passe n'est pas le plus grand problème auquel j'ai eu à faire face.
Mon second problème est beaucoup plus tordu... Est-il possible que quelqu'un arrive par exemple à installer un logiciel sur le PC client (ou ailleurs) qui intercepterait les packets et les modifierait ? Ainsi, ce logiciel agirait en quelques sorte comme le faux serveur vu précédemment et pourrait, à l'insu du client, décrypter tout ce qui s'y passe sans problème.
Ce genre de possibilité est-elle à envisager sérieusement ?
Y a-t-il une erreur dans l'architecture ? (je suis vraiment débutant dans le domaine de la sécurité)
Partager