Qu'est-ce que Tink ?
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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:
- Favoriser l'agilité cryptographique: les utilisateurs doivent pouvoir modifier les clés et
de manière simple.
- 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:
- 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.
- 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.
- 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:
- 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.
- 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é.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/25 (UTC)."],[[["\u003cp\u003eTink is an open-source cryptography library designed for easy and secure implementation of common cryptographic tasks, even for users without a cryptography background.\u003c/p\u003e\n"],["\u003cp\u003eTink prioritizes security by adding protections on top of existing libraries like BoringSSL, using distinct APIs for potentially risky operations, and ensuring ciphertext compatibility with other libraries.\u003c/p\u003e\n"],["\u003cp\u003eTink promotes cryptographic agility by enabling easy key and algorithm changes, and it supports integration with external key management systems like Amazon KMS and Google Cloud KMS.\u003c/p\u003e\n"],["\u003cp\u003eDesigned with security reviews in mind, Tink utilizes interfaces with clear security guarantees and the concept of keysets for enhanced security and code clarity.\u003c/p\u003e\n"],["\u003cp\u003eGoogle, Square, and Citadel are among the many companies that utilize Tink, further demonstrating its reliability and widespread adoption within various applications and systems.\u003c/p\u003e\n"]]],["Tink, a Google-developed open-source cryptography library, simplifies secure cryptographic implementation for users, even without cryptography expertise. It's designed for simplicity, security, and compatibility, supporting key rotation and external Key Management Systems (KMS). Tink prioritizes cryptographic agility, enabling easy key and algorithm changes, and facilitates security reviews by providing clear interfaces and security guarantees. It uses primitives, keysets, and comprehensive key specifications to achieve these goals, ensuring secure, verifiable, and adaptable cryptographic operations.\n"],null,["# What is Tink?\n\nTink is an open-source cryptography library written by cryptographers and\nsecurity engineers at Google. Tink's secure and simple APIs reduce common\npitfalls through user-centered design, careful implementation and code reviews,\nand extensive testing. See the [Goals](#tink_goals) section on this page for\nmore insight into which objectives Tink was designed to fulfil.\n\nTink helps users without a cryptography background safely implement common\ncryptographic tasks. At Google, Tink has been deployed in hundreds of products\nand systems.\n\nWhy should I use Tink?\n----------------------\n\nThe most important reasons to use Tink are:\n\n- **It's simple to use**\n\n Cryptography is difficult to get right. With Tink, you can\n [encrypt](/tink/encrypt-data) or [sign data](/tink/digitally-sign-data) with\n built-in security guarantees using just a few lines of code. Tink can also\n help you rotate keys or secure keys using external Key Management Systems\n (KMSs).\n- **It's secure**\n\n Tink adds security protections on top of well known libraries like BoringSSL\n and Java Cryptography Architecture and shows them right in the interfaces,\n so auditors and tools can quickly find gaps. Tink also separates APIs that\n are potentially dangerous, so you can monitor them.\n- **It's compatible**\n\n Tink ciphertexts are compatible with existing cryptography libraries. Tink\n also supports [encrypting or storing keys](/tink/client-side-encryption) in\n Amazon KMS, Google Cloud KMS, Android Keystore, and iOS Keychain.\n\nWho's using Tink?\n-----------------\n\nTink is widely used by many companies, including Google, Square, and Citadel, as\nwell as hundreds of Google Cloud customers and Google Pay partners. Tink also\npowers the Jetpack Security library, which secures many popular Android apps\nlike Slack, Adidas, AirBnb, and Nextdoor.\n\nTink Goals\n----------\n\nWhat are the main goals of Tink compared to other cryptographic libraries, and\nwhat are the main mechanisms which Tink uses to achieve these goals?\n\nIn short, Tink has two goals:\n\n1. *Promote cryptographic agility*: Users should be able to change keys and algorithms in a simple way.\n2. *Enable security reviews*: Tink aims to allow users to write code whose security can be reviewed locally, by providing interfaces which give clear security guarantees.\n\nThe main mechanisms Tink uses to achieve these goals are as follows:\n\n1. Tink provides primitives and interfaces as important abstractions. These abstractions allow users to write code which does not specify the exact algorithm to be used, but instead specifies the expected security notion.\n2. Tink uses the notion of a \"keyset\", which is a set of keys that are associated with a particular primitive. This results in users writing code which works with multiple keys.\n3. In Tink, keys are not only specified by the underlying key material, but also the cryptographic algorithm, as well as all parameters. This means that a Tink key always selects a unique cryptographic function from all possible functions which can exist, and leaves no room for interpretation.\n\nThe following sections explain these concepts in more detail.\n\n### Cryptographic agility\n\nConsider [Software Engineering at Google](https://abseil.io/resources/swe-book),\na book about lessons learned in the field of software engineering, with the\nsubtitle \"lessons learned from programming over time\". In it, the authors go to\ngreat lengths to implore the implications of the fact that things change. This\nfact also impacted much of the design of Tink. In cryptography, it is important\nthat one prepares for change. Keys will leak, and algorithms will be broken.\nBeing able to switch out keys and algorithms is crucial for many users, and\nbeing prepared is prudent.\n\n### Security reviews and local properties\n\nTink promotes the use of interfaces, such as our AEAD interface, which allows\nusers to encrypt data. Among [other security guarantees](https://developers.google.com/tink/aead#security_guarantees), an AEAD\nguarantees that multiple encryptions of the same string result in different\nciphertexts.\n\nTo see how this can be used, suppose an engineer wants to store some sensitive\nID in a user cookie. They might provide a class such as this: \n\n class IdEncrypter {\n public static IdEncrypter createFromAead(Aead aead);\n\n public String encrypt(long id) throws GeneralSecurityException;\n public long decrypt(String encrypted) throws GeneralSecurityException;\n };\n\nPassing an `Aead` obtains the following properties:\n\n1. The code communicates that for `IdEncrypter` to do its job, it requires an encryption scheme with the security properties an [`Aead` provides](https://developers.google.com/tink/aead#security_guarantees). Alternatively, a [`DeterministicAead`](https://developers.google.com/tink/deterministic-aead) wouldn't be enough -- the `IdEncrypter` requires that two encryptions of the same id are different. On the other hand, taking as parameter an instance of an AES GCM encrypter (one particular instance of an `Aead`) would be overly strict: any Aead is enough for `IdEncrypter` to do its job, and it does not need to be one specific algorithm.\n2. A security review can take this point into account. A security reviewer does not need to go through all of the entire code repository to check if somewhere, someone made a subclass of `Aead` which is not secure for use with `IdEncrypter`. Instead, Tink provides security properties which all Aead objects have, and the reviewer can check that these are sufficient.\n\nIn particular the second point requires a lot of care. Users often ask to add\nalgorithms which are 'not quite' an `Aead`. The previous point illustrates why\nthis is dangerous: if there is any implementation of `Aead` available which does\nnot provide the required security guarantees, `IdEncrypter` can become insecure,\nand the engineer performing a security review needs to examine additional code\nto check that the object is instantiated correctly."]]