10月21日,杭州云栖大会-技术&可持续发展论坛,注册有礼 了解详情
写点什么

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

2018 年 9 月 05 日

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

为了帮助开发人员交付安全的加密代码,谷歌开发了 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 年 9 月 05 日 09:162739
用户头像

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

关注

评论

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

百度大脑事件图谱:洞察复杂世界中的事件知识

百度大脑

架构师训练营第一期-第一周课后-作业一

OBS鉴权实现的宝典秘籍,速拿!

华为云开发者社区

OBS 签名

百度大脑助力旅游场景智能解决方案落地

百度大脑

Apache Pulsar 社区周报|09-05 ~ 09-11

Apache Pulsar

开源 云原生 Apache Pulsar 消息中间件

餐卡系统设计文档

追风

JDK15正式发布,划时代的ZGC同时宣布转正

YourBatman

ZGC JDK15

Rust闭包的虫洞穿梭

袁承兴

rust 函数式编程 闭包

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Philips

敏捷开发 软件开发 .net core 开发工具

关于性别

北宋

学习笔记丨浮点数探究

Liuchengz.

C语言 基本数据类型

架构师训练营第一期-第一周课后 - 作业二

Copy攻城狮辛酸史:含泪“一分钟”跑通MindSpore的LeNet模型

华为云开发者社区

学习 程序员 mindspore

git的几种实用操作(合并代码与暂存复原代码)

良知犹存

git

HTTP必知必会

陈靓-哲露

智能门禁的音视频技术应用

anyRTC开发者

音视频 WebRTC 直播 RTC

跨专业学习6个月,成功上岸阿里|滴滴,分享学习路线供大家参考

小Q

Java 学习 架构 面试 基础

食堂就餐卡系统设计 UML 练习

escray

学习 极客大学架构师训练营 UML

同城快递订单系统架构设计方案

周冬辉

2020年6月最新iOS面试题总结

iOSer

ios 2020 面试 经验总结

分布式系统:数据一致性解决方案

马迪奥

分布式事务 一致性

第一周作业,UML图

等燕归

Java基础知识面试题(2020最新版)

Java架构师迁哥

AWS在线技术峰会2020探班回顾,四大看点不容错过

有只小耳朵

云计算 AI 云原生 金融 医疗

入行架构师之前,这7项技能你要先了解一下

华为云开发者社区

架构 架构设计 架构师

GrowingIO 智能运营产品微前端实践

GrowingIO技术专栏

前端 智能运营

正则表达式

菜鸟小sailor 🐕

爬虫

Code Like Sync, Works Like Async

滴滴普惠出行

面试官:哪些场景会产生OOM?怎么解决?

艾小仙

Java 架构 面试 编程语言 JVM

卧槽!牛逼了!40K+Star!Mall电商实战项目开源回忆录!附源码、教程合集

云流

学习 程序员 架构师 计算机

我擦~字符串转字节切片后,切片的容量竟然千奇百怪

Gopher指北

Go 后端 后端开发

聊一下 Mesh 数据平面 Sidecar 与 Service 通信的那些事儿

聊一下 Mesh 数据平面 Sidecar 与 Service 通信的那些事儿

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