当前位置: 首页 > 工具软件 > Tink > 使用案例 >

安全利器之Tink(探索-Java)

殳宸
2023-12-01

Tink,Google开源的专业加密库

github 密码学是一门复杂的学科,对于开发人员来说应该做到的大概是

  1. 加密算法的特点
    • 适用场景
    • 优点、缺点
  2. 加密算法的使用

在开发中我们可以直接使用Tink进行一些加密相关操作

Tink中的加密支持

在Tink中提供了Aead、DeterministicDead、Hybrid、Mac及signature的支持。从包结构看Tink的构成

  • aead, (Authenticated Encryption with Associated Data) 使用关联数据进行身法认证加密
  • annotations
  • config
  • daead, (Deterministic Authenticated Encryption with Associated Data)使用关联数据进行确定性认证加密
  • hybrid, 混合型加密
  • integration
  • mac, 带秘钥的hash
  • proto
  • signature, 签名
  • streamingaead, 使用关联数据进行流认证加密
  • subtle
  • util

通过官方demo我们可以知道Tink的使用方式。

// 运行时必须先使用Tink注册基元,以便让Tink知道所需的实现。
TinkConfig.register();

// 1.加载或生成加密密钥材料(Tink术语表示的KeySet)
KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);

// 2.使用密钥材料获取所选的基元的实例
Aead aead = AeadFactory.getPrimitive(keysetHandle);

// 3.使用基元实例来完成加密任务
byte[] ciphertext = aead.encrypt(plaintext, associatedData);

由于Tink代码是按照加密的类型分包,所以具体的使用方式也比较容易推敲

  1. XxxTemplates,支持的加密算法模版
  2. XxxFactory, 基元实例获取工厂
  3. 基元实例, 具体的加密等操作

aead

从AeadKeyTemplates中可以知道Tink支持了7种aead算法,分别是

  • AES128_GCM
  • AES256_GCM
  • AES128_EAX
  • AES256_EAX
  • AES128_CTR_HMAC_SHA256
  • AES256_CTR_HMAC_SHA256
  • CHACHA20_POLY1305

通过AeadFactory获取了Aead的实例,在AeadFactory中可以看到具体的加密、解密是的实现方式,我们可以直接通过其中的方法进行加密、解密,使用方式与上面代码差不多,只需替换Templates

注意事项

在运行过程中AES256会因为jre环境中的加密包不是授权版本的,需要单独下载替换。 参考

daead

仅提供了AES256_SIV加密算法的支持 使用DeterministicAeadFactory生成DeterministicAead实例,进行加密、解密操作

hybrid

从HybridKeyTemplates可知,Tink支持以下hybrid算法

  • ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256

存在两个Factory,分别用于生成加密基元和解密基元

  • HybridEncryptFactory
  • HybridDecryptFactory

mac

从MacKeyTemplates可知,Tink支持了以下mac算法

  • HMAC_SHA256_128BITTAG
  • HMAC_SHA256_256BITTAG

使用MacFactory获取Mac实例

signature

从SignatureKeyTemplates可知,支持以下签名算法

  • ECDSA_P256
  • ECDSA_P384
  • ECDSA_P521
  • ECDSA_P256_IEEE_P1363
  • ECDSA_P256_IEEE_P1363
  • ECDSA_P521_IEEE_P1363
  • ED25519

两个Factory,分别用于获取加签、验签的基元实例

  • PublicKeySignFactory
  • PublicKeyVerifyFactory

proto与subtle包

这两个包中包含了加密算法的一些实现细节,对密码学有兴趣的话可以看一下这些由Google安全专家编写的代码,其中也有一些工具类如Bytes、Hex、Base64

 类似资料: