标签: ecdsa

使用ECDSA对Amazon AWS EC2服务器进行SSH指纹验证?

当我创建一个新的Amazon EC2服务器时,我ssh照常使用它连接到它.

我看到了典型的警告:

$ ssh myserver  
The authenticity of host 'ec2-12-34-567-890.compute-1.amazonaws.com (12.34.567.890)'     can't be established.
ECDSA key fingerprint is 31:66:15:d2:19:41:2b:09:8a:8f:9f:bd:de:c6:ff:07.
Are you sure you want to continue connecting (yes/no)? 
Run Code Online (Sandbox Code Playgroud)

登录前如何验证指纹?

理想情况下,答案基于原始创建控制台日志之外的其他内容 - 因为日志可能会在系统重新启动后刷新,或者在生成大量输出的大型系统安装脚本期间刷新,或者连接到旧系统在创建时未跟踪的密钥.

ssh amazon-ec2 fingerprint amazon-web-services ecdsa

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

如何在Go中存储ECDSA私钥

我正在使用该ecdsa.GenerateKey方法在Go中生成私钥/公钥对.我想将私钥存储在用户计算机上的文件中,并在程序启动时加载它.有一种方法elliptic.Marshal可以整理公钥,但私钥没有任何内容.我应该简单地推出自己的,还是有推荐的存储私钥的方法?

go ecdsa

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

RDSA实施圣人

首先,我必须说我使用Sage数学的知识非常有限,但我真的想改进一个能够解决我遇到的这些问题.我被要求实施以下内容:

1 - 阅读FIPS 186-4(http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf)ECDSA的定义,并使用Sage数学实现:

  (a) prime eliptic curves (P-xxx)

  (b) binary eliptic curves (B-xxx)
Run Code Online (Sandbox Code Playgroud)

我尝试通过浏览互联网来解决(a)并最终得到以下代码:

练习1,a)

class ECDSA_a:

def __init__(self):
    #Parameters for Curve p-256 as stated on FIPS 186-4 D1.2.3
    p256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951
    a256 = p256 - 3
    b256 = ZZ("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16)
    ## base point values
    gx = ZZ("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16)
    gy = ZZ("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16)

    self.F = GF(p256)
    self.C = EllipticCurve ([self.F(a256), self.F(b256)])
    self.G = self.C(self.F(gx), self.F(gy))

    self.N = FiniteField (self.C.order()) # how many points are …
Run Code Online (Sandbox Code Playgroud)

python cryptography elliptic-curve sage ecdsa

16
推荐指数
1
解决办法
263
查看次数

将基于ECC的证书从Windows证书存储区导入CngKey

我怎样才能从基于ECC公钥/私钥X509Certificate2的到CngKey的与使用ECDsaCngECDiffieHellmanCng

我目前正在使用RSA 2048位密钥对来签名/加密内容.我这样做是通过从X509Store安全存储的地方提取证书,并使用标记为不可导出的私钥.我想将当前实现转换为使用ECDSA和ECDH,以便我可以使用较小的密钥大小来获得相同的安全性.

我已经使用openssl成功生成了ECC证书:

  1. openssl ecparam -out private.pem -name prime256v1 -genkey
  2. openssl req -new -key private.pem -x509 -nodes -days 365 -out public.cer
  3. openssl pkcs12 -export -in public.cer -inkey private.pem -out export.pfx

我已成功将上面生成的证书安装到证书库中.我可以通过thumbprint检索它们,但私钥和公钥的加密提供程序抛出"Algorithm not supported"异常.相反,我理解我应该使用ECDsaCngECDiffieHellmanCng签名/加密.但是这些都是在处理CngKey.

Bouncy Castle不是一个选项,因为它需要私钥可以导出.

CLR Security将返回一CngKey对via,GetCngPrivateKey但它不能与ECDsa一起使用,因为CLRSecurity返回的密钥是ECDH密钥.此外,CLR安全性并没有给我一种方法来从X509Certificate2签名验证中获取公钥(我甚至没有或者需要签名者的私钥).

有任何想法吗?我在我无计可施......任何帮助会很大赞赏.

.net security x509certificate2 cng ecdsa

15
推荐指数
1
解决办法
2308
查看次数

如何使用sha1ecdsa验证使用公钥的签名数据?

对密码学知之甚少我对看似简单的任务有很大的疑问.

我有.pem证书,数据字节和该数据的签名.我想通过匹配签名来检查是否有人更改了数据.

我的尝试:

private bool VerifySignature(byte[] data, byte[] signature)
{
  try
  {
    X509Certificate certificate = new X509Certificate("cert_filename.pem");
    if (certificate == null)
      return false;

    DSACryptoServiceProvider dsa = (DSACryptoServiceProvider)certificate.PublicKey.Key;

    return dsa.VerifyData(data, signatureData);
  }
  catch
  {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误

'不支持证书密钥算法'(System.NotSupportedException).

查看加载的证书,它表示签名算法是'sha1ecdsa'.

我只是想验证数据与签名.我在这里错过了什么?我想在没有任何外部解决方案的情况下这样做,因为它似乎是非常简单的任务.

更新:我正在尝试实现与以下Java代码相同的功能:

private boolean verify(byte[] data, byte[] signature)
{
  boolean isLicenseCorrect = false;

  Signature sig = Signature.getInstance("SHA1WithECDSA");
  sig.initVerify(certificate.getPublicKey());
  sig.update(data);

  return sig.verify(signature);
}
Run Code Online (Sandbox Code Playgroud)

.net c# cryptography c#-4.0 ecdsa

14
推荐指数
1
解决办法
2843
查看次数

如何在python中使用ecdsa签名和验证签名

我需要使用256位的私钥来使用ECDSA签署256位的哈希值,就像比特币一样,并且由于缺少python中的ecdsa文档,我正在绝望.

我在互联网上发现了很多代码,但没有什么比简单ecdsa.sign(msg, privkey)或类似更容易,我发现的一切都是很多我不理解的数学代码,但他们使用的是ecdsa库(我不知道)知道为什么他们不会在用于签名的库中添加签名函数,而是在使用库时需要一页代码?).

这是我到目前为止找到的最好的代码:

def ecdsa_sign(val, secret_exponent):
    """Return a signature for the provided hash, using the provided
    random nonce. It is absolutely vital that random_k be an unpredictable
    number in the range [1, self.public_key.point.order()-1].  If
    an attacker can guess random_k, he can compute our private key from a
    single signature. Also, if an attacker knows a few high-order
    bits (or a few low-order bits) of random_k, he can compute our private
    key from many signatures. The generation of …
Run Code Online (Sandbox Code Playgroud)

python ecdsa

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

.NET中的ECDiffieHellmanCng是否具有实现NIST SP 800-56A的密钥派生函数,第5.8.1节

我有一项任务,需要使用NIST SP 800-56A第5.8.1节中描述的密钥导出函数来获取密钥材料.我不是密码学方面的专家,所以如果问题很幼稚,请原谅我.这是我到目前为止所做的:

  1. 我有另一方的公钥和我的私钥
  2. 现在我尝试使用C#(.NET 4)ECDiffieHellmanCng类使用ECDH 1.3.132.1.12生成共享密钥,如下所示:

    // The GetCngKey method reads the private key from a certificate in my Personal certificate store
    
    CngKey cngPrivateKey = GetCngKey();
    
    ECDiffieHellmanCng ecDiffieHellmanCng = new ECDiffieHellmanCng(cngPrivateKey);
    
    ecDiffieHellmanCng.HashAlgorithm = CngAlgorithm.ECDiffieHellmanP256;
    ecDiffieHellmanCng.KeyDerivationFunction = ?? // What do I set here
    
    Run Code Online (Sandbox Code Playgroud)

最后这样做:

ecDiffieHellmanCng.DeriveKeyMaterial(otherPartyPublicKey:);
Run Code Online (Sandbox Code Playgroud)

在哪里/如何设置其他参数算法ID,Party U Info,Party V Info?

编辑 我愿意使用像Bouncy Castle这样的其他库(只要它们可以从.NET调用)

c# cryptography elliptic-curve diffie-hellman ecdsa

11
推荐指数
1
解决办法
3484
查看次数

无法验证 sol-wallet-adapter 签名的消息

创建签名消息后,我不确定如何使用生成的签名来使用公钥验证消息。

我的用例是,我想使用 Solana 钱包登录 API 服务器,其模式如下:

  1. GET message: String (from API server)
  2. sign message with privateKey
  3. POST signature (to API server)
  4. verify signature with stored publicKey

我尝试使用 nodeJScrypto.verify来解码 API 端的签名消息,但对缓冲区和椭圆曲线的挖掘有点超出了我的深度:

// Front-end code
const toHexString = (buffer: Buffer) =>
  buffer.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");

const data = new TextEncoder().encode('message to verify');
const signed = await wallet.sign(data, "hex");
await setLogin({ // sends API post call to backend
  variables: {
    publicAddress: walletPublicKey,
    signature: toHexString(signed.signature),
  },
}); …
Run Code Online (Sandbox Code Playgroud)

ecdsa ed25519 solana

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

在Java中加载原始的64字节长ECDSA公钥

我有一个原始(r,s)格式的ECDSA NIST P-256公钥.似乎没有简单的方法将它加载到实现java.security.interfaces.ECPublicKey的对象中.

加载64字节公钥的最简洁方法是什么,以便可以用来检查签名?

java cryptography digital-signature public-key ecdsa

10
推荐指数
4
解决办法
6105
查看次数

从压缩的公钥中派生ECDSA未压缩的公钥

我目前正在尝试从压缩的公钥中派生出比特币未压缩的ECDSA公钥.

根据比特币维基上的这个链接,有可能这样做......但是怎么样?

为了给你更多细节:截至目前,我已经在比特币网络上收集了压缩密钥(33字节长).

它们具有以下格式:<1字节长前缀> <32字节长X>.从那里,我想获得一个未压缩的密钥(65字节长),其格式为:<1字节长前缀> <32字节长X> <32字节长Y>

根据比特币维基上的这个其他链接,它应该像解决方程一样简单:

Y ^ 2 = X ^ 3 + 7

但是,我似乎无法到达那里.我对Y的价值远远不够.这是我的代码(公钥的值来自比特币维基示例):

import binascii
from decimal import *

expected_uncompressed_key_hex = '0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6'
expected_y_hex = expected_uncompressed_key_hex[-64:]
expected_y_dec = int(expected_y_hex, 16)
x_hex = expected_uncompressed_key_hex[2:66]
if expected_y_dec % 2 == 0:
    prefix = "02"
else:
    prefix = "03"

artificial_compressed_key = prefix + x_hex

getcontext().prec = 500
test_dec = Decimal(int(x_hex, 16))
y_square_dec = test_dec**3 + 7
if prefix == …
Run Code Online (Sandbox Code Playgroud)

python public-key bitcoin ecdsa

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