Есть ли какая-либо атака ECDSA, если у меня есть миллионы подписей?

Передо мной была поставлена ​​задача проверить безопасность программного обеспечения нашей компании. Программное обеспечение нашей компании генерирует подписанные ecdsa файлы заказов на поставку. Можно создать столько файлов, сколько он хочет.

поэтому мой вопрос: есть ли атака ECDSA, если у меня есть миллионы подписей?

мы используем 112-битный порядок простой кривой: 4451685225093714776491891542548933

Я рассчитал 1 миллион подписей, используя следующий метод:

public void GenerateSignature()
{
    //curve order
    BigInteger n = ec.N;

    Ramdom rand = new Random();

    //private key
    BigInteger d = ((ECPrivateKeyParameters)key).D;

    //loop for 1 million signatures
    for (int i = 1; i <= 1000000; i++)
    {
        //random k and e
        BigInteger e = new BigInteger(112, rand).Mod(n);        //new biginteger by giving bitlength and random
        BigInteger k = new BigInteger(112, rand).Mod(n);

        //calculate r
        BigInteger r = key.Parameters.G.Multiply(k).X.ToBigInteger().Mod(n);

        //calculate s
        BigInteger s = k.ModInverse(n).Multiply(e.Add(d.Multiply(r))).Mod(n);

        //save generated signatures to database
        new DBCon().ExecuteNonQuery("Insert into signatures values ('" + e.ToString() + "', '" + r.ToString() + "', '" + s.ToString() + "')");
    }   
}

Я использую криптографическую библиотеку BouncyCastle с C#.

Я знаю, что закрытый ключ может быть вычислен, если значения k известны как d = (sk - e) / r.

Я также знаю, что закрытый ключ может быть вычислен, если две подписи имеют одинаковое значение r, тогда мы можем вычислить k по k = (e1 - e2) / (s1 - s2) и затем по d, используя приведенную выше формулу.

Я также знаю, что закрытый ключ может быть вычислен, если известны некоторые биты k с использованием около 100 сигнатур с решеточными атаками, но в этом случае биты k неизвестны.

любая помощь будет оценена. Благодарю.

0 ответов

Другие вопросы по тегам