AIGC革命已来,如何在企业场景落地?如何选择模型、怎样应用RAG、需要哪些组织流程配套? 了解详情
写点什么

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

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

关注

评论

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

互联网公司的「敏捷开发」流程是怎么样的?每个职位的角色和分工是什么?

万事ONES

替换 Spring Cloud,使用基于 Cloud Native 的服务治理

火山引擎开发者社区

云原生 后端 Service Mesh 服务网格

Pandas高级教程之:统计方法

程序那些事

Python 数据分析 pandas 程序那些事

Vchat挖矿软件开发|Vchat挖矿系统APP开发

HVC矿机系统开发|HVC矿机软件APP开发

【LeetCode】和相同的二元子数组Java题解

Albert

算法 LeetCode 7月日更

如何利用极狐GitLab CI提高生产力?

极狐GitLab

ci

打造中国数字军人 数军科技携黑科技亮相军博会

科技热闻

Swarm节点系统开发|Swarm节点APP软件开发

小马哥的Java项目训练营-毕业总结

姑射仙人

多媒体技术(一)之图形图像

轻口味

android 音视频 计算机图形学 图形图像处理

并发王者课-铂金9:互通有无-Exchanger如何完成线程间的数据交换

MetaThoughts

Java 多线程 并发

Rust从0到1-智能指针-Deref trait

rust 智能指针 smart pointer deref

无意中发现一个好用的前后端代码生成网

江湖一点雨

mybatis java代码 自动生成 vue自动生成 sql转实体

如何用EasyRecovery 快速找回误删的截图

淋雨

EasyRecovery 文件恢复 硬盘数据恢复 固态硬盘数据恢复

我给我讲GIT,并成功把我得罪了

加百利

git 7月日更

不藏了,这些Java反射用法总结都告诉你们

华为云开发者联盟

Java JVM 反射 java框架 MyBase

TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?

小林coding

计算机网络 HTTP TCP/IP

Redisson 分布式锁源码 06:公平锁排队加锁

程序员小航

Java redis 分布式锁 redisson

union 分页/group/join 复杂查询(.net core/framework)

Spook

sql ORM

领哆哆APP开发|领哆哆软件系统开发

DolphinDB插件开发深度解析

DolphinDB

数据库 大数据 时序数据库 插件开发 DolphinDB

研发管理和项目管理有哪些痛点?

万事ONES

研发管理 ONES 项目管理工具

萌宠大陆APP开发|萌宠大陆系统软件开发

云图说|华为HiLens云上管理平台,花样管理多种端侧设备

华为云开发者联盟

AI 华为云 云图说 华为HiLens EI智能体

FIL挖矿怎么样?FIL挖矿靠谱吗?

DGTT挖矿智能合约系统软件开发案例

计算机时间到底是怎么来的?程序员必看的时间知识!

Kaito

操作系统 计算机基础 时间 ntp

【Flutter 专题】93 图解 Dart 单线程实现异步处理之 Isolate (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

《大数据大创新:阿里巴巴云上数据中台之道》:解密阿里数据中台建设

云祁

大数据 读书笔记 数据中台 7月日更

高级码农设计的程序能解耦,是多么重要的一件事情!

小傅哥

spring 设计模式 小傅哥 观察者模式 系统解耦

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