Che cos'è Tink?

Tink è una libreria di crittografia open source scritta da crittografi e tecnici della sicurezza di Google. Le API semplici e sicure di Tink riducono le progettazione incentrata sull'utente, un'attenta implementazione e revisioni del codice, e test approfonditi. Consulta la sezione Obiettivi di questa pagina per maggiori informazioni sugli obiettivi che Tink è stato progettato per raggiungere.

Tink aiuta gli utenti senza uno sfondo di crittografia a implementare in modo sicuro le attività crittografiche. In Google, Tink è stato implementato in centinaia di prodotti e sistemi diversi.

Perché dovrei usare Tink?

I motivi più importanti per utilizzare Tink sono:

  • È facile da usare

    È difficile ottenere la crittografia. Con Tink, puoi criptare o firmare i dati con e garantisce sicurezza integrata utilizzando solo poche righe di codice. Tink può anche Aiutano a ruotare le chiavi o a proteggere le chiavi utilizzando sistemi di gestione delle chiavi esterni (KMS).

  • È sicuro

    Tink aggiunge protezioni di sicurezza a librerie note come BoringSSL e Java Cryptography Architecture e mostrarle direttamente nelle interfacce, in modo che i revisori e gli strumenti possano individuare rapidamente le lacune. Tink separa inoltre le API sono potenzialmente pericolosi, puoi monitorarli.

  • È compatibile

    I testi crittografati Tink sono compatibili con le librerie di crittografia esistenti. Tink supporta anche la crittografia o l'archiviazione delle chiavi in Amazon KMS, Google Cloud KMS, archivio chiavi Android e portachiavi iOS.

Chi sta usando Tink?

Tink è ampiamente utilizzato da molte aziende, tra cui Google, Square e Citadel, come nonché centinaia di clienti Google Cloud e partner Google Pay. Tink anche è alla base della libreria Jetpack Security, che protegge molte delle app Android più diffuse come Slack, Adidas, AirBnb e Nextdoor.

Tink gol

Quali sono gli obiettivi principali di Tink rispetto alle altre librerie crittografiche e quali sono i meccanismi principali utilizzati da Tink per raggiungere questi obiettivi?

In breve, Tink ha due obiettivi:

  1. Promuovere l'agilità crittografica: gli utenti devono essere in grado di modificare le chiavi e gli algoritmi in modo semplice.
  2. Abilita i controlli della sicurezza. Tink mira a consentire agli utenti di scrivere codice la sicurezza può essere esaminata localmente, fornendo interfacce che forniscono garanzie di sicurezza.

I meccanismi principali utilizzati da Tink per raggiungere questi obiettivi sono i seguenti:

  1. Tink fornisce primitive e interfacce come importanti astrazioni. Questi permettono agli utenti di scrivere codice che non specifica ma specifica il concetto di sicurezza previsto.
  2. Tink usa il concetto di "set di chiavi", ovvero un insieme di chiavi associate a una particolare primitiva. Questo porta gli utenti a scrivere codice che funziona con più chiavi.
  3. In Tink, le chiavi non vengono specificate solo dal materiale della chiave sottostante, ma nonché l'algoritmo crittografico, nonché tutti i parametri. Ciò significa che una chiave Tink seleziona sempre una funzione crittografica univoca tra tutte le possibili che possono esistere e non lascia spazio per l'interpretazione.

Le sezioni seguenti spiegano questi concetti in modo più dettagliato.

Agilità crittografica

Prendi in considerazione Software Engineering at Google, un libro sulle lezioni apprese nel campo del software engineering, con sottotitolo "lezioni apprese dalla programmazione nel tempo". In questo testo, gli autori implora le implicazioni del fatto che le cose cambino. Questo influenzavano gran parte del design di Tink. In ambito crittografico, è importante per prepararsi al cambiamento. Le chiavi andranno perse e gli algoritmi si rompono. La possibilità di cambiare chiavi e algoritmi è fondamentale per molti utenti. essere preparati è prudente.

Revisioni della sicurezza e proprietà locali

Tink promuove l'uso delle interfacce, come la nostra interfaccia AEAD, che consente per criptare i dati. Tra le altre garanzie di sicurezza, un AEAD garantisce che più crittografie della stessa stringa provochino testi crittografati.

Per vedere come può essere utilizzato, supponiamo che un tecnico voglia archiviare alcuni ID in un cookie utente. Potrebbe fornire un corso come questo:

class IdEncrypter {
  public static IdEncrypter createFromAead(Aead aead);

  public String encrypt(long id) throws GeneralSecurityException;
  public long decrypt(String encrypted) throws GeneralSecurityException;
};

Il passaggio di un Aead ottiene le seguenti proprietà:

  1. Il codice comunica che, affinché IdEncrypter possa svolgere il proprio lavoro, è necessario un schema di crittografia con le proprietà di sicurezza fornite da Aead. In alternativa, DeterministicAead non sarebbe sufficiente. IdEncrypter richiede che due crittografie gli stessi ID sono diversi. Al contrario, prendendo come parametro un'istanza uno strumento di crittografia AES GCM (una particolare istanza di un Aead) sarebbe eccessivo rigorosa: qualsiasi Aead è sufficiente affinché IdEncrypter faccia il suo lavoro, e non devono essere un singolo algoritmo specifico.
  2. Un controllo della sicurezza può prendere in considerazione questo punto. Un revisore della sicurezza non è necessario esaminare l'intero repository di codice per verificare da qualche parte, qualcuno ha creato una sottoclasse di Aead che non è sicura da usare con IdEncrypter. Tink offre invece proprietà di sicurezza che Gli oggetti Aead ne hanno, quindi il revisore può verificare che siano sufficienti.

In particolare, il secondo punto richiede molta attenzione. Gli utenti chiedono spesso di aggiungere algoritmi che sono "non esattamente" Aead. Il punto precedente spiega perché questo è pericoloso: se è disponibile un'implementazione di Aead che non forniscono le garanzie di sicurezza richieste, IdEncrypter può diventare insicuro, e l'ingegnere che esegue una revisione della sicurezza deve esaminare codice aggiuntivo per verificare che l'istanza dell'oggetto sia creata correttamente.