标签: ecdsa

ECDSA签名长度

ECDSA算法中256位EC密钥的签名长度是多少?我想验证相同的签名长度.如果某个机构可以帮助我使用一个EC键组合将会很棒.

elliptic-curve ecdsa

2
推荐指数
1
解决办法
9771
查看次数

OpenSSL ECDSA签名和验证文件

我想签名并验证带有椭圆曲线的pdf.我得到了一些代码,但它不起作用.

创建私钥:

openssl ecparam -genkey -name secp384r1 -noout -out private.pem
Run Code Online (Sandbox Code Playgroud)

创建公钥:

openssl ec -in private.pem -pubout -out public.pem
Run Code Online (Sandbox Code Playgroud)

签名文件:

openssl dgst -ecdsa-with-SHA1 test.pdf > hash openssl dgst
openssl dgst -ecdsa-with-SHA1 -inkey private.pem -keyform PEM -in hash > signature
Run Code Online (Sandbox Code Playgroud)

验证文件:

openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin data
Run Code Online (Sandbox Code Playgroud)

要签名和验证的部分不起作用.

openssl cryptography digital-signature ecdsa

2
推荐指数
1
解决办法
6609
查看次数

Mac OS X上的OpenSSL用于SHA-256签名算法

我想用OpenSSL创建一个自签名证书(root ca).签名算法需要是具有SHA-256哈希的ECDSA签名.在我的Mac OS X(优胜美地)上,我安装了OpenSSL版本0.9.8zc(从2014年10月15日起).当我openssl ciphers -v在命令行上调用时,似乎我当前的OpenSSL版本不支持SHA2(使用SHA-256等).

DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-DSS-AES256-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA1
AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA    SSLv3 Kx=DH       Au=DSS  Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1
DES-CBC3-MD5            SSLv2 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=MD5 
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-DSS-AES128-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA1
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-SEED-SHA        SSLv3 Kx=DH       Au=RSA  Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA        SSLv3 Kx=DH       Au=DSS  Enc=SEED(128) Mac=SHA1 …
Run Code Online (Sandbox Code Playgroud)

macos openssl sha256 ecdsa

2
推荐指数
1
解决办法
7618
查看次数

如何使用 ECDSA 以编程方式创建自签名数字证书

我正在尝试创建一个数字证书,该证书使用 EC 密钥而不是来自 RSA 的密钥进行自签名,并遵循这些 SO link1link2。我将link1中给出的RSA签名算法替换为EC

EC_KEY *ecc = NULL;
int eccgrp = OBJ_txt2nid("secp256k1");
ecc = EC_KEY_new_by_curve_name(eccgrp);
EC_KEY_set_asn1_flag(ecc, OPENSSL_EC_NAMED_CURVE);

if(!(EC_KEY_generate_key(ecc))) {
    BIO_printf(out, "Error in generating key");
    printf("Error 1\n");
}

if(!EVP_PKEY_assign_EC_KEY(pk, ecc)) {
    BIO_printf(out, "Error assigning EC_KEY to EVP_PKEY");
    printf("Error 2\n");
}
.
.
X509_set_pubkey(x,pk);
.
.
if (!X509_sign(x,pk,EVP_md5()))
    goto err;
.
.
Run Code Online (Sandbox Code Playgroud)

其余代码与链接 1 中给出的相同。没有打印错误,但是当我尝试打印 x509 证书时出现段错误X509_print_fp(stdout,x509);。这样做的正确方法是什么?

openssl pki digital-signature ecdsa

2
推荐指数
1
解决办法
1909
查看次数

如何生成有效的ECDSA EC密钥对?

我正在尝试使用Android中的SpongyCastle生成ECDSA密钥对。这是代码:

static {
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}

public static KeyPair generate() {
        ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime256v1");
        KeyPairGenerator generator = KeyPairGenerator.getInstance("ECDSA", "SC");
        generator.initialize(ecSpec, new SecureRandom());
        KeyPair keyPair = g.generateKeyPair();
        Log.i(TAG, "EC Pub Key generated: " + utils.bytesToHex(keyPair.getPublic().getEncoded()));
        Log.i(TAG, "EC Private Key generated: " + utils.bytesToHex(keyPair.getPrivate().getEncoded()));            
       return generator.generateKeyPair();
}
Run Code Online (Sandbox Code Playgroud)

出现错误是因为我总是得到类似公钥的示例:

3059301306072A8648CE3D020106082A8648CE3D03010703420004483ABA9F322240010ECF00E818C041A60FE71A2BD64C64CD5A60519985F110AEDE6308027D2730303F5E2478F083C7F5BB683DCAC22BFEB62F3A48BD01009F40

和私钥:

308193020100301306072A8648CE3D020106082A8648CE3D030107047930770201010420219AB4B3701630973A4B2917D53F69A4BE6DAD61F48016BFEF147B2999575CB2A00A06082A8648CE3D030107A14403420004483ABA9F322240010ECF00E818C041A60FE71A2BD64C64CD5A60519985F110AEDE6308027D2730303F5E2478F083C7F5BB683DCAC22BFEB62F3A48BD01009F40

站点ECDSA样本给了我“无效的ECDSA签名消息”,它们似乎与那个较小的私有密钥有很大不同,并且总是以在同一站点中生成的“ 04”公共密钥开头。

另外,我的后端验证给我错误“无效点编码0x30”

后端Java方法检查为:

public ECPublicKey getPublicKeyFromHex(String publicKeyHex)
        throws NoSuchAlgorithmException, DecoderException, ApplicationGenericException {
    byte[] rawPublicKey = Hex.decodeHex(publicKeyHex.toCharArray());
    ECPublicKey ecPublicKey = null;
    KeyFactory kf = null;

    ECNamedCurveParameterSpec ecNamedCurveParameterSpec …
Run Code Online (Sandbox Code Playgroud)

bouncycastle elliptic-curve dsa ecdsa spongycastle

2
推荐指数
1
解决办法
4362
查看次数

使用ECDSA和ED25519身份添加ssh-add错误

Linux环境:Debian 9.1,带有Gnome桌面

我同时拥有ECDSA和ED25519身份,但是从命令行,ssh-add命令会出错:

无法添加身份

怎么解决?

linux ssh ecdsa

2
推荐指数
1
解决办法
1132
查看次数

使用OpenSSL对类型'struct ec_key_st'的错误定义不完整

我正在尝试通过openssl从给定的秘密中计算公钥。我收到此错误:

main.c:27: error: incomplete definition of type 'struct ec_key_st'
  printf("d: %s\n", BN_bn2hex(eckey->priv_key));
                              ~~~~~^
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#include <stdio.h>

#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/bn.h>
#include <openssl/obj_mac.h>

int main()
{
  BN_CTX *ctx = BN_CTX_new();

  EC_KEY *eckey = EC_KEY_new();
  EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp256k1);
  EC_KEY_set_group(eckey, group);

  BIGNUM *prv = BN_new();
  BN_hex2bn(&prv, "b14fac12b3fa7dd6f2562a18d554fcd6818137ebb7e0d119ab0776d6407664f9");
  EC_KEY_set_private_key(eckey, prv);

  EC_POINT *Q = EC_POINT_new(group);
  EC_POINT_mul(group, Q, prv, NULL, NULL, ctx);
  EC_KEY_set_public_key(eckey, Q);

  if (EC_KEY_check_key(eckey))
    printf("Key succesfully checked.\n");

  printf("d: %s\n", BN_bn2hex(eckey->priv_key));
  printf("X: %s\n", BN_bn2hex(&eckey->pub_key->X));
  printf("Y: %s\n", BN_bn2hex(&eckey->pub_key->Y));

  EC_GROUP_free (group); group = NULL; …
Run Code Online (Sandbox Code Playgroud)

c openssl ecdsa

2
推荐指数
2
解决办法
789
查看次数

如何从私钥获取椭圆曲线公钥

因此,我需要使用 ECC spec256k1 从相应的 256 位数字中获取公钥。

因此,假设我从任何密码短语中使用 sha256 获取私钥,如下所示:

>>> import hashlib
>>> private_key = hashlib.sha3_256(b"Led Zeppelin - No Quarter").hexdigest()
>>> private_key
'c0b279f18074de51d075b152c8ce78b7bddb284e8cfde19896162abec0a0acce'
Run Code Online (Sandbox Code Playgroud)

如何从该私钥获取公钥?我需要将公钥打印为字符串。

python elliptic-curve public-key-encryption ecdsa

2
推荐指数
1
解决办法
2018
查看次数

ECDSA 使用来自 Java 的公钥和签名在 C# 中验证签名

我有一个用 Java 生成的公钥和签名,我想使用 ECDsaCng 在 C# 中进行验证。公钥是MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExeg15CVOUcspdO0Pm27hPVx50thn0CGk3/3NLl08qcK+0U7cesOUUwxQetMgtUHrh0lNao5XRAAurhcBtZpo6w==

我将最后 64 个字节转换为 C# ECDsaCng 可以使用的密钥,并将 0x45、0x43、0x53、0x31... 添加到它前面。

签名是使用 SHA256 在 Java 中生成的。有趣的是,如果我使用这里的工具测试签名https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html,它说这是一个有效的签名。

我一直在网上搜索,仍然没有快乐。

代码如下

static void VerifySignature()
{
  var publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExeg15CVOUcspdO0Pm27hPVx50thn0CGk3/3NLl08qcK+0U7cesOUUwxQetMgtUHrh0lNao5XRAAurhcBtZpo6w==";
  byte[] publicKeyBytes = Convert.FromBase64String(publicKey);

  var keyType = new byte[] { 0x45, 0x43, 0x53, 0x31 };
  var keyLength = new byte[] { 0x20, 0x00, 0x00, 0x00 };
  var key = keyType.Concat(keyLength).Concat(publicKeyBytes.TakeLast(64)).ToArray(); // 4543533120000000c5e835e4254e51cb2974ed0f9b6ee13d5c79d2d867d021a4dffdcd2e5d3ca9c2bed14edc7ac394530c507ad320b541eb87494d6a8e5744002eae1701b59a68eb

  // For testing in online tool
  Debug.WriteLine(ByteArrayToString(publicKeyBytes.TakeLast(65).ToArray())); //04c5e835e4254e51cb2974ed0f9b6ee13d5c79d2d867d021a4dffdcd2e5d3ca9c2bed14edc7ac394530c507ad320b541eb87494d6a8e5744002eae1701b59a68eb


  var signature = "MEQCIFNEZQRzIrvr6dtJ4j4HP8nXHSts3w3qsRt8cFXBaOGAAiAJO/EjzCZlNLQSvKBinVHfSvTEmor0dc3YX7FPMnnYCg==";
            var signatureBytes = …
Run Code Online (Sandbox Code Playgroud)

c# verify signature ecdsa

2
推荐指数
1
解决办法
1452
查看次数

Kotlin ECC 加密

Kotlin 中是否有关于椭圆曲线加密的任何信息?

用于生成密钥对和加密、解密消息。

关于这个主题的信息很少。

例如,我想实现 ECC P-521 椭圆曲线。

是否可以在 Kotlin 中使用 Java 版本?

我们如何实现这一点?

encryption kotlin ecdsa

2
推荐指数
1
解决办法
521
查看次数