¿Alguna vulnerabilidad en la implementación de .net para C # object.GetHashCode?

7

Ya hice esta pregunta en SO, pero creo que este foro es más apropiado para discutir temas de seguridad.

Mi punto es que la mayoría de los idiomas OO tienen una forma de obtener un código hash único para un objeto:

  • Python: obj.__hash__()
  • Java: obj.hashCode()
  • .NET: obj.GetHashCode()

Es bien sabido que para Python una denegación de servicio vulnerabilidad ( pdf desde el congreso original ) se ha abordado desde la versión 3.30 a través de una asignación aleatoria de semillas (aunque no funciona para una ventana única interpreter ).

Mi pregunta es ¿por qué esa preocupación se ha ignorado en la implementación predeterminada de hash .Net? Desde un punto de vista de seguridad, ¿cuál es el enfoque correcto: no debería sugerirse la misma aleatorización de semillas también a los desarrolladores de equipos de .Net framework?     

pregunta python3.5_32bit_win7_64bit 22.06.2016 - 12:10
fuente

1 respuesta

1

El propósito de los métodos hash enumerados (métodos proporcionados por objetos comunes para ajustarse a una interfaz utilizada por colecciones estándar) es asignar todos los valores posibles para los cuales se calcula un hash al rango completo de valores válidos del tipo del valor hash . La aleatoriedad utilizada en este mapeo no es por seguridad. La asignación debe ser lo suficientemente aleatoria para que las secuencias y los patrones comunes no provoquen una distribución desigual en el uso de grupos comunes a las colecciones basadas en hash.

Los mapas hash, los multimaps y los conjuntos se pueden usar en esquemas de seguridad más grandes pero, por sí solos, no se pretende que sean seguros. Son simplemente colecciones diseñadas para proporcionar búsquedas indexadas. Los hash utilizados de esta manera proporcionan índices mucho más rápidos que los árboles binarios.

El término hashCode es realmente engañoso de esta manera. La creación de un hash para un tipo de cadena de modo que un mapa de hash se pueda indexar utilizando dicha cadena no es una codificación. El valor hash resultante que se deriva de tal algoritmo de hash puede volver a asignarse a un gran número de valores de objeto, pero la intención en este contexto NO es ocultar esos valores de objeto de un atacante.

En el caso de los algoritmos de hash MD5 o SHA utilizados en los protocolos de seguridad, la intención es crear una probabilidad matemáticamente baja de adivinar el valor de entrada del hash en cualquier número de intentos prácticamente alcanzables. Los métodos proporcionados por los objetos comunes en estos idiomas para que puedan insertarse en colecciones que los indiquen utilizando cubos NUNCA se deben usar para reemplazar los algoritmos hash diseñados para ser usados en protocolos de seguridad.

    
respondido por el Douglas Daseeco 10.02.2017 - 08:16
fuente

Lea otras preguntas en las etiquetas