Share via Share via... Twitter LinkedIn Facebook Telegram WhatsAppUltime modificheSend via e-MailStampaPermalink × KeycardAccess v2 La versione 2 di KeycardAccess è la più vicina ad essere realizzata. 5p4k e wifasoi hanno realizzato una libreria per la comunicazione con la nostra tessera da un ESP32. Modifica Tecnologie usate MIFARE DESFire EV2 PN532 ESP32 … Modifica Materiali ESP32 PN532 Keycardaccess V2 Responsabile: Membri 5p4k wifasoi g5pw Data inizio: 2020 Data fine: 2021 (speriamo) Repository Talk Modifica Modifica Schema di autenticazione Notazione usata: KDF: key derivation function SIGN: firma usando la chiave privata del Mittelab (o meglio, una chiave derivata) DB: database o archiviato nel backend o nel controller controller: dispositivo localizzato all’interno della sede che decide se aprire la porta. Potrebbe o non potrebbe includere il lettore della carta (a cui potrebbe essere collegato) backend: FreeIPA o qualsiasi altro software faremo girare in infra ext/int per gestire l’apertura porta MID: Member ID, potrebbe essere l’username ad esempio UID: tessera UID SALT_*: un qualche valore scelto a caso in maniera crittograficamente sicura, al momento dell’attivazione STORE(<content>, <key>): archivia un file sulla tessera, con contenuto <content>, criptato con la chiave simmetrica <key>. <entry> → <value>: mappa unidirezionale da entry a value Attivazione nuova carta Ottieni SALT_DB, SALT_CARD STORE(SALT_CARD, KDF(UID + <shared_secret>)) Salva sul backend DB: MID → HASH(UID), SALT_DB Deriva la chiave K := KDF(HASH(UID), SALT_DB, SALT_CARD) Firma e salva il file firmato sulla carta: STORE(SIGN(HASH(UID), HASH(SALT_CARD), MID), K) Deploy di un nuovo controller Crea una coppia chiave pubblica KP_c / chiave privata KS_c per ogni controller Archivia KP_c sul backend Aggiornamento del DB del controller Costruisci la mappa HASH(UID) → SALT_DB per ogni MID autorizzato Cripta la mappa HASH(UID) → SALT_DB con tutte le chiavi pubbliche KP_c. Consegna il crittogramma ad ogni controller Il controller decripta con la propria chiave privata KS_c e salva Verifica degli accessi Il controller calcola HASH(UID) e controlla se ha un’entry HASH(UID) → SALT_DB Se sì, legge SALT_CARD dalla carta, e deriva K = KDF(HASH(UID), SALT_CARD, SALT_DB) Usando K, legge SIGN(HASH(UID), HASH(SALT_CARD), MID) Verifica la firma, verifica che HASH(UID) corrisponda e che HASH(SALT_CARD) corrisponda Se sì, l'utente è autenticato Modifica progetti/keycardaccess_v2.txt Ultima modifica: 2021/01/25 20:31da g5pw