Imaginons qu'Alice et Peter ont chacun une clé USB à mémoire flash de 4 Go. Ils se rencontrent et enregistrent sur les deux sticks deux fichiers nommés alice_to_peter.key
(2 Go) et peter_to_alice.key
(2 Go) qui contiennent des bits générés aléatoirement. Ils ne se rencontrent plus jamais, mais communiquent électroniquement. Alice maintient également une variable appelée alice_pointer
et Peter maintient une variable appelée peter_pointer
, toutes deux initialement définies sur zéro.
Quand Alice doit envoyer un message à Peter, elle le fait (où n
est le nième octet du message):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(et pour une sécurité maximale, la partie utilisée de la clé peut être effacée)
Peter reçoit encrypted_payload_to_peter
, lit les données alice_pointer
stockées au début du message et fait:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
Et pour une sécurité maximale, après lecture du message effacez également la partie utilisée de la clé.
- EDIT: En fait, cette étape avec cet algorithme simple (sans vérification d'intégrité et authentification) diminue la sécurité, voir le post de Paŭlo Ebermann ci-dessous.
Lorsque Peter a besoin d'envoyer un message à Alice, ils font l'inverse, cette fois avec peter_to_alice.key
et peter_pointer
.
Avec ce schéma trivial, ils peuvent envoyer chaque jour pendant les 50 prochaines années 2 Go / (50 * 365) = ~ 115 Ko de données chiffrées dans les deux directions. S'ils ont besoin de plus de données à envoyer, ils pourraient utiliser des clés plus grandes, par exemple avec les HD 2 To actuels (clés 1 To), il serait possible d'échanger 60 Mo / jour pendant les 50 prochaines années! C'est beaucoup de données dans la pratique; par exemple, en utilisant la compression, c'est plus d'une heure de communication vocale de haute qualité.
Il me semble qu'il n'y a aucun moyen pour un attaquant de lire les messages cryptés sans les clés, car même s'ils ont un ordinateur infiniment rapide, avec la force brute, ils peuvent obtenir tous les messages possibles sous la limite, mais c'est un nombre astronomique des messages et l'attaquant ne sait pas lequel d'entre eux est le message réel.
Ai-je raison? Ce schéma de communication est-il vraiment absolument sécurisé? Et s'il est sécurisé, a-t-il son propre nom? Le cryptage XOR est bien connu, mais je recherche le nom de cette application pratique concrète utilisant de grandes clés des deux côtés? J'attends humblement que cette application ait été inventée quelqu'un avant moi. :-)
Remarque: s'il est absolument sécurisé, c'est incroyable, car avec les grands périphériques de stockage à faible coût d'aujourd'hui, il serait beaucoup moins cher de faire une communication sécurisée qu'avec la cryptographie quantique coûteuse, et cela a une sécurité équivalente!
EDIT:
Je pense que ce sera plus pratique à l'avenir que les coûts de stockage diminuent.Il peut résoudre la communication sécurisée pour toujours.Aujourd'hui, vous n'avez aucune certitude si quelqu'un attaque avec succès les chiffres existants, même un an plus tard, et rend ses implémentations souvent coûteuses peu sûres. Dans de nombreux cas, avant la communication, lorsque les deux parties se rencontrent personnellement, c'est le moment de générer les clés. Je pense que c'est parfait pour la communication militaire, par exemple entre les sous-marins qui peuvent avoir des HD avec de grandes touches, et la centrale militaire peut avoir un HD pour chaque sous-marin. Cela peut également être pratique dans la vie quotidienne, par exemple pour contrôler votre compte bancaire, car lorsque vous créez votre compte, vous rencontrez la banque, etc.