Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理Azure密钥库中的椭圆曲线SECP256K1密钥,当该密钥也被块链使用时

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

Stack Overflow用户
提问于 2018-11-29 00:12:49
回答 1查看 1K关注 0票数 2

我想知道如何在Azure中使用SECP256K1密钥,同时也需要在块链上创建帐户。

必须实现什么

  1. 生成SECP256K1密钥对
  2. 使用公钥在块链上创建帐户
  3. 将私钥存储到密钥库,并用于签名目的

尝试#1 -生成外部密钥库并导入

我已经在密钥库外生成了SECP256K1密钥对。因此,我将私钥和公钥作为字符串使用。我的想法是在Azure的帮助下,将私钥导入到密钥库( for.NET wia ),下面的代码(ECParameters来自Microsoft.Azure.KeyVault.WebKey.ECParameters命名空间):

代码语言:javascript
运行
AI代码解释
复制
  //this part of code is taken from https://www.scottbrady91.com/C-Sharp/JWT-Signing-using-ECDSA-in-dotnet-Core
  var privateKeyBytes = Encoding.UTF8.GetBytes(privateKey);
  var privateKeyInt =
    new Org.BouncyCastle.Math.BigInteger(+1, privateKeyBytes);
  var parameters = SecNamedCurves.GetByName("secp256k1");
  var ecPoint = parameters.G.Multiply(privateKeyInt);
  var privateKeyX = ecPoint.Normalize().XCoord.ToBigInteger()
    .ToByteArrayUnsigned();
  var privateKeyY = ecPoint.Normalize().YCoord.ToBigInteger()
    .ToByteArrayUnsigned();

  //the following part is my code
  var ecParameters = new ECParameters();
  ecParameters.Curve = "P-256K";
  ecParameters.X = privateKeyX;
  ecParameters.Y = privateKeyY;
  ecParameters.D = privateKeyBytes;

  var key = new JsonWebKey(ecParameters);
  JsonWebKeyVerifier.Options options =
    JsonWebKeyVerifier.Options.DenyIncompatibleOperations
    | JsonWebKeyVerifier.Options.DenyExtraneousFields;
  string error = (string) null;

  JsonWebKeyVerifier.VerifyByKeyType(key, options, ref error);

  await client.ImportKeyWithHttpMessagesAsync(vaultBaseUri, name, key);

导入的结果键如下(从Visual变量视图复制,可能是缩短了):

代码语言:javascript
运行
AI代码解释
复制
  {
    "kty": "EC",
    "crv": "P-256K",
    "x": "vSUHj6deEhPI6QeILgfgf2I7VTgmiDon_5nsss560OA",
    "y": "DK8DnzEOv57arN6f4Wou-vXkty7uje0n2xTHgGAehp8",
    "d": "NUpoaEEzWTFVYXBKNWZuRWZNUkVxZkpKY29LWGdMcHpFUnVNQ2E2Wjd0YkNhY2NpQ3N5"
  }

虽然JsonWebKeyVerifier不返回错误,对key.IsValid()的调用返回为true,但对Key的调用在HTTP400BAD请求中失败。我打开了Key Vault实例的日志记录,下面的日志(id、用户名、IP地址和GUID被有意更改,我不确定什么是机密;我可以根据需要提供它们):

代码语言:javascript
运行
AI代码解释
复制
{
  "time": "2018-11-28T16:28:05.2034585Z",
  "category": "AuditEvent",
  "operationName": "KeyImport",
  "resultType": "Success",
  "resultDescription": "EC key is not valid - cannot instantiate crypto service.",
  "correlationId": "5682a894-0150-484f-a398-6922efed4458",
  "callerIpAddress": "XX.XX.XXX.XXX",
  "identity": {
    "claim": {
      "http://schemas.microsoft.com/identity/claims/objectidentifier": "00000000-0000-0000-0000-000000000000",
      "appid": "00000000-0000-0000-0000-000000000000",
      "http://schemas.microsoft.com/identity/claims/scope": "user_impersonation",
      "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "xxx.xxxxxx@xxxxxxxx.com",
      "ipaddr": "XX.XX.XXX.XXX",
      "http://schemas.microsoft.com/claims/authnmethodsreferences": "pwd"
    }
  },
  "properties": {
    "id": "https://xxxxxxx.vault.azure.net/keys/testJK1",
    "clientInfo": "FxVersion/4.6.27019.06 OSName/Windows OSVersion/Microsoft.Windows.10.0.17134. Microsoft.Azure.KeyVault.KeyVaultClient/3.0.2.0",
    "httpStatusCode": 400,
    "requestUri": "https://xxxxxxxx.vault.azure.net/keys/testJK1?api-version=7.0",
    "isAccessPolicyMatch": true,
    "keyProperties": {
      "type": "EC"
    }
  },
  "resourceId": "/SUBSCRIPTIONS/00000000-0000-0000-0000-000000000000/RESOURCEGROUPS/XXXXXX-RG/PROVIDERS/MICROSOFT.KEYVAULT/VAULTS/XXXXXXX",
  "operationVersion": "7.0",
  "resultSignature": "Bad Request",
  "durationMs": "259"
}

尝试#2 -在密钥库中生成和导出

即使我能够在key Vault中生成SECP256K1 EC密钥,我也没有找到如何导出它的公钥部分。

编辑11/23/2018

Azure上的GetKey方法返回包含X和Y坐标的JsonWebKey。

问题

  1. 是否可以通过Azure为SECP256K1导入.NET密钥?如果是,你能给我一个链接到工作的例子吗?
  2. 在试图导入密钥库的过程中,我在代码中做了什么错误/不足的事情吗?
  3. 是否可以从密钥库导出SECP256K1公钥?
  4. 你还有什么其他的想法来完成之前描述的成就吗?

编辑11/29/2018

  1. 有没有办法从X和Y坐标构造公钥(最好是在.NET世界中)?

提前谢谢。

你好,简

PS:我最初在Azure Key Vault博客上发布了这个问题,但是这里可能有更多的观众。我会把这两个来源联系起来,

EN

回答 1

Stack Overflow用户

发布于 2021-04-17 11:47:02

为了解决类似的情况,我有一个使用生成的openssh格式密钥对,我可以使用下面的代码将其导入KeyVault。

代码语言:javascript
运行
AI代码解释
复制
 var client = new KeyClient(new Uri("https://myKeyVault.vault.azure.net"), new ClientSecretCredential("tenantid", "clientid", "clientSecret"));

 var key = ECDsa.Create();
 key.ImportFromPem(@"-----BEGIN EC PARAMETERS-----
     ....
     -----END EC PARAMETERS-----
     -----BEGIN EC PRIVATE KEY-----
     ...
     -----END EC PRIVATE KEY-----
     ");

 JsonWebKey jwk = new JsonWebKey(key, true);
 await client.ImportKeyAsync("MyKey", jwk);

您需要在密钥库中设置应用程序注册和创建访问策略,以便能够进行如下所述的导入工作:https://www.c-sharpcorner.com/blogs/fetching-secrets-from-key-vault-in-net-console-app

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53534454

复制
相关文章
Kotlin(Java)与Golang的椭圆曲线密钥交换算法
go写的服务端后台,android是客户端之一,需要用到密钥交换(ecdh)算法生成aes密钥加密数据。公私钥生成算法,ECC-P256,也即secp256r1.
天地一小儒
2022/12/28
1.8K0
Kotlin(Java)与Golang的椭圆曲线密钥交换算法
区块链节点的密钥管理
        本文主要讨论一种区块链节点的密钥管理方案。区块链节点都会有各自的私钥,将一段随机数分成两段,一段存在配置文件,一段写在节点的运行代码里,通过某种算法结合这两段随机数,生成一个对称密钥,用这个对称秘钥对私钥加密,将加密后的私钥存储在配置文件中。节点需要对交易签名时,再次通过这两段随机数生成对称秘钥,获取配置文件中已加密的私钥,通过生成的对称秘钥解密后,用解密获得的私钥对交易进行签名。
tylerwen
2020/03/19
5K0
.NET中的密钥加密
本教程将演示如何通过System.Security.Cryptography在.NET Framework 1.1中实现对称加密/密钥加密。
MelodyS
2018/03/12
3.2K0
.NET中的密钥加密
密钥用法 增强密钥用法 证书类型
增强密钥用法: OpenSSL 增强密钥用法:
BUG弄潮儿
2022/06/30
2.3K0
密钥详解
在之前的文章中,我们讲到了对称密码,公钥密码,消息认证码和数字签名等密码学的技术,这些技术中都使用到了一个叫做密钥的东西。
程序那些事
2020/07/08
2.3K0
windows10产品密钥永久(windows激活密钥)
这就是Windows Key Viewer变得有用的时候,因为可以轻松显示产品密钥。
全栈程序员站长
2022/07/28
6.8K0
windows10产品密钥永久(windows激活密钥)
非对称密钥沉思系列(4):密钥交换
密钥交换,也有称作密钥协商,这套机制,最主要的作用是用来得到通信双方的临时会话密钥。
bowenerchen
2023/01/04
7.3K13
非对称密钥沉思系列(4):密钥交换
共享密钥加密与公开密钥加密
加密数据的方法可以分为两种:加密和解密都使用相同密钥的“共享密钥加密”和分别使用不同密钥的“公开密钥加密”。
神奇的程序员
2022/04/10
2.9K0
共享密钥加密与公开密钥加密
git如何使用ssh密钥
首先先来了解一下git的四种传输协议:本地、ssh、git和http,http协议应该说是最常见的一种,因为简单,以下是各个协议的优点与缺点:
benny
2018/12/29
2.7K0
ECDH椭圆双曲线(比DH快10倍的密钥交换)算法简介和封装
前面有几篇blog就提到我有计划支持使用ECDH密钥交换。近期也是抽空把以前的DH密钥交换跨平台适配从atgateway抽离出来,而后接入了ECDH流程。
owent
2018/08/01
5.5K0
【计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )
③ 密钥分配 : 是管理中的最重要的问题 , 密钥需要通过 安全通道 进行分配操作 ;
韩曙亮
2023/03/28
7K0
【计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )
如何获取云API密钥?
云 API 是腾讯云开放生态的基石。通过云 API,只需少量的代码即可快速操作云产品;在熟练的情况下,使用云 API 完成一些频繁调用的功能可以极大提高效率;除此之外,通过 API 可以组合功能,实现更高级的功能,易于自动化, 易于远程调用, 兼容性强,对系统要求低。以下是具体操作步骤:
腾讯云@移动安全
2019/01/18
83K42
如何获取云API密钥?
vs2012密钥_ultimate2012产品密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC;KCW6-BPFPF-BT8C9-7DCTH-QXGWC
全栈程序员站长
2022/11/04
3.3K0
【Rust日报】2021-12-28 在Rust中模拟HTTP服务
本文展示了如何使用mock库来模拟HTTP服务。如何使我们在自动化测试期间验证应用程序发送的HTTP请求是否符合我们的期望,并且还可以模拟来自依赖服务的HTTP响应,以确保我们的应用程序能够相应地处理它们。此外,作者还展示了模拟工具如何在开发过程中替换不可用的HTTP服务,并使它们能够同时被许多应用程序访问。
MikeLoveRust
2021/12/31
9970
Polkadot中的密码学
Polkadot的帐户主要使用带有Schnorr签名的公钥,Polkadot认为它满足:
MikeLoveRust
2019/10/09
1.3K0
linux 密钥登录
使用命令: ssh-keygen -t rsa -b 4096 -C “youremail@qq.com”
CRMEB商城源码
2022/06/21
5.4K0
SSH 密钥类型
GitHub 改变了他们的安全协议,不再允许使用使用 SHA-1 加密算法的 RSA 密钥进行访问,而我目前使用 ssh 默认策略生成的就是这种类型的密钥,结果就是无法提交代码。
宋天伦
2023/10/21
7670
区块链数据结构
区块链是近年来备受关注的技术,它的出现为数字货币、智能合约等领域带来了革命性的变革,然而区块链的实现并不简单,其中的数据结构是至关重要的一部分。本文将介绍区块链的数据结构,帮助读者更好地理解区块链的运作原理,通过本文的学习,读者将能够更好地理解区块链的本质并为后续的区块链开发及应用打下坚实的基础
Al1ex
2023/08/10
7190
区块链数据结构
vs2012ultimate密钥_visual studio 2012产品密钥
Visual Studio Express 2012 for Windows Desktop
全栈程序员站长
2022/11/04
1.8K0
点击加载更多

相似问题

Azure密钥库支持ECC(椭圆曲线密码)吗?

35

当密钥链被锁定时,哪些密钥链属性不可访问?

11

从iOS导出椭圆曲线密钥以处理OpenSSL

11

Terraform azure -密钥库密钥生成-访问被拒绝

21

如何旋转Azure密钥库密钥

119
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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