Proprietà degli identificatori condivisi di Google Provider

Contesto

Questo documento descrive le proprietà obbligatorie per gli identificatori condivisi utilizzati nelle integrazioni tra Google e un Fornitore (o emittente dell'account per l'utente). Un identificatore condiviso è un buon modo per pensare al fatto che si tratta di un puntatore opaco a un bordo tra un Account Google e un account emittente.

Pertanto, è importante ricordare che l'identificatore condiviso non fa riferimento all'Account Google (o all'utente o a un'altra persona giuridica nello spazio di archiviazione di Google) né all'account del fornitore/emittente (o altra persona giuridica). Si riferisce al legame tra questi due aspetti.

Proprietà degli identificatori condivisi

Le proprietà necessarie per gli identificatori condivisi nascono dall'esperienza passata e da problemi tecnici che si sono verificati a causa della mancanza di queste proprietà negli identificatori condivisi.

Per un'integrazione tra Google e un partner esterno, è fondamentale che gli identificatori condivisi utilizzati abbiano le seguenti proprietà:

  1. Essere univoco a livello globale: questo identificatore condiviso deve indirizzare a un solo link tra un utente Google e un account emittente. Non deve esistere un altro identificatore condiviso per lo stesso emittente con lo stesso valore.
  2. Non essere decifrabili: questi identificatori condivisi sono autorizzati a intervenire per conto dell'utente, pertanto è importante che una terza parte non sia in grado di indovinare il valore dell'identificatore condiviso.
  3. Essere revocabile: è importante che un identificatore condiviso possa essere revocato dall'utente e questa revoca dovrebbe vietare qualsiasi utilizzo futuro del valore dell'identificatore condiviso. Questa proprietà ha alcune proprietà corollari che seguono:
    • Non basato su una proprietà immutabile di entrambi gli account: se il valore dell'identificatore condiviso deve essere basato su una proprietà immutabile dell'account dell'emittente o dell'Account Google, la ricreazione di un identificatore condiviso revocato comporterebbe lo stesso valore dell'identificatore condiviso, annullando così la revoca, pertanto il valore dell'identificatore condiviso non deve essere una proprietà dell'account (ad es. un numero di telefono).
    • Non semplicemente <Google Account, Partner Account>: deve esistere un altro valore (ad es. tempo) per consentire la revoca.
  4. Consenti più link per l'account su entrambi i lati: è importante che la creazione del valore dell'identificatore condiviso non impedisca a un singolo utente Google di collegarsi a più conti bancari o di collegare più di un Account Google a un singolo conto bancario (ad es. un account principale e uno secondario collegati entrambi al conto bancario della società principale). Come per la revocabilità, questa impostazione ha alcuni corollari:
    • Anche in questo caso, non in base a una proprietà immutabile di uno dei due account: in caso contrario, l'identificatore condiviso avrà lo stesso valore quando un singolo utente Google collegava più conti bancari (se il valore dell'identificatore condiviso era basato sull'Account Google) o se più Account Google sono collegati a un singolo conto bancario (se il valore dell'identificatore condiviso era basato su una proprietà del conto bancario)
  5. Essere di lunga durata: l'identificatore condiviso è valido solo in un contesto protetto (l'integrazione tra Google e il fornitore, che utilizza protezioni a livello di connessione e di applicazione (ad es. PGP, SSL reciproco e così via), pertanto non ha bisogno di cicli di vita brevi per rimanere al sicuro. Google preferisce che gli identificatori condivisi non scadano mai, ma se un fornitore richiede una scadenza, questo deve essere un periodo di tempo lungo (ad es. più di un anno).

Le altre proprietà consigliate per gli identificatori condivisi sono le seguenti:

  1. Base64: semplifica il trasporto e la comunicazione del valore nell'integrazione tramite https.
  2. Lunghezza minima: si consiglia di utilizzare almeno 27 cifre (prima della codifica Base64) per garantire che ci sia abbastanza spazio di indirizzi ed evitare collisioni.

Cosa può andare storto?

Per aiutare il lettore a comprendere le proprietà necessarie, ecco alcuni case study che illustrano i problemi riscontrati quando queste proprietà non vengono rispettate.

Case study sugli identificatori condivisi

Case study n. 1: riciclo dei numeri di telefono

Un emittente che ha utilizzato il numero di telefono dell'utente come identificatore condiviso. Quando l'utente A ha cambiato i piani telefonici, ha ceduto il proprio numero e ne ha ottenuto uno nuovo. Un mese dopo, la società telefonica ha riciclato il vecchio numero di telefono e improvvisamente il nuovo proprietario del numero, l'utente B, ha iniziato a vedere addebiti sul suo account per articoli che non acquistavano.

L'emittente aveva violato molte proprietà di identificatori condivisi, principalmente la proprietà n. 1. La migrazione di elementi come i numeri di telefono può essere eseguita da un utente all'altro, in modo da essere univoci solo durante un determinato snapshot nel tempo.

Case study n. 2: The Paste

Un dipendente di Google o di un partner incolla accidentalmente un identificatore condiviso in una chat anziché in uno strumento interno. Ulteriori livelli di protezione impediscono a chiunque di utilizzare malevolmente l'identificatore condiviso, ma per sicurezza Google voleva revocare l'identificatore condiviso e sostituirlo con uno nuovo. Quando Google/Partner tenta di revocare l'identificatore condiviso, scopre che gli identificatori condivisi sono solo l'ID account dell'utente nel sistema dell'emittente e l'identificatore condiviso viene utilizzato per cercare direttamente l'account dell'utente. Pertanto, non è stato possibile revocare l'identificatore condiviso senza eliminare l'account dell'utente e crearne uno nuovo.

Case study n. 3: The Bad Employee

Dopo l'incidente "Incolla" di cui sopra, un utente malintenzionato all'interno di Google/Partner si accorge che, poiché l'identificatore condiviso è solo l'ID account dell'utente, se riesce a inserire l'ID account di un'altra persona nel proprio valore dell'identificatore condiviso, può effettuare acquisti sull'account di quell'altra persona. A causa della violazione della proprietà n. 2, questo tipo di incollamento involontario non è soltanto una falla di sicurezza per un singolo utente, ma è una perdita di sicurezza per ogni utente.

Case study n. 4: La rotazione

Dopo l'incidente "Incolla" di cui sopra, l'emittente passa a un UUID come formato di identificatore condiviso. Questa volta, un dipendente dell'emittente invia per errore alcuni identificatori condivisi in testo non crittografato come parte di un thread email di debug. Come dice Google, non preoccuparti: revocheremo e sostituiremo gli identificatori condivisi dell'utente.

Nell'ambito della rotazione, Google comunica all'emittente che ogni account utente compromesso avrà due identificatori condivisi attivi per un breve periodo di tempo mentre la pulizia del database è in corso. Tuttavia, l'emittente non ha consentito la proprietà n. 4 e comunica a Google di avere un vincolo che stabilisce che un solo identificatore condiviso può essere attivo per un determinato account utente. Questo porta a una rotazione molto disordinata delle razze condizioni.