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

Tink:用于 GCP、安卓和 iOS 的谷歌加密软件库

2018 年 9 月 10 日

Tink 是由一些谷歌加密工程师和安全工程师开发的一种多语言的、跨平台的加密软件库,意在帮助开发人员无需成为加密专家就可以正确地实现加密。经过最近两年的开发, 1.2 版本中添加了对 GCP、安卓和 iOS 平台以及 C++ 和 Objective-C 的支持

Tink 源自于另一个谷歌的项目。该项目意在加固加密软件库应对偏斜随机数(biased nonces)、无效曲线(invalid curves)等已知攻击,并确保DSA、RSA、AES-EAX 等广为使用的加密算法给出正常的行为。基于该项目的经验,谷歌工程师着手创建了这个新的软件库,目标是提供易于正确使用并难以误用的安全API。例如,为防止出现可导致加密算法安全性降低的随机数重用问题,Tink 不允许用户传递随机数。同时,Tink 努力使其提供的每个API 都有尽可能明确的安全保证。例如,如果一个特定的操作对选择密文攻击(chosen-ciphertext attack)是安全的,那么该保证会显示在接口上,并且实现该操作所用的每个原语都必须满足同一保证。

Tink 当前提供四种加密操作。每种操作都是由特定的原语实现的:

  • 对相关联数据经认证的加密。(原语:AEAD)。
  • 消息认证代码(原语:MAC)。
  • 数字签名(原语:PublicKeySign 和 PublicKeyVerify)
  • 混合加密(原语:HybridEncrypt 和 HybridDecrypt)。

每个操作都有一组关联的最小属性,并具有一个保证。一个原语可以有多种实现,用户通过实例化相应类型的密钥选择具体使用的实现。例如,下面的代码使用 AEAD 原语实现 AES-EAX 加密文本:

复制代码
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. 生成密钥。
KeysetHandle keysetHandle = KeysetHandle.generateNew(
AeadKeyTemplates.AES256_EAX);
// 2. 获取原语。
Aead aead = AeadFactory.getPrimitive(keysetHandle);
// 3. 使用原语。
byte[] plaintext = ...;
byte[] additionalData = ...;
byte[] ciphertext = aead.encrypt(plaintext, additionalData);

除了加密操作,Tink 还提供对密码管理的支持,包括密钥版本管理、密钥旋转,以及支持远程密钥管理系统(KMS,key management system)。当前,Tink 支持下列 KMS: - Google Cloud KMS。

  • Amazon KMS。
  • Android Keystore。
  • Apple iOS KeyChain(计划中)。

Tink 当前支持 Java、C++ 和 Objective-C。意向于2018 年12 月发布的1.3 版本将提供对C#、Go 和JavaScript/Node 的支持。

尽管Tink 并非受谷歌官方支持的产品,但是它已经用于一些谷歌产品,其中包括AdMob、Google Pay、Google Assistant、Firebase 和Search API 等。

查看英文原文: Tink is Google Cryptographic Library for the Cloud, Android, and iOS

2018 年 9 月 10 日 08:071452
用户头像

发布了 381 篇内容, 共 100.4 次阅读, 收获喜欢 232 次。

关注

评论

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

week 11学习总结

Geek_2e7dd7

ARTS挑战打卡第五周(200608-200614)

老胡爱分享

ARTS 打卡计划

Linux系统监控工具推荐

王坤祥

监控 工具软件

Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表

简爱W

请不要随便修改基类

架构师修行之路

LeetCode题解:26. 删除排序数组中的重复项,双指针,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Redis 之父关于 CRC64 的神秘往事!

yes

redis CRC

图解javascript——基础篇(以思维导图总结js中关键技术点,为面试及工作助力)

执鸢者

Java 前端

视频码控:CBR、VBR和ABR

潇湘落木

直播 SRS 视频编码 码控

十一周作业

olderwei

极客大学架构师训练营

Docker搭建项目环境实战

书旅

Docker Dockerfile Docker-compose

让理性思维走进我们的生活,帮助我们做出更好的决策。

叶小鍵

心理学 基思. 斯坦诺维奇 超越智商 认知科学

ARTS 打卡第四周(200601-200607)

老胡爱分享

ARTS 打卡计划

JeecgBoot手记

卧石漾溪

用科学的方法理解每日优鲜

石云升

新零售 每日优鲜 多快好省 科学分析

ARTS挑战打卡第八周(200629-200705)

老胡爱分享

ARTS 打卡计划

一个快捷方便的油煎鸡胸肉,懒人标配香喷喷好吃看得见

小霸王其乐无穷

美食 鸡胸肉 懒人

数据库是咋工作的?

简爱W

前端分页组件实现逻辑

书旅

php 前端 分页

ARTS挑战打卡第六周(200615-200621)

老胡爱分享

ARTS 打卡计划

ARTS 挑战打卡第七周(200622-200628)

老胡爱分享

ARTS 打卡计划

【解Bug之路】——Nginx 502 Bad Gateway

简爱W

ARTS 挑战打卡第九周(200706-200712)

老胡爱分享

ARTS 打卡计划

介绍一款API敏捷开发工具

棒锤🐮

敏捷开发 Rocket API API敏捷开发

week 11

Geek_2e7dd7

完了,这个硬件成精了,它竟然绕过了 CPU

简爱W

SQL查询语句执行顺序详解

书旅

MySQL SQL语法 sql查询

马方业:区块链就是新未来 区块链就是新财富

CECBC区块链专委会

区块链 新未来 新财富

融云 X- Meetup 技术沙龙广州站:全球通信云技术实践分享

InfoQ_967a83c6d0d7

动态修改logback的日志级别

华宇法律科技

Java springboot logback

战斗还是逃避,或许可以考虑一下合作?

escray

学习 面试

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

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

Tink:用于GCP、安卓和iOS的谷歌加密软件库-InfoQ