Come gestire in modo sicuro un sistema di accesso [duplicato]

0

Sto facendo un'applicazione desktop in C # e voglio sapere se sto gestendo questo (dal punto di vista della sicurezza) come dovrebbe essere o meno.

La mia tabella Utenti ha sia hashed_password che salt , entrambi sono binari (32).

Per creare un nuovo account:

  • L'utente digita il nome di accesso e la password
  • Un sale viene generato casualmente (ciò avviene dal lato client).
  • Il sale creato verrà utilizzato per cancellare la password (SHA256).

Login:

  • L'utente digita la sua password
  • Un'istruzione select viene apportata al database per ottenere il sale , l'hash la password digitata che utilizza salt e viene confrontato con il database

Le mie domande sono:

  • È una cattiva pratica avere la password salt come binary(32) ?
  • Ha senso generare il sale nell'applicazione e quindi inviarlo al database? Se no, perché? (Solo un utente avrà accesso alla funzione di creazione degli account, creerà gli account per tutti)
  • Se la parte in grassetto sopra è una cattiva pratica?
posta Black Panther 08.07.2018 - 12:44
fonte

1 risposta

1

Per prima cosa, non dovresti essere una password di hashing con un solo round SHA256.

Quando passi ad un vero algoritmo di hashing della password, alcune implementazioni comuni (almeno in passato, non sono sicuro di dove sia ancora vero) non gestiranno correttamente zero (NUL) byte, troncando l'input a l'hash, diminuendo notevolmente la sicurezza. Quindi memorizzare il sale in binario può essere una cattiva idea. Inoltre, rende il tuo sistema meno flessibile per aumentare la durata del sale, ecc., In futuro. Penso che normalmente il sale sia memorizzato insieme alla password hash in un singolo campo, entrambi codificati in base64. Ma potrei sbagliarmi, non faccio cose di database per vivere. : -)

Su questa nota, non posso davvero rispondere alla domanda sull'utilizzo di una query di selezione per trovare il sale per un utente per lo stesso motivo. Ma non so cos'altro faresti, ma assicurati di non usare semplicemente il nome utente fornito dall'utente direttamente nella query, è sbagliato in tutti i modi.

    
risposta data 08.07.2018 - 20:05
fonte

Leggi altre domande sui tag