es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Riesgos en el uso de NoHashHasher.

El hash predeterminado de Rust para HashMap es SipHash, que es considerablemente más lento en algunos casos (por ejemplo, para enteros), pero proporciona protección contra ataques de HashDoS. Como se describe aquí, el NoHashHasher puede ser hasta 50 veces más rápido que el hasher predeterminado y de 10 a 20 veces más rápido que los hashers FNV y FX (no siempre, por supuesto, pero en algunos casos como el descrito ahí).

En mi experiencia personal, rara vez necesitaría la protección adicional contra ataques de HashDoS. Por ejemplo, si uso IDs de bases de datos como claves y esos IDs se basan en autoincremento, realmente no veo mucho riesgo allí. Sin embargo, entiendo que existe una buena razón para tener un hasher más seguro como el predeterminado (más vale prevenir que lamentar).

Entonces, cuando sabemos que no estamos expuestos a ningún riesgo de ataques de HashDoS y necesitamos usar enteros de 64 bits o menos como claves, ¿hay alguna razón para abstenernos de usar NoHashHasher? Obviamente, el rendimiento no siempre será mejor y está claro que en ciertos casos incluso puede ser peor que los hashers FNV/FX. Específicamente, estoy preguntando sobre riesgos no obvios, desventajas o reglas especiales a seguir en situaciones como la descrita en la pregunta enlazada, donde está claro que NoHashHasher ofrece un rendimiento excelente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en rendimiento, Rust y hashmap, puedo decir que cuando sabemos que no estamos en riesgo de ataques HashDoS y necesitamos usar enteros de 64 bits o más pequeños como claves, no hay razón para abstenerse de usar NoHashHasher. Sin embargo, es importante tener en cuenta que el uso de NoHashHasher no siempre resulta en un mejor rendimiento e incluso puede ser peor que los hashers FNV/FX en ciertos casos.

    También es importante considerar cualquier desventaja potencial o regla especial a seguir al utilizar NoHashHasher. Una desventaja de usar NoHashHasher es que no proporciona protección contra ataques HashDoS, lo cual puede ser un problema en algunos casos y tener graves consecuencias en otros.

    Además, el uso de un hasher personalizado como NoHashHasher puede llevar a problemas de compatibilidad con bibliotecas externas, ya que pueden estar diseñadas para funcionar con el hasher predeterminado de HashMap de Rust. Es importante probar exhaustivamente el rendimiento y la compatibilidad de cualquier hasher personalizado antes de implementarlo en el código de producción.

    En resumen, si los ataques HashDoS no son una preocupación y el rendimiento es un factor crítico, el uso de NoHashHasher puede ser una buena opción. Sin embargo, es importante considerar cuidadosamente cualquier desventaja potencial o problema de compatibilidad, y probar exhaustivamente el rendimiento y la compatibilidad de cualquier hasher personalizado antes de implementarlo en el código de producción.

Comments are closed.