Tink ist eine Open-Source-Bibliothek für Kryptografie, die von Kryptografen und Security Engineers bei Google. Die sicheren und einfachen APIs von Tink reduzieren gängige durch nutzungsorientiertes Design, sorgfältige Implementierung und Codeüberprüfungen, und ausgiebigen Tests. Im Abschnitt Ziele auf dieser Seite finden Sie weitere Informationen dazu, welche Ziele mit Tink verfolgt werden können.
Tink hilft Nutzern ohne Kryptografie-Hintergrund, gängige kryptografischer Aufgaben. Bei Google wurde Tink in Hunderten von Produkten eingesetzt und Systeme.
Warum sollte ich Tink verwenden?
Die wichtigsten Gründe für die Verwendung von Tink sind:
Sie ist einfach zu verwenden
Kryptografie ist nicht einfach richtig. Mit Tink kannst du Daten verschlüsseln oder signieren mit integrierte Sicherheitsgarantien mit nur wenigen Codezeilen. Tink Dose unterstützen Sie beim Rotieren von Schlüsseln oder Sichern von Schlüsseln mit externen Key Management Systems (KMS).
Es ist sicher
Tink ergänzt bekannte Bibliotheken wie BoringSSL um Sicherheitsfunktionen und Java Cryptography Architecture und zeigt sie direkt in den Oberflächen, damit Prüfer und Tools schnell Lücken finden können. Tink trennt außerdem APIs, sind potenziell gefährlich und überwachen Sie sie.
Es ist kompatibel
Tink-Geheimtexte sind mit vorhandenen Kryptografiebibliotheken kompatibel. Tink unterstützt auch das Verschlüsseln oder Speichern von Schlüsseln in Amazon KMS, Google Cloud KMS, Android-Schlüsselspeicher und iOS-Schlüsselbund
Wer verwendet Tink?
Tink wird von vielen Unternehmen verwendet, darunter Google, Square und Citadel, sowie Hunderten von Google Cloud-Kunden und Google Pay-Partnern. Auch Tink unterstützt die Jetpack Security-Bibliothek, die viele beliebte Android-Apps schützt. wie Slack, Adidas, AirBnb und Nextdoor.
Tink-Tore
Was sind die Hauptziele von Tink im Vergleich zu anderen Kryptografiebibliotheken und Was sind die Hauptmechanismen, mit denen Tink diese Ziele erreicht?
Kurz gesagt hat Tink zwei Ziele:
- Förderung kryptografischer Agilität: Nutzer sollten in der Lage sein, Schlüssel und Algorithmen erklären.
- Sicherheitsüberprüfungen aktivieren: Tink möchte Nutzern ermöglichen, Code zu schreiben, die Sicherheit lokal überprüft werden kann, indem Schnittstellen zur Verfügung gestellt werden, Sicherheitsgarantien.
Tink erreicht diese Ziele vor allem folgendermaßen:
- Tink stellt Primitive und Schnittstellen als wichtige Abstraktionen bereit. Diese ermöglichen es Nutzenden, Code zu schreiben, der nicht den genauen verwendet werden. Stattdessen wird das erwartete Sicherheitskonzept angegeben.
- Tink verwendet das Konzept eines "Schlüsselsatzes". Dabei handelt es sich um eine Reihe von Schlüsseln, die die mit einem bestimmten Primitiv verknüpft sind. Das führt dazu, dass Nutzende Code schreiben, das mit mehreren Schlüsseln funktioniert.
- In Tink werden Schlüssel nicht nur durch das zugrunde liegende Schlüsselmaterial angegeben, den kryptografischen Algorithmus und alle Parameter. Das bedeutet, dass Ein Tink-Schlüssel wählt immer eine eindeutige kryptografische Funktion aus allen möglichen Funktionen, die existieren können und lassen keinen Raum für Interpretationen.
In den folgenden Abschnitten werden diese Konzepte ausführlicher erläutert.
Kryptografische Agilität
Ziehen Sie z. B. Software Engineering bei Google in Betracht, ein Buch über Lehren aus dem Software-Engineering, mit dem Unterüberschrift: „Erkenntnisse aus dem Programmieren im Laufe der Zeit“. Darin finden die Autoren die Auswirkungen der Veränderungen angezweifelt haben. Dieses auch einen großen Teil des Designs von Tink beeinflusst. In der Kryptografie ist es wichtig, dass man sich auf Veränderungen vorbereitet. Schlüssel gehen verloren und Algorithmen funktionieren nicht mehr. Schlüssel und Algorithmen müssen für viele Nutzende ausgetauscht werden können. gut vorbereitet zu sein.
Sicherheitsüberprüfungen und lokale Properties
Tink fördert die Verwendung von Oberflächen, wie z. B. unserer AEAD-Schnittstelle, mit der Daten zu verschlüsseln. Neben anderen Sicherheitsgarantien bietet ein AEAD garantiert, dass mehrere Verschlüsselungen desselben Strings zu unterschiedlichen Ergebnissen führen. Geheimtexte.
Um zu sehen, wie dies verwendet werden kann, nehmen wir an, ein Entwickler möchte sensible ID in einem Nutzer-Cookie. Sie könnte eine Klasse wie diese bereitstellen:
class IdEncrypter {
public static IdEncrypter createFromAead(Aead aead);
public String encrypt(long id) throws GeneralSecurityException;
public long decrypt(String encrypted) throws GeneralSecurityException;
};
Durch Übergabe eines Aead
werden die folgenden Attribute abgerufen:
- Der Code teilt Ihnen mit, dass für die Ausführung von
IdEncrypter
ein Verschlüsselungsschema mit den Sicherheitseigenschaften vonAead
. Alternativ kann einDeterministicAead
würde das nicht ausreichen –IdEncrypter
erfordert, dass zwei Verschlüsselungen des IDs unterschiedlich sind. Wenn Sie dagegen eine Instanz von ein AES-GCM-Verschlüsselungstools (eine bestimmte Instanz einesAead
) zu verwenden wäre, Streng: Jeder Aead reicht aus, damitIdEncrypter
seine Aufgabe erledigen kann, ein bestimmter Algorithmus sein. - Bei einer Sicherheitsüberprüfung kann dies berücksichtigt werden. Ein Sicherheitsprüfer macht
nicht das gesamte Code-Repository durchgehen müssen,
Jemand hat eine abgeleitete Klasse von
Aead
erstellt, die nicht sicher verwendet werden kann mitIdEncrypter
. Stattdessen bietet Tink Sicherheitsfunktionen, Aead-Objekte bestehen. Der Prüfer kann dann prüfen, ob diese ausreichend sind.
Insbesondere der zweite Punkt erfordert viel Sorgfalt. Nutzer bitten oft um Hinzufügen
Algorithmen, die „nicht ganz“ ein Aead
. Der vorherige Punkt veranschaulicht,
Das ist gefährlich, wenn eine Implementierung von Aead
verfügbar ist, die
nicht die erforderlichen Sicherheitsgarantien bieten,
kann IdEncrypter
unsicher werden
und der Entwickler, der eine Sicherheitsüberprüfung durchführt,
zusätzlichen Code untersuchen muss,
um zu prüfen, ob das Objekt korrekt instanziiert wurde.