Per prima cosa, dai un'occhiata a [ questa domanda ] .
Sulla base di questa domanda, la mia comprensione delle carte bancarie è che la chip card mette il proprio ACC + PIN in un messaggio firmato crittografato per il server della banca (probabilmente con alcuni dati di sfida dal POS per evitare attacchi di replay) e chiede al Terminale POS (punto di vendita) per inviarlo a suo nome. Il terminale POS non può leggere il messaggio, ma può inviarlo alla banca. La banca convalida il messaggio, controlla la firma e la confronta con accNumber + PIN nel suo database e restituisce un SI / NO al terminale POS. (disclaimer: è così che immagino che potrebbe funzionare, non so se questo è il modo in cui fa funziona.)
Esistono altri approcci basati su domande e risposte comunemente usati nel settore della sicurezza (ad esempio, per i badge ID da inserire nell'edificio degli uffici). Funzionano come segue: quando si tiene la carta al lettore sul muro, la chip card, il lettore di schede e il database hanno il seguente scambio:
-
Chip Card a Lettore : "Sono
John Smith
e la mia chiave pubblica è pub_key
."
-
Lettore a Database : "
pub_key
appartiene a John Smith
?"
-
Database a Lettore : "Sì."
-
Lettore a Chip Card : "Per dimostrare di avere la chiave privata corrispondente, firma questo messaggio:
rand_32bit_msg
."
-
Chip Card a Lettore :
enc_msg = encrypt(rand_32bit_msg, priv_key)
, "Ecco enc_msg
."
-
Lettore : fa
decrypt(enc_msg, pub_key) == rand_32bit_msg
? "Ok, credo che tu possieda la chiave privata, vieni!"
È presumibile che tu possa acquistare una serie di chip card e lettori di vari produttori, ma non ho idea se questo rientri nel budget di un progetto per hobby.