Breve descrizione
Mi chiedo se esiste un modo per memorizzare in modo sicuro un'alternativa del numero totale della carta di credito, che non richiede il numero di carta da recuperare dall'altra alternativa.
Descrizione lunga
Il mio obiettivo qui è quello di archiviare in qualche modo un'alternativa del numero totale di carte di credito dei clienti nel database, in modo da poter identificare lo stesso cliente al momento dell'acquisto successivo. Tuttavia dovrebbe essere un enorme problema di sicurezza se abbiamo hash / criptare il numero completo nel database. Quindi mi riferisco all'idea della crittografia one-time pad in cui è stato usato il CC come chiave privata (Key) e la chiave verrà utilizzata per crittografare una stringa casuale che seguirà un pattern (testo normale). Pertanto Key
non verrà memorizzato nel database e ci sono milioni di possibilità di Plain Text
.
Flusso esatto dell'idea iniziale
Numero della carta di prova: 4539112781735373 (fonte: link )
A) Cripta il numero totale della carta di credito da bcrypt con il costo 14 ( $2y$14$g161t43Dcu7beXbIn2a55.LvH.Cpn7pwu05MPCz1PbAzbFEr0SqZS
)
B) Converti l'output bcrypt in byte ( 00100100 00110010 01111001 00100100 00110001 00110100 00100100 01100111 00110001 00110110 00110001 01110100 00110100 00110011 01000100 01100011 01110101 00110111 01100010 01100101 01011000 01100010 01001001 01101110 00110010 01100001 00110101 00110101 00101110 01001100 01110110 01001000 00101110 01000011 01110000 01101110 00110111 01110000 01110111 01110101 00110000 00110101 01001101 01010000 01000011 01111010 00110001 01010000 01100010 01000001 01111010 01100010 01000110 01000101 01110010 00110000 01010011 01110001 01011010 01010011
)
C) Genera 6 numeri casuali di 10 cifre segui uno schema come testo normale (il modello dovrebbe essere abbastanza semplice da lasciare più possibilità aperte e complicare abbastanza da essere identificabile, diciamo che tutti possono essere divisi per 2 e 7 ) ( 1410065398 1410065384 1410065370 1410065356 1410065328 1410065342
) e converti i numeri in byte ( 00110001 00110100 00110001 00110000 00110000 00110110 00110101 00110011 00111001 00111000 00110001 00110100 00110001 00110000 00110000 00110110 00110101 00110011 00111000 00110100 00110001 00110100 00110001 00110000 00110000 00110110 00110101 00110011 00110111 00110000 00110001 00110100 00110001 00110000 00110000 00110110 00110101 00110011 00110101 00110110 00110001 00110100 00110001 00110000 00110000 00110110 00110101 00110011 00110010 00111000 00110001 00110100 00110001 00110000 00110000 00110110 00110101 00110011 00110100 00110010
)
D) Esegui XOR con byte dal passaggio B) e C), output 101010000011001001000000101000000000100000010000100010101010000001000000011100000000001000000000001010000001101110100010101010100000000000100010110100101000101101001010101100111100001011110000000100101011100000000000001100001100101111100010001110111110000011111011100110100000001011000000000100100001101000010010000110000000100000001011111000110000001110011010011000000010001100011010100000111100101001011010101100111011101110101010000100000011001100110010000100110111001100001
E) Quando c'è un altro acquisto effettuato dalla stessa carta di credito, il passaggio B verrà eseguito nuovamente e l'output dei byte verrà utilizzato per tutti i record del passaggio D) (indipendentemente dalle prestazioni)
F) Tutti i byte recuperati verranno quindi riconvertiti in numeri e verificati quali possono essere divisi per 2 e 7, i record corrispondenti verranno trattati come "cliente di ritorno"
Quello che mi chiedo davvero è ...
- Il flusso sopra è sufficientemente sicuro per proteggere la carta dei clienti numero?
- C'è qualche ulteriore passo che potrei prendere per renderlo più sicuro?
- Potrebbero essere applicati algoritmi o pattern migliori per la fase C)?
- Il costo 14 è abbastanza buono per il passaggio A)? O è il costo / sicurezza importa quando si ottengono i byte dalla carta di credito?
- È possibile decifrare il numero completo della carta con il metodo sopra? se sì, quanto ci vuole?
- Qual è la possibilità che 2 diverse carte di credito siano in conflitto con il metodo sopra riportato? (stesso risultato)
Scusa se non sono bravo in matematica, crittografia o sicurezza, qualsiasi idea è ben accetta.
Osservazione
Le prime 6 e le ultime 4 cifre del numero della carta sono memorizzate nel database da qualche altra parte.