Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在GCP中使用secp256k1算法建立密钥库?

如何在GCP中使用secp256k1算法建立密钥库?
EN

Stack Overflow用户
提问于 2019-09-22 22:00:48
回答 1查看 467关注 0票数 0

我必须使用secp256k1算法设置一个密钥库作为Google Cloud平台服务,不知道从哪里开始。

我检查了可用的选项,发现只有Elliptic Curve P-256 - SHA256摘要支持。这和secp256k1是一样的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-25 16:02:09

如果你第一句话的意思是在谷歌云平台上拥有类似的(至少是部分的) Key Vault服务(这就是Cloud Key Management Service,又名KMS),那么答案是否定的。

而对于Azure的密钥库,椭圆曲线SECP256K1 is available,目前对于云KMS,只有椭圆曲线available are P-256和P-384。

P-256SECP256K1曲线并不相同,到目前为止,P-256是在FIPS-186-4中定义的,SECP256K1是在Standards for Efficient Cryptography Version 2中定义的。

无论如何,为了支持这一切,您可以运行以下实验。

使用云开发工具包(see how-to)创建ASYMMETRIC_SIGN目的密钥:

代码语言:javascript
运行
AI代码解释
复制
keyring=keyring0
key=key0
location=US
gcloud kms keyrings create $keyring --location=$location
gcloud kms keys create $key --location $location --keyring $keyring --purpose asymmetric-signing --default-algorithm ec-sign-p256-sha256 --protection-level software

签署一条消息并导入先前生成的(即KMS生成的)密钥对的公钥。

代码语言:javascript
运行
AI代码解释
复制
message=message
signature=message.sig
echo $(date):$(uname -a) > $message
gcloud kms asymmetric-sign --keyring=$keyring --key=$key --location=$location --input-file=$message --signature-file=$signature --digest-algorithm=sha256 --version=1
gcloud kms keys versions get-public-key 1 --location=$location --keyring=$keyring --key=$key --output-file=./$keyring-$key.pub

现在,您可以使用openssl dgst -verify $keyring-$key.pub -signature $signature $message验证签名,但是您将无法获得有关用于生成密钥对的椭圆曲线的信息,密钥对用于执行签名。

为了获取这些信息,我们可以安装一个Python第三方库:

代码语言:javascript
运行
AI代码解释
复制
virtualenv --python=/usr/bin/python3 ecdsa
cd ecdsa
source bin/activate
pip install ecdsa

执行以下命令验证签名,并查看选择签名算法ec-sign-p256-sha256时KMS使用的曲线:

代码语言:javascript
运行
AI代码解释
复制
python3 -c """
from pathlib import Path
import hashlib
from ecdsa import VerifyingKey, BadSignatureError

publickey = Path('$keyring-$key.pub')
signature = Path('$signature')
message = Path('$message')

def read_signature(signature):
    '''
    workaround for https://github.com/warner/python-ecdsa/issues/67
    more background on why's that in https://tools.ietf.org/html/rfc5652
    '''
    LEN = 64
    LENHALF = LEN//2
    with signature.open('rb') as fp:
        sig = fp.read()

    offset = 4 if sig[4] else 5
    slice_s, slice_r =  slice(offset, offset + LENHALF), slice(-LENHALF, len(sig))   
    s,r = sig[slice_s], sig[slice_r]
    return s + r

def verify(publickey, signature, message):

    with publickey.open() as pkfp, message.open('br') as messagefp:
        vk = VerifyingKey.from_pem(pkfp.read())
        try:
            print('Verifying with public key associated with curve', repr(vk.curve.name))
            vk.verify(read_signature(signature), messagefp.read(), hashfunc=hashlib.sha256)
            print('Verify Success')
        except BadSignatureError:
            print('Verify Failure')

verify(publickey, signature, message)
"""

要将本例中KMS中使用的椭圆曲线的点指向NIST的P-256及其与SECP256K1的参数差异,请查看以下代码片段:

代码语言:javascript
运行
AI代码解释
复制
python3 -c """
from collections import namedtuple 
from operator import attrgetter
from ecdsa import NIST256p, SECP256k1

sextuple = namedtuple('T', 'p, a, b, G, n, h')

ag_curve = attrgetter(*('curve._CurveFp__'+c for c in 'abp'))
ag_generator = attrgetter(*('generator._Point__'+c for c in 'x y order'.split()))

def make_sextuple(curve, h=1):
    n, G_x, G_y = ag_generator(curve)
    return sextuple(*ag_curve(curve), n=n, G=(G_x, G_y), h=h)

T_NIST256p = make_sextuple(NIST256p)
T_SECP256k1 = make_sextuple(SECP256k1)

if T_NIST256p != T_SECP256k1:
    for k in sextuple._fields:
        ag_k = attrgetter(k)
        v0, v1 = ag_k(T_NIST256p), ag_k(T_SECP256k1)
        if v0 != v1:
            print('Different values for parameter ', k,)
            print(v0)
            print(v1)
"""
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58053715

复制
相关文章
如何在 Linux、macOS 和 Windows 中查看 SSH 密钥?
SSH(Secure Shell)密钥是用于身份验证和安全通信的重要组成部分。在Linux、macOS和Windows操作系统中,你可以通过一些简单的步骤来查看已安装的SSH密钥。本文将详细介绍在这些操作系统中查看SSH密钥的方法。
网络技术联盟站
2023/09/05
7.5K0
如何在 Linux、macOS 和 Windows 中查看 SSH 密钥?
如何在 Linux 中配置基于密钥认证的 SSH
为方便演示,我将使用 Arch Linux 为本地系统,Ubuntu 18.04 LTS 为远程系统。
用户8989785
2021/09/09
1.7K0
使用 kubeadm 在 GCP 部署 Kubernetes
最近在准备 CKA 考试,所以需要搭建一个 Kubernetes 集群来方便练习.GCP 平台新用户注册送 300 刀体验金,所以就想到用 kubeadm 在 GCP 弄个练练手,既方便又省钱.
用户2443625
2019/01/02
2.3K0
如何在 Linux、macOS 和 Windows 中查看 SSH 密钥?
SSH(Secure Shell)密钥是用于身份验证和安全通信的重要组成部分。在Linux、macOS和Windows操作系统中,你可以通过一些简单的步骤来查看已安装的SSH密钥。本文将详细介绍在这些操作系统中查看SSH密钥的方法。
网络技术联盟站
2023/07/14
4.9K0
如何在 Linux、macOS 和 Windows 中查看 SSH 密钥?
【Rust日报】2021-12-28 在Rust中模拟HTTP服务
本文展示了如何使用mock库来模拟HTTP服务。如何使我们在自动化测试期间验证应用程序发送的HTTP请求是否符合我们的期望,并且还可以模拟来自依赖服务的HTTP响应,以确保我们的应用程序能够相应地处理它们。此外,作者还展示了模拟工具如何在开发过程中替换不可用的HTTP服务,并使它们能够同时被许多应用程序访问。
MikeLoveRust
2021/12/31
9850
Nodejs进阶:使用DiffieHellman密钥交换算法
Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥。目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端、服务端利用DH算法交换对称密钥。
IMWeb前端团队
2019/12/03
8430
Nodejs进阶:使用DiffieHellman密钥交换算法
IMWeb前端团队
2018/01/08
1.1K0
浅谈:如何在零信任中建立用户信任
但在数字世界,一旦与外界发生联系,你所绝对拥有的东西便具有了一定的社会属性。任何与网络发生了关系的事物,都脱离了纯粹的“专属”。原本完完全全属于个人的,发生了彻底的改变。准确的说,原本完完全全属于那时那地的那个你,至于未来某时、某地,现在时候的你并不一定拥有原来的权限。以个人照片为例,个人照片通常存储于个人手机中,当手机与云空间同步后,照片的增删改就不再那么的绝对。
SDNLAB
2021/10/11
1.3K0
密钥交换算法(DH算法)
对称加密算法通过密钥解决了数据加密问题,但是如何安全的传输密钥成为了下一个问题。如果密钥被窃取了,那对称加密数据就没有什么意义了。密钥交换算法(Diffie-Hellman算法 or DH算法)就是为了解决这个问题而出现的算法,DH算法也奠定了非对称加密算法的基础。
iiopsd
2022/12/23
1K0
Evernote云端迁移 – 基于Google 云平台用户数据保护
编辑手记:安全永远是第一重要的问题,无论是在本地还是在云端。 我们的安全团队的宗旨在于保护用户的数据。当我们开始实施将数据迁移到云Google的云服务的基础设施上时,我们一直在思考,如何在迁移的整个过程中保障数据的安全。考虑的方面主要包含以下几点: 当我们向Google表示了信任,选择他们作为我们数据保管人,他们是否有足够的成熟的安全控制措施,不会对我们的服务增加风险? GCP是否给予我们跟现有环境相当或更好的安全控制,以便我们用来保护客户数据? 与供应商建立信任 我们有一个内部供应商审核流程,包括我们的
数据和云
2018/03/07
2.4K0
如何在GitLab中的个人资料里增加SSH密钥
2、提示‘输入保存密钥的文件(//.ssh/id_rsa):’,按回车 3、提示输入密码显示“输入密码(空密码)”。 输入密码后按回车 4、提示再次输入密码,输入密码后按回车。 5、SSH密钥已生成
超级小可爱
2023/02/23
1.5K0
使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
初学数据库,记录一下所学的知识。我用的MySQL数据库,使用MySQL Workbench管理。下面简单介绍一下如何使用MySQL Workbench建立数据库,建立新的表,为表添加数据。
全栈程序员站长
2022/11/08
11.1K0
使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
如何在远程 SSH 服务器中创建和添加 SSH 密钥?
SSH 密钥是一种安全的身份验证方法,用于在远程服务器和客户端之间建立安全连接。使用 SSH 密钥可以替代传统的密码身份验证,提供更高的安全性和便利性。本文将详细介绍如何在远程 SSH 服务器中创建和添加 SSH 密钥。
网络技术联盟站
2023/06/09
7K0
如何在远程 SSH 服务器中创建和添加 SSH 密钥?
如何在CDH中使用Solr对HDFS中的JSON数据建立全文索引
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。SolrCloud是Sol
Fayson
2018/07/12
6.1K0
如何在Ubuntu 16.04使用Buildbot建立持续集成系统
Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布过程。
angel_郁
2018/08/06
1.8K0
如何在Ubuntu 16.04使用Buildbot建立持续集成系统
Polkadot中的密码学
Polkadot的帐户主要使用带有Schnorr签名的公钥,Polkadot认为它满足:
MikeLoveRust
2019/10/09
1.3K0
如何在Debian 9上设置SSH密钥
SSH或安全shell是用于管理服务器和与服务器通信的加密协议。使用Debian服务器时,您可能会将大部分时间花在通过SSH连接到服务器的终端会话中。
小铁匠米兰的v
2018/10/29
4.4K0
如何在 CentOS 8 上设置 SSH 密钥
安全 Shell (SSH) 是一个被设计用来在客户端和服务器之间进行安全连接的加密网络协议。
雪梦科技
2020/05/11
3K0
如何在 CentOS 8 上设置 SSH 密钥
DES算法中子密钥的产生
DES (数据加密标准 Data Encryption Standard),因密钥长度过短及可能含有的后门引起争议,现也已经不在作为标准,由AES取代。在学了《网络安全技术》关于加密算法中的DES后,写了这一篇笔记,主要写的是DES算法中子密钥的生成算法。
许杨淼淼
2019/12/29
2.7K0
点击加载更多

相似问题

如何使用secp256k1 C库生成各种密钥对?

17

secp256k1的密钥派生

112

在gcp云上使用kubernetes管理密钥库和信任库

13

在所有基于素数的算法(如RSA )中如何使用非数字密钥

23

如何处理Azure密钥库中的椭圆曲线SECP256K1密钥,当该密钥也被块链使用时

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档