Addio Password, Benvenute Passkey – Insight dal DevFest Vicenza

DevFest Vicenza

Qualche settimana fa, il nostro Mobile Developer Emanuele Maso è stato ospite al DevFest Vicenza con un interessante talk sulle Passkey.  L’evento, organizzato dal Google Developer Group Vicenza, è rivolto a tutta la community di appassionati di development sempre pronti a imparare qualcosa di nuovo, tenersi aggiornati sulle ultime novità e fare networking con persone che condividono gli stessi interessi. 

Nello specifico, lo speech di Emanuele si è concentrato sull’importanza dell’autenticazione tramite Passkey e ne ha dimostrato il funzionamento con un’app demo realizzata per iOS e Android con Compose e Kotlin Multiplatform.

Cosa sono le Passkey?

Le Passkey sono un’alternativa più sicura e semplice alle password, progettate dalla FIDO Alliance. Gli utenti possono infatti accedere ad app e siti web utilizzando un sensore biometrico, come l’impronta digitale o il riconoscimento facciale, un PIN o una sequenza.

Una Passkey è una credenziale digitale, collegata a un account utente e a un sito web o a un’applicazione, che consente agli utenti di autenticarsi senza inserire un nome utente o qualsiasi altro fattore di autenticazione aggiuntivo. Questa tecnologia mira quindi a sostituire i meccanismi di autenticazione tradizionali come le password.

Autenticazione tramite Passkey

Se un’app o un sito web supporta l’autenticazione tramite Passkey, l’utente troverà un pulsante per registrare una passkey sul proprio account o per registrarsi utilizzando una Passkey.

L’utente inserisce quindi il proprio nome utente/indirizzo e-mail, avviando il processo di registrazione. Se il dispositivo approva, viene richiesto al gestore delle credenziali di creare e salvare una nuova Passkey in modo sicuro

Una volta registrate correttamente le nuove credenziali, l’utente potrà accedere autenticandosi tramite il gestore delle credenziali in cui sono memorizzate le Passkey.

Vantaggi e limiti

Questa tipologia di autenticazione offre numerosi vantaggi, tra cui:

  • Maggiore sicurezza: protegge infatti gli utenti dall’esposizione di informazioni sensibili.
  • Resistenza agli attacchi di phishing: il sistema verifica l’autenticità del sito web o dell’app e richiede la selezione della Passkey solo per i siti web legittimi con Passkey memorizzate nel gestore delle credenziali.
  • Resistenza alle violazioni: la chiave privata non viene mai esposta; la piattaforma memorizza solo una chiave pubblica.
  • Facilità d’uso: non è necessario creare e ricordare password, in quanto gli utenti si autenticano con il proprio dispositivo e il sistema si occupa del resto.
  • Disponibilità dell’opzione cross-device: gli utenti possono autenticarsi su un sito web utilizzando una Passkey creata sul proprio dispositivo mobile.

Per quanto riguarda le app mobile, gli utenti possono già autenticarsi con le Passkey su quelle che supportano questo metodo. Ci sono tuttavia alcune limitazioni basate sul dispositivo:

iOS

  • A partire da iOS 15 sono disponibili le device-bound Passkey” (chiavi di accesso vincolate al dispositivo) che vengono memorizzate e utilizzate solo sul singolo dispositivo su cui sono state create
  • A partire da iOS 16 si utilizza iCloud Keychain per la sincronizzazione delle Passkey nel cloud 
  • A partire da iOS 17 i dispositivi supportano gestori di Passkey di terze parti 

Android

  • Passkey disponibili a partire da Android 9
  • Supporto per gestori di Passkey di terze parti disponibile a partire da Android 14

La prospettiva di un Mobile Developer

Dal punto di vista di uno sviluppatore di app mobile, l’integrazione delle Passkey richiede l’utilizzo delle API di gestione delle credenziali del sistema operativo. Sebbene la FIDO Alliance standardizzi i protocolli sottostanti (WebAuthn), ogni piattaforma offre SDK e framework unici per esporre questa funzionalità agli sviluppatori di app. 

Questo approccio semplifica il processo gestendo le complessità crittografiche e consentendo agli sviluppatori di dare priorità alla user experience.

L’autenticazione tramite Passkey si basa su una serie di interazioni complesse ma sicure tra il dispositivo dell’utente, l’applicazione e il server del servizio

Inizialmente, durante la registrazione, l’utente avvia il processo e il server genera una “challenge crittografica”, un dato unico e casuale che il dispositivo deve firmare digitalmente. Questa challenge e altre informazioni vengono inviate al dispositivo dell’utente tramite l’app. Il dispositivo, attraverso il proprio gestore di credenziali come iCloud Keychain o Google Password Manager, crea una coppia di chiavi: una chiave privata, tenuta segreta, e una chiave pubblica. 

La challenge viene firmata con la chiave privata, mentre la chiave pubblica e la firma vengono inviate al server, che memorizza e associa tutto all’account dell’utente. Successivamente, durante l’autenticazione, l’utente tenta di accedere e seleziona l’opzione Passkey. Il server genera una nuova challenge, la invia al dispositivo, che la firma con la chiave privata creata in precedenza. La firma viene quindi inviata al server, che la verifica utilizzando la chiave pubblica memorizzata. Se la firma è valida, l’utente viene autenticato. 

In questo processo i concetti fondamentali sono la “challenge”, una stringa di dati casuali per ogni richiesta, la “coppia di chiavi crittografica”, dove la chiave privata firma e la chiave pubblica verifica, e la “firma digitale”, il risultato della firma della challenge con la chiave privata.

Configurazione Back-end per Android e iOS

Per implementare correttamente l’autenticazione Passkeys su Android e iOS, è fondamentale un’attenta configurazione back-end. Questa configurazione include l’uso di file `.well-known` e altre impostazioni specifiche.

`apple-app-site-association` file per iOS

Su iOS, è necessario un file `apple-app-site-association` (AASA) per collegare l’app iOS al dominio del sito web. Questo file indica al sistema operativo che l’app è autorizzata a gestire determinati domini. Il file AASA deve essere ospitato nella directory `/.well-known/` del dominio (ad esempio, https://your-app.com/.well-known/apple-app-site-association).

Struttura dell’ `apple-app-site-association` file

{

  "webcredentials": {

    "apps": [

"ABCDE12345.com.example.app"

    ],

  }

}

`

Su Android, è necessario un file `assetlinks.json` per associare l’app Android al dominio del sito web. Questo file verifica che l’app abbia l’autorità per gestire le credenziali per il dominio specificato.

Il file `assetlinks.json` deve essere ospitato nella directory `/.well-known/` del dominio del sito web (ad esempio, https://your-app.com/.well-known/assetlinks.json).

[

  {

    "relation": [

"delegate_permission/common.handle_all_urls",

"delegate_permission/common.get_login_creds"

     ],

    "target": {

      "namespace": "android_app",

      "package_name": "com.your.app",

      "sha256_cert_fingerprints": ["XX:XX:XX:XX:...:XX"]

    }

  }

]

Conclusione

È chiaro che le Passkey rappresentano il futuro dell’autenticazione per siti web e app. Molte aziende stanno già supportando e promuovendo questo metodo: Google, Apple, WhatsApp e GitHub, solo per citarne alcune. 

In Bitrock siamo pronti ad affrontare le nuove sfide che ci attendono su questo trend topic. Se desideri saperne di più sull’autenticazione Passkey e scoprire le nostre soluzioni in campo Mobile App Development, visita la nostra pagina dedicata. 


Autore: Emanuele Maso, Mobile Developer at @ Bitrock. 

Vuoi saperne di più sui nostri servizi? Compila il modulo e fissa un incontro con il nostro team!