Есть ли какая-либо атака 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 неизвестны.
любая помощь будет оценена. Благодарю.