Crittografia di identificatori brevi?

7

Sto sviluppando una webapp che non rivela il conteggio dei record, perché nasconde la chiave primaria. Sto cercando un modo migliore per farlo.

La mia idea preferita è crittografare l'ID stesso con un codice a blocchi, perché ciò non richiederebbe ulteriori tabelle di tracciamento e, se la dimensione del blocco è uguale alla dimensione della chiave, dovrebbe funzionare bene.

Tuttavia, non voglio una dimensione di blocco di 128 bit, perché ci vorrebbe un po 'per digitare example.com/records/MTZjaHJzRm9yMTI4Yml0cw (rappresentazione Base 64)

La dimensione del blocco ideale sarebbe completamente regolabile. Voglio essere in grado di fare un input ID a 8 cifre che si traduce in un output a 8 cifre, cioè senza collisioni utilizzando una chiave casuale memorizzata in modo permanente. L'input sarebbe la vera chiave primaria e l'output sarebbe l'identificatore mostrato al pubblico. Potrei decidere di cambiare la lunghezza della cifra o passare agli identificatori di Base64 e vorrei che l'algoritmo fosse abbastanza flessibile da contenere questo?

Puoi raccomandare una routine di crittografia per dati e output così brevi? Non mi importa se la chiave è breve o no, solo i dati e l'output devono essere.

    
posta George Bailey 04.04.2013 - 23:16
fonte

1 risposta

4

Quello che vuoi è crittografia per preservare il formato . Sfortunatamente non esiste uno standard pronto all'uso, ma sono note alcune costruzioni ragionevoli. Vorrei raccomandare Thorp shuffle che è uno schema Feistel estremamente squilibrato; dato abbastanza round, questo può implementare una permutazione che è vicina all'ottimale (eccetto che uno schema Feistel è necessariamente una permutazione pari).

Tieni presente che l'implementazione del tuo algoritmo crittografico è piena di pericoli. Se non ti senti a tuo agio con l'articolo citato sopra, trova qualcun altro che lo è. (Fortunatamente, nel tuo scenario specifico, se usi una cifra debole la penalità è limitata: gli attaccanti possono indovinare il numero di record o prevedere il prossimo valore della chiave primaria.)

    
risposta data 05.04.2013 - 13:07
fonte

Leggi altre domande sui tag