Tink-多语言、跨平台、开源库密码API

2020-05-17 20:35:34

一种多语言跨平台库,提供安全、易于正确使用且难以误用的加密API。

在您的应用程序中使用密码不应该感觉像在黑暗中摆弄电锯。Tink是由谷歌的一群密码学家和安全工程师编写的密码库。它诞生于我们与谷歌产品团队合作的丰富经验,修复了实现中的弱点,并提供了简单的API,无需加密背景即可安全使用。

Tink提供了易于正确使用和难以误用的安全API,它以用户为中心的设计、仔细的实现和代码审查以及广泛的测试减少了常见的密码陷阱。在谷歌,Tink已经被用来保护许多产品的数据,如AdMob,Google Pay,Google Assistant,Firebase,Android搜索应用程序等。

要快速了解Tink设计,请查看在Real World Crypto 2019上展示的atalk中关于Tink的幻灯片。

开始使用Tink的推荐方式是使用Bazelisk。此工具由Bazel团队开发,可轻松确保使用与项目兼容的Bazel版本。

作为起点,这些示例演示了如何使用Tink以各种语言执行简单的任务。

Tink通过所谓的原语执行加密任务,每个原语都是通过指定原语功能的相应接口定义的。例如,对称密钥加密通过AEAD原语(使用AssociatedData的认证加密)提供,它支持两个操作:

ENCRYPT(PLAYTENT,Associated_Data),它加密给定的明文(使用Associated_Data作为附加的EAD输入)并返回结果密文

DECRYPT(ciphertext,Associated_data),它对给定的密文进行解密(使用Associated_data作为附加的EAD输入),并返回结果明文。

在可以使用原语的实现之前,它们必须在运行时注册到Tink,以便Tink知道所需的实现。下面介绍如何在Tink中注册所有原语的所有实现:

在注册了原语的实现之后,TinkProceses的基本使用分三步进行:

下面是在Java中使用AEAD原语加密或解密时的这些步骤:

导入com.google.crypt.tink.Aead;导入com.google.crypt.tink.KeysetHandle;导入com.google.crypt.tink.aead.AeadKeyTemplates;//1.生成密钥材料。KeysetHandle keysetHandle=KeysetHandle.GenerateNew(AeadKeyTemplates.AES128_GCM);//2.获取原语。aead aead=keysetHandle.getPrimitive(aead.class);//3.使用原语。byte[]ciphertext=aead.crypt(明文,AssociatedData);

Tink开箱即支持多种语言,但它仍然不支持每种语言。幸运的是,一些用户非常喜欢Tink,以至于他们把它翻译成了他们最喜欢的语言!下面您可以找到值得注意的端口。

警告:虽然我们通常会检查这些端口,但在另行通知之前,我们不会维护它们,也没有计划在可预见的将来支持它们。

如果您想投稿,请阅读CONTRIBUTING并向我们发送拉取请求。您还可以报告错误或文件功能请求。

如果您想与开发人员交谈或获得主要产品更新的通知,您可能需要订阅我们的邮件列表。