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

Does Azure Key Vault support ECC(Elliptic Curve Cryptography)?

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

好问题。我不相信 EEC 还受支持,Christos Matskas(MS Azure Dev)2017 年 3 月 17 日的博客指出:

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

  • 简单 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

看来 Azure 现在支持椭圆曲线了。

有人在使用 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但最新评论说现在已支持。

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

构造JSON web key和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 public 键中提取 X 和 Y 坐标。这很有帮助:https://davidederosa.com/basic-blockchain-programming/elliptic-curve-keys/