Utilizando claves RSA, los suscriptores de Extra Systems Cypher Net en la etapa inicial (procedimiento get_common_key) generan secuencias de bytes aleatorias y las intercambian en forma cifrada. Este intercambio se llama prólogo (conexión adicional, ya significativa). En el procedimiento get_common_key que mencionamos anteriormente, estas líneas son relevantes para este proceso (prólogo):
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);
El tamaño del prólogo, como puede ver fácilmente, es PACKED_VALUE_LENTH + HASH_SIZE, es decir, depende de la profundidad de bits de las claves RSA utilizadas (parámetro PACKED_VALUE_LENTH) y del algoritmo hash utilizado en esta entrega en particular (parámetro HASH_SIZE). Así, puede cambiar, lo que crearía problemas al servidor central en el procedimiento connect_server si los suscriptores no le informaran previamente, durante el procedimiento check_finger_print, a través de la huella digital que enviaron, el valor de su prolog_size.
Es fácil ver que el prólogo consta de dos partes: una secuencia aleatoria local_key generada por el cliente (en el procedimiento make_local_key) y un hash de esta secuencia local_hash. Al mismo tiempo, el hash se calcula antes de cifrar la local_hash, lo que garantiza la confiabilidad de la conexión, ya que solo un interlocutor que tenga una clave RSA privada puede descifrar este paquete, y solo un suscriptor a quien este socio le haya dado personalmente la clave. La clave pública para esto puede cifrarlo. Por tanto, en este caso no es posible ningún ataque de intermediario.
El contenido de esta página también está disponible en inglés, francés, alemán, portugués, ucraniano y ruso.
© Extra Systems, 2024 |