写点什么

谷歌开源的加密库 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:165609
用户头像

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

关注

评论

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

红象云腾完成与龙蜥操作系统兼容适配,产品运行稳定

OpenAnolis小助手

开源 龙蜥社区 龙蜥操作系统 红象云腾 兼容适配

特尔携手微软发挥边云协同势能,推动AI规模化部署

科技之家

NFT质押流动性挖矿系统开发技术

薇電13242772558

NFT 流动性挖矿

NFT双币质押流动性挖矿系统开发

开发微hkkf5566

图像搜索应用场景(个人见解,欢迎补充)

Geek_e369a5

什么是图像搜索 图像搜索的应用场景 拍照购物用图像搜索的作用

SAP Marketing Cloud 功能概述(三)

汪子熙

SaaS SAP 云应用 6月月更 Marketing Cloud

P2PDB 白皮书

Rock-李益

区块链 去中心化数据库

左手代码,右手开源,开源路上的一份子

开源社

开源

无界共创,明道云参与广汽本田IT新技术展

明道云

全链路业务追踪落地实践方案

云智慧AIOps社区

运维 AIOPS 解决方案 全链路追踪

Vue项目的创建和托管

Python研究所

6月月更

【计算讲谈社】第三讲:如何提出关键问题?

大咖说

逻辑学 辩证思维 关键问题

leetcode 139. Word Break 单词拆分(中等)

okokabcd

LeetCode 动态规划 算法与数据结构

科创人·味多美CIO胡博:数字化是不流血的革命,正确答案藏在业务的田间地头

科创人

全上链哈希游戏dapp系统定制(方案设计)

开发微hkkf5566

如何实现一套容器(C 语言版)2

祖维

c 容器 泛型 迭代器 双向链表

在 Django 中呈现 HTML 表单(GET 和 POST)

海拥(haiyong.site)

Python django 6月月更

传统的IO存在什么问题?为什么引入零拷贝的?

源字节1号

实时渲染:实时、离线、云渲染、混合渲染的区别

Finovy Cloud

渲染 云渲染

Bytebase加入阿里云PolarDB开源数据库社区

阿里云数据库开源

阿里云 开源数据库 polarDB PolarDB-X 阿里云数据库

解密安卓微信聊天信息存储

ooooooh灰灰

Go sqlite 微信 后端 SqlCipher

业务与技术双向结合构建银行数据安全管理体系

易观分析

银行数字化

CentOS中实现基于Docker部署BI数据分析

葡萄城技术团队

Docker centos BI 分析工具

效率提升 100%,YRCloudFile 让自动驾驶安全更有保障

焱融科技

人工智能 自动驾驶 大数据 数据存储

SAP Marketing Cloud 功能概述(四)

汪子熙

云原生 SaaS SAP 6月月更 Marketing Cloud

等保备案是等保测评吗?两者是什么关系?

行云管家

备案 等保 等级保护 等保备案 等级测评

模块五

Geek_2ce415

【6.16-6.24】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

虚拟化是什么意思?包含哪些技术?与私有云有什么区别?

行云管家

云计算 运维 虚拟化 IT运维

制造业项目MDM主数据项目实施心得

agileai

数据治理 数据集成 企业服务总线 项目实施 制造业项目

Java—Servlet

武师叔

6月月更

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