¿Es seguro exponer públicamente los hashes clave?

2

Tengo una API simple que quiero limitar a los usuarios usando una clave. Para cada solicitud, los usuarios deberán publicar la clave y los demás parámetros.

Por ejemplo en R:

res <- httr::POST(
  "api-url",
  body = list(
    img = img,
    key = "6pX2PKIKTGyjORcUjlbyDv1yPyxDdk63LudskjdXnyx1tJ7mjhfmeYMTQ7gH8q376"
  ),
  encode = "json"
  )

El manejador de solicitudes hará lo siguiente:

 key <- openssl::sha256(key)
  if(!key %in% keys | is.null(key) | is.na(key)) {
    stop("Not authorized. Get an api key from decryptr.com.br")
  } else {
    return(result)
  }

Mi pregunta es: ¿es seguro permitir que el objeto keys sea público para que cualquiera pueda leerlo?

En este momento es un archivo yaml como este que contiene solo los hashes para cada clave:

keys:
- ef556689177dbe281139a5688162f54166127c83746a83c87b872605621sa156
- b934527d8d59be4766e43db6c9de039871ddcea33c948bcf59ee5ed29fdr1f4f
    
pregunta Daniel Falbel 02.03.2018 - 18:09
fuente

2 respuestas

2

Ok, solo mantienes un hash del secreto en el almacenamiento permanente, que cumple con las mejores prácticas. Dicho esto, el principio de privilegios mínimos todavía recomienda que el acceso a los datos se limite a los roles que lo requieran. Por lo tanto, en su caso de uso, el acceso al archivo que contiene los hashes debe estar restringido a:

  • los usuarios que ejecutan la aplicación
  • los administradores de la plataforma

Si el hash es lo suficientemente seguro (y SHA256 tiene una reputación bastante buena), sería difícil para un atacante forzarlo brutalmente. Pero restringir el acceso es solo una línea de defensa adicional: un atacante necesitará un ataque previo para obtener los hashes.

Para responder con precisión a su pregunta, diría que el almacenamiento de hashes significa que filtrar el archivo de hashes no comprometerá la seguridad siempre que cambie los secretos, por lo que es seguro. Pero sería mucho más seguro restringir el acceso.

    
respondido por el Serge Ballesta 02.03.2018 - 23:12
fuente
2

Mientras las claves contengan tantos o más bits de entropía que la cantidad de bits de salida del hash (es decir, las claves son aleatorias y lo suficientemente largas), hacer públicos los hashes no daría lugar a una pérdida notable de seguridad. Revertir un hash de datos suficientemente aleatorios requeriría un ataque de preimagen , y la resistencia de preimagen es una de las propiedades básicas de un criptográfico. Función hash (incluso MD5 todavía es resistente a la preimagen). Solo asegúrese de que las claves se estén generando con un CSPRNG.

    
respondido por el AndrolGenhald 02.03.2018 - 18:30
fuente

Lea otras preguntas en las etiquetas