标签: ecdsa

在Windows 2012中使用ECDHE-ECDSA-AES256-GCM-SHA384进行https

我一直是很长时间的读者,但这是我第一篇关于我无法找到解决方案的真实帖子.

我目前正在Windows 2012上托管一个网站,我希望运行最新的TLS 1.2密码套件.

我知道如何在Windows中启用TLS 1.1和TLS 1.2并已完成(通过注册表编辑).我也将密码顺序更改为我希望的顺序.

我的问题是:在这一步之后,我如何实际通过并设置密码套件的ECDHE/ECDSA部分?

当我在最新的chrome beta(在TLS 1.2中支持ECDHE和ECDSA,只要你使用支持的曲线)查看网站时,它似乎跳过了所有的ECHDE密码套件.

为了让ECDHE/ECDSA正常启用,我还需要做些什么吗?

我已经在网上阅读试图自己解决这个问题,他们提到制作根证书的副本,然后修改它们以某种方式支持ECDHE.我在吠叫错了树吗?

提前感谢您对此问题的任何和所有支持.

编辑:添加澄清/进度

经过更多的研究,我发现为了让ECDSA工作,你需要一份ECDSA证书.此时获得一个的唯一方法是自签,因为证书卡尚未提出适当的交叉许可协议和Ellipic Curve证书的费用结构.

由于自签名不是此站点的选项,因此我已从密码订单中删除了所有ECDSA套件.

不幸的是,因为所有的AES Galois Counter Mode套件都是ECDSA,所以暂时将其排除在外.

这让我有一个最强的密码套件ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521,我相信最新版本的Chrome beta是否支持?我似乎无法让Chrome获得超越SHA-1的任何东西.没有SHA-2支持吗?即使在最新的测试版中?

windows security ssl ssl-certificate ecdsa

6
推荐指数
1
解决办法
1万
查看次数

根据RFC测试向量计算Java中的ECDSA签名

我正在java中编写一个测试工具,用于与ikev2协议相关的程序.作为其中的一部分,我需要能够计算ECDSA签名(特别是使用NIST P-256曲线).

RFC 4754描述了在IKEv2中使用ECDSA并有助于提供一组测试向量(包括我需要的p256曲线).

我正在尝试使用以下代码通过java的ECDSA签名实现运行ECDSA-256测试向量值(RFC中的第8.1节):

//"abc" for the input
byte[] input = { 0x61, 0x62, 0x63 };

//Ugly way of getting the ECParameterSpec for the P-256 curve by name as opposed to specifying all the parameters manually.
KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec kpgparams = new ECGenParameterSpec("secp256r1");
kpg.initialize(kpgparams);
ECParameterSpec params = ((ECPublicKey) kpg.generateKeyPair().getPublic()).getParams();

//Create the static private key W from the Test Vector
ECPrivateKeySpec static_privates = new ECPrivateKeySpec(new BigInteger("DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F", 16), params);
KeyFactory kf = KeyFactory.getInstance("EC");
ECPrivateKey spriv = …
Run Code Online (Sandbox Code Playgroud)

java cryptography elliptic-curve ecdsa

6
推荐指数
1
解决办法
7770
查看次数

用PHP实现secp256k1(ECDSA)(用于比特币)

热衷于downvoters和/或关闭者:如果你认为这是SO的offtopic,请指出我的其他StackExchange站点,这个问题更合适.


如何在PHP中实现ECDSA曲线secp256k1

或者说:是否有任何解决方案 - 即.包括专业课程 - 已经完成了吗?

我可以看到有很多开源库,类和其他语言可用的东西(JavaScript,Python,...)但我整个下午都在谷歌上搜索一些/任何PHP解决方案而且...... 没有!.

这是的比特币项目,我需要一种如何从私钥生成公钥的方法 ...... 然后我想生成最终的比特币地址.

我知道如何生成私钥(不要担心它是随机的或不是 - 这里不是问题)我有256位十六进制和WIF符号.但下一步:提出一个公钥,然后是最终的比特币地址,对我来说是一个问题,因为我确实没有加密的背景,我知道解决方案是以某种方式利用secp256k1.

这是我到目前为止:

// Random bytes
// $private_key = bin2hex(openssl_random_pseudo_bytes(32));
// But using brainwallet.org style to have easy comparison
$passphrase = "correct horse battery staple";
$private_key = hash('sha256', $passphrase);
var_dump ("PrivKey: $private_key");
// Bitcoin::privKeyToWIF from github.com/mikegogulski/bitcoin-php
$wif = Bitcoin::privKeyToWIF($private_key); 
var_dump ("WIF PrivKey: $wif");
// And now I don't know where to even start …
Run Code Online (Sandbox Code Playgroud)

php bitcoin ecdsa php-openssl

6
推荐指数
0
解决办法
3514
查看次数

Node.js和WebCrypto之间的ECDSA签名似乎不兼容?

我正在使用以下示例在Node.js中进行签名+验证:https://github.com/nodejs/node-v0.x-archive/issues/6904.验证在Node.js中成功,但在WebCrypto中失败.同样,使用WebCrypto签名的消息无法在Node.js中进行验证.

这是我用来验证使用WebCrypto从Node.js脚本生成的签名的代码 - https://jsfiddle.net/aj49e8sj/.在Chrome 54.0.2840.27和Firefox 48.0.2中进行了测试

// From https://github.com/nodejs/node-v0.x-archive/issues/6904
var keys = {
  priv: '-----BEGIN EC PRIVATE KEY-----\n' +
        'MHcCAQEEIF+jnWY1D5kbVYDNvxxo/Y+ku2uJPDwS0r/VuPZQrjjVoAoGCCqGSM49\n' +
        'AwEHoUQDQgAEurOxfSxmqIRYzJVagdZfMMSjRNNhB8i3mXyIMq704m2m52FdfKZ2\n' +
        'pQhByd5eyj3lgZ7m7jbchtdgyOF8Io/1ng==\n' +
        '-----END EC PRIVATE KEY-----\n',
  pub: '-----BEGIN PUBLIC KEY-----\n' +
       'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEurOxfSxmqIRYzJVagdZfMMSjRNNh\n' +
       'B8i3mXyIMq704m2m52FdfKZ2pQhByd5eyj3lgZ7m7jbchtdgyOF8Io/1ng==\n' +
       '-----END PUBLIC KEY-----\n'
};
var message = (new TextEncoder('UTF-8')).encode('hello');

// Algorithm used in Node.js script is ecdsa-with-SHA1, key generated with prime256v1
var algorithm = {
    name: 'ECDSA',
    namedCurve: 'P-256',
    hash: {
        name: 'SHA-1'
    }
};

// Signature …
Run Code Online (Sandbox Code Playgroud)

cryptography node.js ecdsa webcrypto-api

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

Bouncy Castle ECDSA 从私钥创建公钥

我正在尝试用 C# 签署比特币交易。我有 2 位代码正在尝试完成。我可以使用 Bouncy castle 创建一组私钥和公钥。我可以将其转换为钱包导入格式。

我还可以从 ECDSA 公钥生成比特币地址。

但是,我想签署一笔交易,而我拥有的只是我的私钥。我不想导入钱包并签名。那么,在仅给出私钥的情况下,如何生成公钥呢?

我发现了一个 javascript 方法可以做到这一点:

ecparams.getG().multiply(this.priv).getEncoded();
Run Code Online (Sandbox Code Playgroud)

我在 Bouncy Castle 中看到的唯一方法是生成随机对。

private static AsymmetricCipherKeyPair GenerateKeys(int keySize)
{
  ECKeyPairGenerator gen = new ECKeyPairGenerator();
  SecureRandom secureRandom = new SecureRandom();
  KeyGenerationParameters keyGenParam = new KeyGenerationParameters(secureRandom, keySize);
  gen.Init(keyGenParam);
  return gen.GenerateKeyPair();
}
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle bitcoin ecdsa

5
推荐指数
1
解决办法
9619
查看次数

java.security.SignatureException:错误解码签名字节

我在尝试验证 Android KitKat 设备(Nexus 5)中的签名时遇到此异常。

使用KeyFactory作为 EC 算法和签名实例作为NONEwithECDSA

异常日志:

java.security.SignatureException: error decoding signature bytes. 
at com.android.org.bouncycastle.jcajce.provider.asymmetric.util.DSABase.engineVerify(DSABase.java:82)
at java.security.Signature$SignatureImpl.engineVerify(Signature.java:617)
    at java.security.Signature.verify(Signature.java:375)
Run Code Online (Sandbox Code Playgroud)

谁能解释如何克服这个错误?

android exception ecdsa android-4.4-kitkat

5
推荐指数
0
解决办法
588
查看次数

定义 ECDSA 签名数据的规范

我想知道ECDSA签名和公钥的数据格式是什么规范(或标准)定义的?

我正在 java 卡上测试 ECDSA 签名。我发现签名和公钥值中有一个TLV格式。

* Public key (TV format)
[Tag=04] [public key value 1] [public key value 2]
04 038A3F59E813995DAB730588CFCBB985F5A1ED90C0D62960AE0B274D 2E6B12672318E0B113DECC0406B62887B6BCB9B1583B1A50779EAB5A

* Signature (TLV format)
[Tag=30] [Length=3C~3E] [Tag=02] [Length=1C~1D] [signature value 1] [Tag=02] [Length=1C~1D] [signature value 2]

303C 021C 7EEB0B2596F74344B3D7B046EA0BD17C4461FC277658CE93509F1674      021C 4F5DBFB30D994664DA80528847A767F0194876B068E5958161797991
303E 021D 0080F20B82D407AE663F010F4990F12073631D653EA1D65DC75EBD4293    021D 00880DB667EF51AEA8E7C9BB012496C7C9ECE3BC5829B82B692B9211C3
303D 021D 00F77447EF326A4A49597D0B839F68F524891F3655DA4561F1AA10EF70    021C 152F7FF18644C5E5C9118736E1F7528F0B10C5FF641C7B7CDF012129
303D 021D 00A2EBCC5C5981341D0726F2E846CC3879C74EFD64D8698589A8CEAB60    021C 6E04FF884A451D7C0737A182BC2DE7F7D3008EE182B46A009BFFC9E8
Run Code Online (Sandbox Code Playgroud)

我认为数据格式是在某些规范或标准中定义的。我只想知道文档名称。

format specifications javacard ecdsa

5
推荐指数
1
解决办法
6972
查看次数

使用 X509Certificate2 签署和验证 ECDSA-SHA256 签名

我曾经OpenSSL使用SHA256. 现在我想使用这些证书来签署数据并验证现有的签名。

我尝试使用DSACryptoServiceProvider,但它只支持SHA1MD5

不过好像ECDsaCng是可以支持的ECDSA-with-SHA256。我唯一的问题是我不知道如何将私钥和公钥从 myX509Certificate2转换为必要的CngKey. 我读了另一个问题,有人描述了如何转换公钥。但是为了能够对数据进行签名,我也需要私钥。

那么有没有办法CngKeyX509Certificate2. 证书有不同的格式。我将它们作为 PFX 文件,并分别作为 CER 和 PEM 文件。

我更愿意坚持使用.NET Framework 4,但如果根本不可能使用它,我也会切换到Bouncy Castle.

c# ssl sha256 x509certificate2 ecdsa

5
推荐指数
1
解决办法
1848
查看次数

从 ECC X509Certificate 创建 X509Certificate2 在 C# 中抛出“System.NotSupportedException”

我需要将 ECC 证书导入 C# 中的 Windows 密钥库。作为第一步,我使用 BouncyCastle 生成 EC 密钥对,使用公钥创建 X509 证书,并使用 ECDSA 和私钥对其进行签名,即:

            var ecKeyPairGenerator = new ECKeyPairGenerator("ECDSA");
            ECKeyGenerationParameters ecKeyGenParams =
                new ECKeyGenerationParameters(SecObjectIdentifiers.SecP384r1, new SecureRandom());
            ecKeyPairGenerator.Init(ecKeyGenParams);
            AsymmetricCipherKeyPair pair = ecKeyPairGenerator.GenerateKeyPair();
            PrivateKeyInfo privKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
            SubjectPublicKeyInfo pubKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);

            X509V3CertificateGenerator bcX509Gen = new X509V3CertificateGenerator();
// set cert fields
...
            bcX509Gen.SetPublicKey(pair.Public);
            Asn1SignatureFactory bcSigFactory =
                    new Asn1SignatureFactory(X9ObjectIdentifiers.ECDsaWithSha384.Id, pair.Private);
            X509Certificate bcCert = bcX509Gen.Generate(bcSigFactory);
Run Code Online (Sandbox Code Playgroud)

然后,我使用上面创建的证书创建一个 X509Certificate2,即:

    SystemX509.X509Certificate2 msCert2 = 
        new SystemX509.X509Certificate2(bcCert.GetEncoded(), (string)null);
Run Code Online (Sandbox Code Playgroud)

但是,在创建 X509Certificate2 时会引发异常:

'msCert2.PublicKey.Key' threw an exception of type 'System.NotSupportedException'
"The …
Run Code Online (Sandbox Code Playgroud)

.net c# bouncycastle x509certificate2 ecdsa

5
推荐指数
1
解决办法
2542
查看次数

微软压缩天然气 | 如何将 PEM 编码的 ECDSA 私钥导入 MS Key Storage Provider

我知道 MS CNG 私人有这种格式 - BCRYPT_ECCKEY_BLOB BYTE X[cbKey] // Big-endian. BYTE Y[cbKey] // Big-endian. BYTE d[cbKey] // Big-endian.

因此试图导入以下关键字节 -

byte[] ec256PrivKB =
{
//Magic + CBLength
0x45, 0x43, 0x53, 0x31, 0x20, 0x00, 0x00, 0x00,
//X
0xA7, 0xFB, 0xCD, 0x4D, 0x7E, 0x43, 0x6F, 0x22, 0xBD, 0x74, 0xFA, 0x1F, 0xD7, 0x10, 0xDB, 0x8C, 0xF8, 0x29, 0xC1, 0xEC, 0x5E, 0x15, 0x1E, 0xE2, 0x84, 0x56, 0x3E, 0x54, 0x6E, 0x1D, 0x5C, 0xF6, 
//Y
0x6B, 0x42, 0x21, 0xD1, 0x92, 0xEB, 0x69, 0x66, 0x56, 0xD6, 0xEC, …
Run Code Online (Sandbox Code Playgroud)

openssl cryptography pem cng ecdsa

5
推荐指数
1
解决办法
1977
查看次数