À l'aide des clés RSA, les abonnés génèrent au stade initial (procédure get_common_key) des séquences aléatoires d'octets et les échangent sous forme cryptée. Cet échange est appelé prologue (connexion ultérieure, déjà significative). Dans la procédure get_common_key que nous avons mentionnée ci-dessus, ces lignes sont pertinentes pour ce processus (prologue):
make_local_key(); get_hash(local_key.packed, PACKED_VALUE_LENTH / 2, local_hash); encrypt_local_key(); memcpy(socket_buffer, crypted_local_key, PACKED_VALUE_LENTH); memcpy(socket_buffer + PACKED_VALUE_LENTH, local_hash, HASH_SIZE); socket_send_buffer(socket, socket_buffer, PACKED_VALUE_LENTH + HASH_SIZE);
La taille du prologue, comme vous pouvez facilement le voir, est PACKED_VALUE_LENTH + HASH_SIZE, c'est-à-dire qu'elle dépend de la profondeur de bits des clés RSA utilisées (paramètre PACKED_VALUE_LENTH) et de l'algorithme de hachage utilisé dans cette livraison particulière (paramètre HASH_SIZE). Ainsi, il peut changer, ce qui créerait des problèmes au serveur central dans la procédure connect_server si les abonnés ne lui avaient pas informé au préalable, lors de la procédure check_finger_print, via l'empreinte digitale qu'ils ont envoyée (fingerprint), de la valeur de leur prolog_size.
Il est facile de voir que le prologue se compose de deux parties: une séquence aléatoire local_key générée par le client (dans la procédure make_local_key) et un hachage de cette séquence local_hash. Parallèlement, le hachage est calculé avant de chiffrer la local_key, ce qui assure la fiabilité de la connexion, puisque seul un partenaire de communication disposant d'une clé RSA privée peut déchiffrer ce package, et seul un abonné à qui ce partenaire a personnellement donné le la clé publique pour cela peut le chiffrer. Aucune attaque de l’homme du milieu n’est donc possible dans ce cas.
Le contenu de cette page est également disponible en anglais, allemand, ukrainien et en russe.
© Extra Systems, 2024 |