- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试验证使用 Google 的云 KMS 生成的签名,但我不断收到无效响应。
这是我测试它的方式:
const versionName = client.cryptoKeyVersionPath(
projectId,
locationId,
keyRingId,
keyId,
versionId
)
const [publicKey] = await client.getPublicKey({
name: versionName,
})
const valueToSign = 'hola, que tal'
const digest = crypto.createHash('sha256').update(valueToSign).digest()
const [signResponse] = await client.asymmetricSign({
name: versionName,
digest: {
sha256: digest,
},
})
const valid = crypto.createVerify('sha256').update(digest).verify(publicKey.pem, signResponse.signature)
if (!valid) return console.log('INVALID SIGNATURE')
console.log('SIGNATURE IS VALID!')
// output: INVALID SIGNATURE
此代码将始终记录“无效签名”
除非我使用原始消息而不是其哈希:
const valid = crypto.createVerify('sha256').update(valueToSign).verify(publicKey.pem, signResponse.signature) // true
但是使用本地私钥,我可以对消息进行签名并使用它们的哈希验证它们:
const valueToSign = 'hola, the tal'
const msgHash = crypto.createHash("sha256").update(valueToSign).digest('base64');
const signer = crypto.createSign('sha256');
signer.update(msgHash);
const signature = signer.sign(pk, 'base64');
const verifier = crypto.createVerify('sha256');
verifier.update(msgHash);
const valid = verifier.verify(pubKey, signature, 'base64');
console.log(valid) // true
为什么? kms签名有什么不同吗?
最佳答案
基于 this example根据加密模块文档和您的观察,我想说您可能误解了 client.asymmetricSign
作品。让我们分析一下会发生什么:
您的本地私钥代码:
const valueToSign = 'hola, the tal'
// Create sha256 hash
const msgHash = crypto.createHash("sha256").update(valueToSign).digest('base64');
// Let signer sign sha256(hash)
const signer = crypto.createSign('sha256');
signer.update(msgHash);
const signature = signer.sign(pk, 'base64');
// We now got sign(sha256(hash))
// Let verifier verify sha256(hash)
const verifier = crypto.createVerify('sha256');
verifier.update(msgHash);
const valid = verifier.verify(pubKey, signature, 'base64');
console.log(valid) // true
我们正在验证
sign(sha256(hash))
使用
verify(sha256(hash))
.
const valueToSign = 'hola, que tal'
// Create sha256 hash
const digest = crypto.createHash('sha256').update(valueToSign).digest()
// Let KMS sign the hash
const [signResponse] = await client.asymmetricSign({
name: versionName,
digest: {
sha256: digest, // we already say "we hashed our data using sha256"
},
});
// We now got `sign(hash)`, NOT `sign(sha256(hash))` (where hash == digest)
// Let verifier verify sha256(hash)
const valid = crypto.createVerify('sha256').update(digest).verify(publicKey.pem, signResponse.signature)
我们正在验证
sign(hash)
使用
verify(sha256(hash))
.
.update(valueToSign)
作品。
crypto
期望要签名的数据(给定您传递给
createSign
的算法,它会自行散列)。
关于javascript - 关于使用 Cloud KMS 进行签名验证的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68241086/
我的 aws 帐户位于 us-west-2 区域。并且在该账户中创建的 KMS key 具有 ARN arn:aws:kms:us-east-1::key/。在我的节点模块中,我使用 Credstas
当encrypting symmetrically使用 Google Cloud 的 KMS,Google Cloud automatically选择主键版本: Each symmetric encr
我需要使用客户端 key 加密一些文本字符串,然后使用与客户端加密相同的 key 在服务器端解密此加密字符串。 据我了解,AWS KMS 是建立在 AES 之上的。 那么我可以使用 CryptoJS
我已经创建了一个谷歌云项目并启用了 谷歌云 key 管理服务 (KMS) API。我创建了两个 key 圈。 keyring1位于us-east1,keyring2位于global。我创建了以下 ja
使用 Cloudformation 创建新的 KMS key 时,我在“状态原因”列中看到此消息: Did not have IAM permissions to process tags on AW
在阅读Cloudera KMS Installation procedure时,我发现 Cloudera strongly recommends not using Java Keystore KMS
Amazon Key Management Services 背后使用哪些算法或加密方法? 我搜索了它,但只找到了与配置相关的信息,而不是集成信息。 最佳答案 我会在这个答案的开头说,如果你真的感兴趣
我必须将.Net Core应用程序从Google App Engine移至Google Kubernetes Engine,因为我需要静态IP,可惜Google App Engine没有该选项。 我设
我使用 AWS SDK iOS v2.6.21 以编程方式将 KMS (SSE-KMS) 加密添加到 AWS S3 存储桶。我使用以下 Objective-C 代码执行此操作: AWSS3 *awsC
我正在寻求帮助,使用 KMS 在 Hive 中实现列级加密(与 https://issues.apache.org/jira/browse/HIVE-7934 完全相似)。虽然我清楚所引用 URL 中
我是 hadoop KMS 的新手,我已经使用 hadoop 启动了 KMS。现在我尝试运行这个 curl 命令 curl -i --header "Accept:application/json"
我不确定为什么我们需要这个 Hadoop KMS 正是为了?我浏览了 Apache Hadoop 的官方文档,并没有确切提到为什么我们需要这个概念。我唯一清楚的是,使用此 client 和 serve
我搜索了 Google 结果,这似乎是不可能的,所以:有人知道如何使用 KMS 在控制台中更改或设置特定的视频分辨率吗? 我没有使用任何图形服务器或图形子系统,所以这个问题只与控制台有关。 我使用的是
我正在尝试验证使用 Google 的云 KMS 生成的签名,但我不断收到无效响应。 这是我测试它的方式: const versionName = client.cryptoKeyVersionPath
我的问题可能听起来太明显了,但我是 Amazon KMS 的新手。在阅读了 AWS 上的大量文档后,我了解到,如果我直接使用 CMK 进行加密和解密,我可以直接通过创建加密和解密请求来完成。但我不清楚
我已经能够使用私钥签署云端 URL,但很难保证私钥的安全。我正在考虑使用 KMS 来保证私钥的安全,有没有办法使用存储在亚马逊 KMS 中的 key 对 URL 进行签名? 最佳答案 答案是否定的,C
给定一个定义了以下内容的 CloudFormation 模板: KMS key KMS key 别名 一个 S3 存储桶 如果由于某种原因我需要删除 CloudFormation 堆栈并重新部署,删除
这是一个新手安全/控制台问题......我在我的项目中在欧洲的一个特定(错误)位置创建了一个 key 环。 我在控制台中看不到任何编辑甚至删除 key 环的方法。 key 圈完全是空的……里面没有 k
如何使用 boto3 资源从 S3 存储桶读取 KMS 加密文件? 下面是我用来读取非加密文件的片段 - s3 = boto3.resource('s3') obj = s3.Object(bucke
我正在 AWS Lambda 上编写无服务器函数。 在某些情况下,我需要使用 kms:GenerateDataKey*权限。 这样做的目的究竟是什么。我检查了 AWS 文档,但它太神秘了。有人可以举一
我是一名优秀的程序员,十分优秀!