Qu'est-ce que Tink ?

Tink est une bibliothèque de cryptographie open source écrite par des cryptographes et ingénieurs en sécurité de Google. Les API simples et sécurisées de Tink réduisent les grâce à la conception centrée sur l'utilisateur, à une mise en œuvre minutieuse et à des revues de code et des tests approfondis. Consultez la section Objectifs de cette page pour en savoir plus plus de détails sur les objectifs que Tink a été conçu pour atteindre.

Tink aide les utilisateurs sans expérience en cryptographie à implémenter de manière sécurisée de chiffrement. Chez Google, Tink a été déployé dans des centaines de produits et systèmes.

Pourquoi utiliser Tink ?

Voici les principales raisons d'utiliser Tink:

  • Simplicité d'utilisation

    La cryptographie est difficile à comprendre. Avec Tink, vous pouvez chiffrer ou signer des données avec des garanties de sécurité intégrées avec seulement quelques lignes de code. Tink peut également vous aident à alterner des clés ou à sécuriser des clés à l'aide de systèmes externes de gestion des clés (KMS).

  • Sécurité

    Tink ajoute des protections de sécurité en plus de bibliothèques bien connues comme BoringSSL. et Java Cryptography Architecture et les montre directement dans les interfaces, afin que les auditeurs et les outils puissent identifier rapidement les lacunes. Tink sépare également les API sont potentiellement dangereux, vous pouvez donc les surveiller.

  • Il est compatible

    Les textes chiffrés Tink sont compatibles avec les bibliothèques de cryptographie existantes. Tink permet également de chiffrer ou de stocker des clés dans Amazon KMS, Google Cloud KMS, Android Keystore et trousseau iOS

Qui utilise Tink ?

Tink est largement utilisé par de nombreuses entreprises, y compris Google, Square et citadelle, car ainsi que des centaines de clients Google Cloud et de partenaires Google Pay. Parler également alimente la bibliothèque Jetpack Security, qui sécurise de nombreuses applications Android populaires. comme Slack, Adidas, AirBnb et Nextdoor.

Objectifs Tink

Quels sont les principaux objectifs de Tink par rapport aux autres bibliothèques cryptographiques ? Quels sont les principaux mécanismes utilisés par Tink pour atteindre ces objectifs ?

En bref, Tink a deux objectifs:

  1. Favoriser l'agilité cryptographique: les utilisateurs doivent pouvoir modifier les clés et de manière simple.
  2. Activer les examens de sécurité: Tink vise à permettre aux utilisateurs d'écrire du code la sécurité peut être examinée au niveau local, à l'aide d'interfaces qui permettent aux garanties de sécurité.

Les principaux mécanismes utilisés par Tink pour atteindre ces objectifs sont les suivants:

  1. Tink fournit des primitives et des interfaces en tant qu'abstractions importantes. Ces permettent aux utilisateurs d'écrire du code qui ne spécifie pas algorithme, mais spécifie à la place la notion de sécurité attendue.
  2. Tink utilise la notion de "collection de clés", c'est-à-dire un ensemble de clés associées à une primitive particulière. Cela a pour effet que les utilisateurs écrivent du code qui fonctionne avec plusieurs clés.
  3. Dans Tink, les clés ne sont pas seulement spécifiées par le matériel de clé sous-jacent, l’algorithme cryptographique, ainsi que tous les paramètres. Cela signifie que une clé Tink sélectionne toujours une fonction cryptographique unique parmi toutes les fonctions qui peuvent exister et ne laisse aucune place à l'interprétation.

Les sections suivantes expliquent ces concepts plus en détail.

Agilité cryptographique

Pensez à l'ingénierie logicielle chez Google, un livre sur les leçons apprises dans le domaine de l'ingénierie logicielle, avec sous-titre « leçons apprises de la programmation au fil du temps ». Ici, les auteurs se rendent pour implorer les implications du fait que les choses changent. Ce a également eu une grande influence sur la conception de Tink. En cryptographie, il est important qu’on se prépare au changement. Les clés seront divulguées et les algorithmes ne fonctionneront plus. Être capable de changer les clés et les algorithmes est crucial pour de nombreux utilisateurs, et il est prudent d’être préparé.

Examens de sécurité et propriétés locales

Tink encourage l'utilisation d'interfaces telles que notre interface AEAD, qui permet pour chiffrer les données. Entre autres garanties de sécurité, un AEAD garantit que plusieurs chiffrements d'une même chaîne génèrent des des textes chiffrés.

Pour voir comment cela peut être utilisé, supposons qu'un ingénieur souhaite stocker des données dans le cookie d'un utilisateur. Ils pourraient fournir une classe telle que celle-ci:

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

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

La transmission d'un Aead permet d'obtenir les propriétés suivantes:

  1. Le code indique que pour que IdEncrypter puisse faire son travail, il a besoin d'une schéma de chiffrement avec les propriétés de sécurité fournies par Aead. Vous pouvez également DeterministicAead ne suffirait pas. IdEncrypter exige que deux chiffrements du le même identifiant sont différents. D'un autre côté, en prenant comme paramètre une instance un chiffreur AES GCM (une instance particulière d'un Aead) serait trop strict: tout champ Aead est suffisant pour que IdEncrypter puisse remplir son rôle, mais pas un algorithme spécifique.
  2. Un examen de sécurité peut tenir compte de ce point. Un examinateur de sécurité fait pas besoin de parcourir tout le dépôt de code pour vérifier quelque part, quelqu'un a créé une sous-classe de Aead dont l'utilisation n'est pas sécurisée. avec IdEncrypter. À la place, Tink fournit des propriétés de sécurité des objets Aead, et l'examinateur peut vérifier qu'ils sont suffisants.

Le deuxième point, tout particulièrement, demande beaucoup de soin. Les utilisateurs demandent souvent à ajouter des algorithmes qui ne sont pas tout à fait un Aead. Le point précédent montre pourquoi Ceci est dangereux: si une implémentation de Aead est disponible, ne fournissent pas les garanties de sécurité requises, IdEncrypter peut devenir non sécurisé, et l'ingénieur effectuant un examen de sécurité doit examiner le code supplémentaire pour vérifier que l'objet est correctement instancié.