Les procédures de chiffrement et de déchiffrement des clés de session encrypt_local_key et decrypt_remote_key sont appelées dans le module get_common_key. Ces deux opérations sont effectuées dans Extra Systems Cypher Net via la même fonction long_power_mod (exponentiation), sauf qu'elles utilisent des clés RSA différentes: le cryptage est effectué avec votre clé privée et le déchiffrement est effectué avec la clé publique du partenaire.
typedef struct session_key_item { unsigned char packed[PACKED_VALUE_LENTH]; unsigned char unpacked[VALUE_LENTH]; } SESSIONKEYITEM; SESSIONKEYITEM local_key, remote_key, common_key; unsigned char crypted_local_key[PACKED_VALUE_LENTH], crypted_remote_key[PACKED_VALUE_LENTH]; void encrypt_local_key(void) { unsigned char crypted_value[VALUE_LENTH]; long_power_mod(local_key.unpacked, encrypt_rsa_key.exponent, encrypt_rsa_key.modulus, crypted_value); pack_value(crypted_value, crypted_local_key); } void decrypt_remote_key(void) { unsigned char crypted_value[VALUE_LENTH]; unpack_value(crypted_remote_key, crypted_value); long_power_mod(crypted_value, decrypt_rsa_key.exponent, decrypt_rsa_key.modulus, remote_key.unpacked); pack_value(remote_key.unpacked, remote_key.packed); }
L'algorithme de fonctionnement des procédures pack_value et unpack_value est disponible ici.
Le contenu de cette page est également disponible en anglais, allemand, ukrainien et en russe.
© Extra Systems, 2024 |