Was ist Tink?

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:

  1. Förderung kryptografischer Agilität: Nutzer sollten in der Lage sein, Schlüssel und Algorithmen erklären.
  2. 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:

  1. 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.
  2. 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.
  3. 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:

  1. Der Code teilt Ihnen mit, dass für die Ausführung von IdEncrypter ein Verschlüsselungsschema mit den Sicherheitseigenschaften von Aead. Alternativ kann ein DeterministicAead 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 eines Aead) zu verwenden wäre, Streng: Jeder Aead reicht aus, damit IdEncrypter seine Aufgabe erledigen kann, ein bestimmter Algorithmus sein.
  2. 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 mit IdEncrypter. 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.