Azure Key Vault是否支持ECC(椭圆曲线加密)?

时间:2017-10-12 02:31:19

标签: azure elliptic-curve azure-keyvault

Azure Key Vault是否支持ECC(椭圆曲线加密)?

3 个答案:

答案 0 :(得分:1)

现在支持Azure中的Elliptic Curve。

F#中有一个在线教程,有人使用它https://tomislav.tech/2018-01-31-ethereum-keyvault-generating-keys/

或者现在文档中也有一些信息。

此处https://feedback.azure.com/forums/216840-security-and-compliance/suggestions/10877748-ecc-support-for-azure-key-vault未标记为已完成,但最新评论显示现在已支持。

答案 1 :(得分:0)

好问题。我不相信EEC得到支持,2017年3月17日的Christos Matskas(MS Azure Dev)博客声明:

“该服务目前支持对称RSA密钥,但在将来的版本中已经有添加非对称和椭圆曲线密钥支持的范围。可以使用该服务生成密钥,也可以选择导入现有密钥。使用该服务,有两种类型的支持算法:

  • 简单RSA
  • RSA-HSM

此外,USER VOICE至少有两个用户请求要求实现此功能,您也可以在此处添加反馈请求。

参考:

https://blogs.technet.microsoft.com/uktechnet/2017/03/17/application-security-with-azure-key-vault/

https://feedback.azure.com/forums/216840-security-and-compliance/suggestions/10877748-ecc-support-for-azure-key-vault

https://feedback.azure.com/forums/586780-blockchain/suggestions/17940250-support-ecc-signing-within-key-vault

答案 2 :(得分:0)

是。以下是我在.NET中使用Microsoft.Azure.KeyVault.WebKey导入EC密钥的方法。

构建JSON Web密钥和azure KeyBundle:

JsonWebKey jwk = new JsonWebKey();
jwk.CurveName = JsonWebKeyCurveName.P256;
jwk.Kty = "EC";
jwk.D = ec_d; // ec_d is a 32-byte byte array representing the private key
jwk.X = ec_x; // ec_x is a 32-byte byte array representing the x coordinate
jwk.Y = ec_y; // ec_x is a 32-byte byte array representing the y coordinate

KeyBundle keyBundle = new KeyBundle
{
    Key = jwk
};

构造请求:

string keyName = "testECkey1";
await kvClient.ImportKeyAsync(vault.Properties.VaultUri, keyName, keyBundle);

您需要首先对Azure进行身份验证。我在这里使用了很多示例代码:https://github.com/Azure-Samples/key-vault-dotnet-authentication/blob/master/KeyVaultAuthSample.cs

一旦我找到了正确的jwk参数,我就得到了错误"EC key is not valid - bad crypto service output"。事实证明,当他们需要大端,我正在将我的字节推到小端,所以我只使用了Array.Reverse

另外,我必须手动从EC公钥中提取X和Y坐标。这很有用:https://davidederosa.com/basic-blockchain-programming/elliptic-curve-keys/