9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

谷歌开源的加密库 Tink 正式发布 1.2 版本

  • 2018-09-05
  • 本文字数:1292 字

    阅读完需:约 4 分钟

在谷歌,很多产品团队使用加密技术来保护用户数据。在加密技术领域,一个很细微的错误都会产生非常严重的后果。想要正确实现加密技术,可能需要先消化数十年的学术文献。毋庸置疑,很多开发人员没有这么多时间。

为了帮助开发人员交付安全的加密代码,谷歌开发了 Tink —一个支持多语言的跨平台加密库。他们希望 Tink 能够成为一个社区项目,因此 Tink 从一开始就托管在 GitHub 上,并且已经吸引到了几个外部贡献者。在谷歌,Tink 已经被用来保护多个产品的数据,如 AdMob、Google Pay、Google Assistant、Firebase、Android Search App 等。经过近两年的发展,Tink 正式迎来了 1.2 版本。这也是第一个支持云、Android、iOS 的版本!

Tink 致力于提供安全且易于使用的加密 API。Tink 建立在现有的库之上,如 BoringSSL 和 Java Cryptography Architecture,同时对这些库中存在的弱点进行了加固。

有了 Tink,很多常见的加密操作(如数据加密、数字签名等)只需几行代码即可完成。以下是使用 AEAD 接口加密和解密的示例(Java 版):

复制代码
import com.google.crypto.tink.Aead;
import com.google.crypto.tink.KeysetHandle;
import com.google.crypto.tink.aead.AeadFactory;
import com.google.crypto.tink.aead.AeadKeyTemplates;
// 1. Generate the key material.
KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES256_EAX);
// 2. Get the primitive.
Aead aead = AeadFactory.getPrimitive(keysetHandle);
// 3. Use the primitive.
byte[] plaintext = ...;
byte[] additionalData = ...;
byte[] ciphertext = aead.encrypt(plaintext, additionalData);
复制代码
<pre data-linenum="1" spellcheck="false">
Tink 尽可能消除潜在的误用情况。例如,如果底层加密模式需要 nonce,而重用 nonce 会导致不安全,那么 Tink 就不允许用户传递 nonce。接口的安全保证必须由实现接口的每个基元来满足,这可能会排除掉某些加密模式。对于这些模式,不能将它们添加到现有接口中,因为这样会削弱接口的安全保证,而是添加新的接口,并适当地描述它们的安全保证。

Tink 在接口中提供了安全属性描述(例如安全抵御选择密文攻击),让安全审计员和自动化工具可以快速发现安全保证与安全要求不匹配的用法。Tink 还隔离了用于进行潜在危险操作的 API(例如从磁盘加载明文密钥),这样就可以发现、限制、监视和记录它们的使用。

Tink 支持密钥管理,包括密钥轮换和逐步淘汰已弃用的密码。例如,如果发现加密原语被破坏,可以通过旋转秘钥切换到不同的原语,而无需更改或重新编译代码。

Tink 还支持扩展:可以轻松地添加自定义加密方案和密钥管理系统,与 Tink 的其他部分无缝协作。 在 Tink 中,没有哪个部分是难以更换或移除的,所有组件都是可组合的。例如,如果只需要数字签名,就可以移除对称密钥加密组件,以便最大限度地减少应用程序中的代码量。

要使用 Tink,可以参考 Java C++ Obj-C 的 HOW-TO。如果想与 Tink 开发人员讨论或获取项目的更新通知,可以订阅邮件列表,只需发送一封空电子邮件至 tink-users+subscribe@googlegroups.com 即可。或者在 StackOverflow 上发布问题,并使用 tink 作为标签。

2018-09-05 09:165722
用户头像

发布了 731 篇内容, 共 474.7 次阅读, 收获喜欢 2008 次。

关注

评论

发布
暂无评论
发现更多内容

6个优化策略,助你降低K8S成本

SEAL安全

k8s 成本管理

【源码分析】【seata】at 模式分布式事务 -rm 实现逻辑

如果晴天

源码分析 分布式事务 seata Seata框架

大数据时代数据化转型的多种模式

星环科技

Redis Set 用了 2 种数据结构来存储,到现在才知道

Java你猿哥

Java redis string HashMap底层原理

保姆教程 | 用GPU云主机搭建AI大语言模型并用Flask封装成API,实现用户与模型对话 | 京东云技术团队

京东科技开发者

flask gpu GPU服务器 企业号 4 月 PK 榜 AI大语言模型

低代码+智能化,企业数字化提速的又一场革命

科技热闻

使用 Flomesh 服务网格进行流量拆分

Flomesh

微服务 Service Mesh 服务网格

【Linux】中安装pip(详细教程)

A-刘晨阳

Python Linux 运维 pip 三周年连更

当生成式AI照进医疗,医患关系将何去何从?

脑极体

AI

Unity 之 实现背景图动态适配不同分辨率

陈言必行

Unity 三周年连更

好用的Angular组件库有哪些推荐的?TinyNG好用吗?

英勇无比的消炎药

开源 前端 angular OpenTiny

躬身入局的数科公司,为本就拥挤的数智化赛道带来了什么?

用友BIP

用友iuap 用友技术大会 数科公司

面面俱到!百度出品2023版Java面试指南,囊括面试所有硬核技能

程序员小毕

程序员 后端 架构师 java面试 八股文

华为ISDP工单宝应邀参加第十七届工程建设行业信息化发展大会

轶天下事

LuckyDraw发布啦

进基的小张

开源项目 Github'

Unity手机游戏开发:从搭建到发布上线全流程实战

海拥(haiyong.site)

三周年连更

企业号 5 月 PK 榜,火热开启!

InfoQ写作社区官方

热门活动 企业号 5 月 PK 榜

Java面向对象程序设计|二人间对话示例

TiAmo

Java 三周年连更 点对点通信 socket通信 面向对象程序设计

跨平台应用开发进阶(五十八):短链基本工作原理与实现方案

No Silver Bullet

短链接 跨平台应用开发 三周年连更

Go并发编程的秘密武器:内存模型和同步原语

Jack

Hi3861开发板入门

鸿蒙之旅

OpenHarmony 三周年连更

如何用 Go 实现一个配置包

江湖十年

企业级统一数据平台建设思路

星环科技

数据平台

推荐一些好用的ChatGPT扩展工具

石云升

ChatGPT 三周年连更

Qz学算法-数据结构篇(哈希表)

浅辄

数据结构 三周年连更

AI不会取代打工人,使用AI的人才会! | 社区征文

王中阳Go

程序员 AI GPT ChatGPT 三周年征文

微信小程序开发限制

肥晨

三周年连更

华为ISDP数字化现场作业在第十七届工程建设行业信息化发展大会亮相,备受企业瞩目

轶天下事

华为ISDP数字化现场作业:数字化转型助力电力行业安监风险管控

轶天下事

Spring Boot如何获取Excel sheet页?

bug菌

Spring Boot spring-boot 三周年连更

什么是软件开发领域的 obsolete 或者 deprecated 含义

汪子熙

软件开发 三周年连更

谷歌开源的加密库Tink正式发布1.2版本_Google_Thai Duong_InfoQ精选文章