首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeysetHandle中Tink的关键构造

KeysetHandle中Tink的关键构造
EN

Stack Overflow用户
提问于 2019-05-17 18:57:58
回答 2查看 1.3K关注 0票数 11

下面的行演示如何在Tink中生成密钥:

  • keysetHandle=KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM)
  • privateKeysetHandle = KeysetHandle.generateNew(SignatureKeyTemplates.ECDSA_P256)

您能告诉我如何构造给定的参数,例如键字节和相关参数吗?

还可以通过从JSON加载参数来创建密钥:

代码语言:javascript
复制
  String keysetFilename = "my_keyset.json";
  KeysetHandle keysetHandle = CleartextKeysetHandle.read(
          JsonKeysetReader.withFile(new File(keysetFilename)));

JSON中的键格式是如何定义的?

EN

回答 2

Stack Overflow用户

发布于 2019-06-13 19:01:39

Maarten Bodewes:您介意告诉我们API有什么问题吗,以及您认为应该如何修改它?我们都在倾听反馈。

我们不想让用户直接处理密钥,因为这很容易搞砸。这就是为什么我们提供生成、持久化和加载密钥的API。1展示了如何做到这一点。

看起来,您有一个现有的密钥,以某种其他格式,您想要使用它与丁克。丁克的钥匙储存在原型机里。每个键类型都在自己的protobuf中定义。您可以在https://github.com/google/tink/tree/master/proto找到所有定义。Tink不使用单独的键,而是使用同样是protobuf的键集。通过提供KeysetReader的实现,您可以将现有的键转换为Tink的密钥集。SignaturePemKeysetReader 2是一个将某些PEM键转换为Tink的示例。

如果你遇到更多的问题,可以通过tink-user@googlegroups.com对邮件列表进行评论或发电子邮件。

希望这能帮上忙泰国人。

1 2

编辑:更新第二个链接。

票数 0
EN

Stack Overflow用户

发布于 2020-11-17 20:20:24

我也遇到过类似的问题,但是HMAC在单元测试中。希望能帮上忙。

示例JSON:

代码语言:javascript
复制
{
    "primaryKeyId": 2061245617,
    "key": [{
        "keyData": {
            "typeUrl": "type.googleapis.com/google.crypto.tink.HmacKey",
            "keyMaterialType": "SYMMETRIC",
            "value": "EgQIAxAgGiB9qbGjo1sA41kHHKbELAKmFzj3cNev0GJ3PpvhR00vuw=="
        },
        "outputPrefixType": "TINK",
        "keyId": 2061245617,
        "status": "ENABLED"
    }]
}

用于生成它的代码(Scala):

代码语言:javascript
复制
  import com.google.crypto.tink.mac.MacConfig
  MacConfig.register()

  def generate(): Unit = {
    import java.io.ByteArrayOutputStream
    import java.nio.charset.StandardCharsets
    import com.google.crypto.tink.mac.HmacKeyManager
    import com.google.crypto.tink.{CleartextKeysetHandle, JsonKeysetWriter, KeysetHandle}
    
    val generatedKeyset = KeysetHandle.generateNew(HmacKeyManager.hmacSha256Template())
    val output = new ByteArrayOutputStream
    CleartextKeysetHandle.write(generatedKeyset, JsonKeysetWriter.withOutputStream(output))
    println(output.toString(StandardCharsets.UTF_8))
  }
  generate()

加载JSON和用法:

代码语言:javascript
复制
import com.google.crypto.tink.{CleartextKeysetHandle, JsonKeysetReader}
val hmacKeyset = CleartextKeysetHandle.read(
    JsonKeysetReader.withString(...)
)
val mac = hmacKeyset.getPrimitive(classOf[Mac])
mac.computeMac(...)

要记住,这是完全不安全的,不应该在外部测试中使用。

执行工作的相关部分:

编辑:生成密钥集JSON的更简单的方法:

代码语言:javascript
复制
$ tinkey create-keyset --key-template HMAC_SHA256_256BITTAG
{
    "primaryKeyId": 1132518908,
    "key": [{
        "keyData": {
            "typeUrl": "type.googleapis.com/google.crypto.tink.HmacKey",
            "keyMaterialType": "SYMMETRIC",
            "value": "EgQIAxAgGiDwIucBpWJ8WHVIEKIdEVQlfynm+4QS8sKUVUga2JzRlw=="
        },
        "outputPrefixType": "TINK",
        "keyId": 1132518908,
        "status": "ENABLED"
    }]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56192126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档