Tink — это криптографическая библиотека с открытым исходным кодом, написанная криптографами и инженерами по безопасности Google. Безопасные и простые API-интерфейсы Tink позволяют избежать распространенных ошибок благодаря ориентированному на пользователя проектированию, тщательной реализации и проверке кода, а также тщательному тестированию. См. раздел «Цели» на этой странице, чтобы получить более подробную информацию о том, для достижения каких целей был создан Tink.
Tink помогает пользователям, не имеющим опыта работы в области криптографии, безопасно реализовывать распространенные криптографические задачи. В Google Tink используется в сотнях продуктов и систем.
Почему мне следует использовать Тинк?
Наиболее важные причины использовать Tink:
Это просто использовать
Криптографию трудно понять правильно. С помощью Tink вы можете зашифровать или подписать данные со встроенными гарантиями безопасности, используя всего несколько строк кода. Tink также может помочь вам сменить ключи или защитить ключи с помощью внешних систем управления ключами (KMS).
Это безопасно
Tink добавляет средства защиты поверх известных библиотек, таких как BoringSSL и Java Cryptography Architecture, и показывает их прямо в интерфейсах, чтобы аудиторы и инструменты могли быстро найти пробелы. Tink также отделяет потенциально опасные API, чтобы вы могли отслеживать их.
Это совместимо
Зашифрованные тексты Tink совместимы с существующими криптографическими библиотеками. Tink также поддерживает шифрование или хранение ключей в Amazon KMS, Google Cloud KMS, Android Keystore и iOS Keychain.
Кто использует Тинк?
Tink широко используется многими компаниями, включая Google, Square и Citadel, а также сотнями клиентов Google Cloud и партнерами Google Pay. Tink также поддерживает библиотеку Jetpack Security, которая защищает многие популярные приложения для Android, такие как Slack, Adidas, AirBnb и Nextdoor.
Тинк Голы
Каковы основные цели Tink по сравнению с другими криптографическими библиотеками и каковы основные механизмы, которые Tink использует для достижения этих целей?
Короче говоря, у Тинка две цели:
- Повышайте криптографическую гибкость : пользователи должны иметь возможность легко менять ключи и алгоритмы.
- Включение проверок безопасности : Tink стремится позволить пользователям писать код, безопасность которого можно проверять локально, предоставляя интерфейсы, которые дают четкие гарантии безопасности.
Основные механизмы, которые Тинк использует для достижения этих целей, следующие:
- Tink предоставляет примитивы и интерфейсы как важные абстракции. Эти абстракции позволяют пользователям писать код, который не определяет точный используемый алгоритм, а вместо этого определяет ожидаемое понятие безопасности.
- Tink использует понятие «набора ключей», который представляет собой набор ключей, связанных с определенным примитивом. Это приводит к тому, что пользователи пишут код, который работает с несколькими ключами.
- В Tink ключи определяются не только базовым материалом ключа, но и криптографическим алгоритмом, а также всеми параметрами. Это означает, что ключ Tink всегда выбирает уникальную криптографическую функцию из всех возможных функций, которые могут существовать, и не оставляет места для интерпретации.
В следующих разделах эти концепции объясняются более подробно.
Криптографическая гибкость
Возьмем, к примеру, книгу «Разработка программного обеспечения в Google» , посвященную урокам, полученным в области разработки программного обеспечения, с подзаголовком «Уроки, извлеченные из программирования с течением времени». В нем авторы прикладывают все усилия, чтобы понять последствия того факта, что все меняется. Этот факт также повлиял на большую часть дизайна Tink. В криптографии важно быть готовым к изменениям. Ключи утекут, а алгоритмы сломаются. Возможность переключать ключи и алгоритмы имеет решающее значение для многих пользователей, и к этому следует быть готовым.
Проверки безопасности и местные свойства
Tink продвигает использование интерфейсов, таких как наш интерфейс AEAD, который позволяет пользователям шифровать данные. Помимо других гарантий безопасности , AEAD гарантирует, что многократное шифрование одной и той же строки приводит к получению разных зашифрованных текстов.
Чтобы увидеть, как это можно использовать, предположим, что инженер хочет сохранить некий конфиденциальный идентификатор в файле cookie пользователя. Они могут предоставить такой класс:
class IdEncrypter {
public static IdEncrypter createFromAead(Aead aead);
public String encrypt(long id) throws GeneralSecurityException;
public long decrypt(String encrypted) throws GeneralSecurityException;
};
Передача Aead
приобретает следующие свойства:
- Код сообщает, что для того, чтобы
IdEncrypter
выполнял свою работу, ему требуется схема шифрования со свойствами безопасности , которые предоставляетAead
. В качестве альтернативы,DeterministicAead
будет недостаточно —IdEncrypter
требует, чтобы два шифрования одного и того же идентификатора были разными. С другой стороны, брать в качестве параметра экземпляр шифратора AES GCM (один конкретный экземплярAead
) было бы слишком строго: любого Aead достаточно, чтобыIdEncrypter
выполнил свою работу, и это не обязательно должен быть один конкретный алгоритм. - При проверке безопасности можно принять во внимание этот момент. Рецензенту безопасности не нужно просматривать весь репозиторий кода, чтобы проверить, не создал ли где-нибудь кто-то подкласс
Aead
, который небезопасен для использования сIdEncrypter
. Вместо этого Tink предоставляет свойства безопасности, которые есть у всех объектов Aead, и проверяющий может проверить, достаточны ли они.
В особенности второй пункт требует большой внимательности. Пользователи часто просят добавить алгоритмы, которые «не совсем» Aead
. Предыдущий пункт иллюстрирует, почему это опасно: если существует какая-либо доступная реализация Aead
, которая не обеспечивает требуемых гарантий безопасности, IdEncrypter
может стать небезопасным, и инженеру, выполняющему проверку безопасности, необходимо изучить дополнительный код, чтобы убедиться, что объект создан. правильно.