È sicuro esporre pubblicamente gli hash delle chiavi?

2

Ho una semplice API che voglio limitare gli utenti usando una chiave. Per ogni richiesta, gli utenti dovranno pubblicare la chiave e gli altri parametri.

Ad esempio in R:

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

Il gestore delle richieste farà quanto segue:

 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)
  }

La mia domanda è: è sicuro lasciare pubblico l'oggetto keys affinché chiunque possa leggerlo?

Al momento è un file yaml come questo contenente solo gli hash per ogni chiave:

keys:
- ef556689177dbe281139a5688162f54166127c83746a83c87b872605621sa156
- b934527d8d59be4766e43db6c9de039871ddcea33c948bcf59ee5ed29fdr1f4f
    
posta Daniel Falbel 02.03.2018 - 18:09
fonte

2 risposte

2

Ok, tieni solo un hash del segreto sull'archiviazione permanente, che è conforme alle migliori pratiche. Detto questo, il principio least priviledge raccomanda ancora che l'accesso a un dato debba essere limitato ai ruoli che lo richiedono. Quindi nel tuo caso d'uso, l'accesso al file contenente gli hash dovrebbe essere limitato a:

  • gli utenti che eseguono l'applicazione
  • gli amministratori della piattaforma

Se l'hash è abbastanza sicuro (e SHA256 ha una buona reputazione), sarebbe difficile per un hacker forzarlo. Ma limitare l'accesso è solo un'ulteriore linea di difesa: un attaccante avrà bisogno di un exploit precedente per ottenere gli hash.

Per rispondere con precisione alla tua domanda, direi che la memorizzazione degli hash significa che la perdita del file hash non comprometterà la sicurezza a patto che tu cambi presto i segreti, quindi è sicuro. Ma sarebbe molto più sicuro limitare l'accesso.

    
risposta data 02.03.2018 - 23:12
fonte
2

Finché le chiavi contengono un numero di bit di entropia pari o superiore al numero di bit di uscita dell'hash (cioè le chiavi sono casuali e abbastanza lunghe), rendere gli hash pubblici non comporterebbe alcuna notevole perdita di sicurezza. Per invertire un hash di dati sufficientemente casuali richiederebbe un attacco preimage e la resistenza al preimage è una delle proprietà di base di un crittografico funzione hash (anche MD5 è ancora pre-resistente). Assicurati solo che le chiavi vengano generate con un CSPRNG.

    
risposta data 02.03.2018 - 18:30
fonte

Leggi altre domande sui tag