Memorizzazione chiavi di licenza

4

Sto creando un'applicazione che genera una chiave di licenza e la memorizza in un database (le licenze sono controllate online). Non desidero archiviare queste licenze senza alcuna interruzione, nel caso in cui il database venga rubato.

Tuttavia, una volta che la chiave di licenza è stata sottoposta a hashing (con salt), diventa molto difficile controllare se esiste una determinata chiave nel database, poiché il sale utilizzato cambierà con ciascuna chiave.

Qual è la soluzione migliore per poter trovare e verificare una chiave di licenza con hash? Ho preso in considerazione l'hashing della metà della chiave di licenza e l'ho usata per identificare la riga della licenza prima di controllare l'hash della chiave completa con salt. È troppo rischioso?

Ho anche preso in considerazione l'utilizzo dell'ultimo 1/4 della chiave come identificatore (ad esempio AAAB = 1, AAAC = 2 ecc.), per una lunghezza della chiave di 16, questo consente 2 ^ 20 tasti.

( nota laterale: i tasti sono codificati in base32 e avranno una lunghezza di 16 caratteri (ma potrebbero essere scelti più a lungo). L'applicazione è generale - cioè non è legata a nessun caso d'uso particolare , quindi non esiste una stima fissa del numero di licenze richieste - sebbene la lunghezza della chiave possa essere aumentata a seconda di quella esima).

    
posta Stephen Harris 30.09.2012 - 18:02
fonte

1 risposta

4

However, once the license key is hashed (with salt) - it becomes very difficult to check if a given key exists in the database - since the salt used will change with each key.

I sali sono progettati per essere usati quando hai già un identificatore per cercare il campo hash corrispondente. Ad esempio, non guardi per vedere se "password" esiste in nessuno dei campi password, ma piuttosto che per "utente" la password è "password".

Se stai per salvare le tue password (licenze), devi assegnare un identificatore univoco ad esso memorizzato senza alcun hashing.

Prepara un ID univoco di larghezza fissa ai primi byte delle tue licenze o utilizza un delimitatore e dividi l'ID prima dell'hash sul server.

    
risposta data 30.09.2012 - 18:30
fonte