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:
- Promuovere l'agilità crittografica: gli utenti devono essere in grado di modificare le chiavi e gli algoritmi in modo semplice.
- 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:
- 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.
- 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.
- 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à:
- Il codice comunica che, affinché
IdEncrypter
possa svolgere il proprio lavoro, è necessario un schema di crittografia con le proprietà di sicurezza fornite daAead
. 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 unAead
) sarebbe eccessivo rigorosa: qualsiasi Aead è sufficiente affinchéIdEncrypter
faccia il suo lavoro, e non devono essere un singolo algoritmo specifico. - 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 conIdEncrypter
. 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.