Здравствуйте,
я красный о изъяне с повторно используемыми значениями R в подписи сделки.
И мне интересно, если это возможно, что закрытый ключ подвергается воздействию, когда кто-то подписывает одно сообщение с тем же самым закрытым ключом.
|
9 января 2015, 10:14:55 PM | # 1 |
Сообщения: 152
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome" Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e подробнее... Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru Здравствуйте,
я красный о изъяне с повторно используемыми значениями R в подписи сделки. И мне интересно, если это возможно, что закрытый ключ подвергается воздействию, когда кто-то подписывает одно сообщение с тем же самым закрытым ключом. |
9 января 2015, 11:13:26 PM | # 2 |
Сообщения: 1078
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
|
10 января 2015, 7:09:23 AM | # 3 |
Сообщения: 478
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Здравствуйте, я красный о изъяне с повторно используемыми значениями R в подписи сделки. И мне интересно, если это возможно, что закрытый ключ подвергается воздействию, когда кто-то подписывает одно сообщение с тем же самым закрытым ключом. Помните алгебру? х + 5 = 8 Решите для х ... 3 справа? Как насчет: х + у + 5 = 23 .... Вы не можете сказать мне ... можно? Тем не менее, если бы я сказал вам, что ТО ЖЕ X и Y SAME также может быть: х - у + 6 = 8 то вы можете сделать: (Х + у + 5) - (х - у + 6) = (23) - (8) 2y - 1 = 15 2y = 16 у = 8 х - 8 + 6 = 8 х = 10 Поэтому для того, чтобы решить уравнение с 2-х переменными нужно 2 разных уравнений, которые удовлетворяют переменные. 3 на 3 ... 4 на 4 ... так далее, так далее. Теперь, подпись только формула, которая генерирует 2 значения, г и с. г = R.x = к х ^ (Где G является точка образующей кривой secp256k1 ... так известно) (R является точкой получили путем умножения их, а г х значение этой точки на координатной плоскости) s = (к ^ -1) х (г + д-р) по модулю N (Где к и г из уравнения г (так же), г это сообщение подписывается хеш, д является закрытым ключом, и N является порядок кривой (константа)) если мы видим то же значение г для 2 РАЗНЫХ сделок: (Где мы знаем, d и г такие же ... И мы знаем, к то же самое, так как г = к х G и G никогда не меняется) s1 - s2 = ((к ^ -1) х (z1 + др)) - ((к ^ -1) х (z2 + дг)) по модулю N s1 - s2 = (к ^ -1) z1 + (к ^ -1) дг - (к ^ -1) * 2 - (к ^ -1) Д-р мод Н s1 - s2 = (к ^ -1) г1 - (к ^ -1) * 2 по модулю N к = (s1 - s2) ^ - 1 х (z1 - z2) по модулю N Так как мы знаем, s1, s2 (они находятся в подписи 2 сделок) и z1, z2 (они сами сделки) мы теперь знаем, к. так что теперь мы подключить: s = (к ^ -1) х (г + д-р) по модулю N ы х к = г + д-р мод Н ск - г = дг мод Н д = (г ^ -1) х (ск - г) по модулю N Так как мы знаем, с, г, и г от подписи и сделок, и узнал, к из вышеуказанного раствора, можно вычислить закрытый ключ. Таким образом, в основном, значение к отдаст свой закрытый ключ, и используя ту же величину г (что означает, используя ту же величину к) для двух различных г (сделок) позволяет всем это рухнуть вниз. Решение этой проблемы заключается в изменении значения к DEPENDENT по сделке и закрытый ключ. поэтому, если мы генерируем K, выполняя Hash (Z + D) и используя этот хэш, при изменении г, то к ПРИДЕТСЯ изменить. То же самое с тем, если вы используете другой закрытый ключ для другого адреса. потому что вещь будучи хэшируется всегда будет меняться, когда транзакция изменяет или частные ключевые изменения, мы можем знать, что такое же значение г для двух различных операций нецелесообразно. |
10 января 2015, 7:39:35 AM | # 4 |
Сообщения: 2072
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Здравствуйте, я красный о изъяне с повторно используемыми значениями R в подписи сделки. И мне интересно, если это возможно, что закрытый ключ подвергается воздействию, когда кто-то подписывает одно сообщение с тем же самым закрытым ключом. Помните алгебру? х + 5 = 8 Решите для х ... 3 справа? Как насчет: х + у + 5 = 23 .... Вы не можете сказать мне ... можно? Тем не менее, если бы я сказал вам, что ТО ЖЕ X и Y SAME также может быть: х - у + 6 = 8 то вы можете сделать: (Х + у + 5) - (х - у + 6) = (23) - (8) 2y - 1 = 15 2y = 16 у = 8 х - 8 + 6 = 8 х = 10 Поэтому для того, чтобы решить уравнение с 2-х переменными нужно 2 разных уравнений, которые удовлетворяют переменные. 3 на 3 ... 4 на 4 ... так далее, так далее. Теперь, подпись только формула, которая генерирует 2 значения, г и с. г = R.x = к х ^ (Где G является точка образующей кривой secp256k1 ... так известно) (R является точкой получили путем умножения их, а г х значение этой точки на координатной плоскости) s = (к ^ -1) х (г + д-р) по модулю N (Где к и г из уравнения г (так же), г это сообщение подписывается хеш, д является закрытым ключом, и N является порядок кривой (константа)) если мы видим то же значение г для 2 РАЗНЫХ сделок: (Где мы знаем, d и г такие же ... И мы знаем, к то же самое, так как г = к х G и G никогда не меняется) s1 - s2 = ((к ^ -1) х (z1 + др)) - ((к ^ -1) х (z2 + дг)) по модулю N s1 - s2 = (к ^ -1) z1 + (к ^ -1) дг - (к ^ -1) * 2 - (к ^ -1) Д-р мод Н s1 - s2 = (к ^ -1) г1 - (к ^ -1) * 2 по модулю N к = (s1 - s2) ^ - 1 х (z1 - z2) по модулю N Так как мы знаем, s1, s2 (они находятся в подписи 2 сделок) и z1, z2 (они сами сделки) мы теперь знаем, к. так что теперь мы подключить: s = (к ^ -1) х (г + д-р) по модулю N ы х к = г + д-р мод Н ск - г = дг мод Н д = (г ^ -1) х (ск - г) по модулю N Так как мы знаем, с, г, и г от подписи и сделок, и узнал, к из вышеуказанного раствора, можно вычислить закрытый ключ. Таким образом, в основном, значение к отдаст свой закрытый ключ, и используя ту же величину г (что означает, используя ту же величину к) для двух различных г (сделок) позволяет всем это рухнуть вниз. Решение этой проблемы заключается в изменении значения к DEPENDENT по сделке и закрытый ключ. поэтому, если мы генерируем K, выполняя Hash (Z + D) и используя этот хэш, при изменении г, то к ПРИДЕТСЯ изменить. То же самое с тем, если вы используете другой закрытый ключ для другого адреса. потому что вещь будучи хэшируется всегда будет меняться, когда транзакция изменяет или частные ключевые изменения, мы можем знать, что такое же значение г для двух различных операций нецелесообразно. Это был очень полезный способ математически показать это. Спасибо тебе за это. |
10 января 2015, 10:27:29 AM | # 5 |
Сообщения: 1274
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Таким образом, в основном, значение к отдаст свой закрытый ключ, и используя ту же величину г (что означает, используя ту же величину к) для двух различных г (сделок) позволяет всем это рухнуть вниз. Решение этой проблемы заключается в изменении значения к DEPENDENT по сделке и закрытый ключ. Именно поэтому, как правило, к большому (~ 256 бит) криптографически безопасных случайных чисел при создании подписи ECDSA. Если генератор случайных чисел работает должным образом, есть очень маленький шанс, используя тот же K дважды. Было бы примерно такой же шанс, как угадать секретный ключ, который был использован кем-то другим. Как вы думаете, что делает к детерминированным лучше, чем с использованием случайного числа? Я слышал, что это что-то, чтобы избежать. Я знаю, что плохие генераторы случайных чисел или полное отсутствие случайности (сони инцидента) создала проблемы, ведущий к ключевым воздействию в прошлом, и продолжать делать это. |
10 января 2015, 4:29:17 PM | # 6 |
Сообщения: 478
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Как вы думаете, что делает к детерминированным лучше, чем с использованием случайного числа? Я слышал, что это что-то, чтобы избежать. делая K, которая опирается на г и д будет создать формулу, которая никогда не может быть решена при к. Представить: г = R.x = (D + г) ^ s = (к ^ -1) (г + д-р) по модулю N Слабость используя то же значение г с тем же закрытым ключом и различными сообщениями? Невозможно. Зачем? Потому что если вы измените сообщение г ваш г ВСЕГДА будет отличаться. Так как она используется для вычисления к, и он смешивается с уже неизвестно, так что никто не может предсказать, к. (Секретный ключ) если вы просто использовали D, как к, величина г будет таким же, как значение х в вашем Публичных и вы бы outed, а г = (г) ((s - г) ^ - 1) по модулю N если вы просто использовали г как к, то любой, кто видел сообщение сможет вычислить ключ, если они подобрали на нем. (Хотя это может быть трудно заметить такую уязвимость) Однако, используя комбинацию обоих ... (пожалуйста, следуйте RFC6979 и не просто добавить их вместе) нет никакой возможности решить для к, и до тех пор, как секретный ключ не остается частным, никоим образом не для внешнего наблюдателя вычислить к. Поэтому Trezor использует RFC6979 для генерации к значениям. Потому что не хватает случайности на таком маленьком устройстве. Поэтому он опирается на математику, чтобы гарантировать к меняется каждый раз. |
11 января 2015, 10:28:52 PM | # 7 |
Сообщений: 93
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
хорошее объяснение, но было бы понятнее, если й не используются для обозначения умножения и переменного
|
12 января 2015, 6:55:31 AM | # 8 |
Сообщения: 112
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Спасибо за нарушение моего мозга.
|
12 января 2015, 3:34:05 PM | # 9 |
Сообщения: 217
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Спасибо за нарушение моего мозга. Короткий ответ на первоначальный вопрос в том, что подписание и то же сообщение дважды не является проблемой. Чуть более подробный ответ: Если значение к повторно используются (на самом деле RFC6979 и любая другая детерминированная схема делает это), вы получите точно такую же подпись и злоумышленник не узнает ничего нового из второй подписи. Это один из немногих случаев, когда повторное использование значения к (и, следовательно, г) не является проблемой. Если K значения в подписях являются случайными и независимыми друг от друга, то ECDSA должно быть безопасным. Только, если значения K не являются случайными или не является независимыми (например, первые к являются случайными, вторым к + 1), то закрытый ключ может быть вычислен. То же самое верно, если вы подписываете два сообщения, которые отличаются. @ Evil-Knievel: если вы подписали сделку, которая имеет несколько входов с тем же адресом, подписанные сообщения все еще отличаются, поскольку алгоритм подписи занимает позиция ввода должна быть подписана во внимание. |
12 января 2015, 3:38:10 PM | # 10 |
Сообщения: 2002
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Только, если значения K есть. , , не является независимыми (например, первые к являются случайными, вторым к + 1), то закрытый ключ может быть вычислен. Вы в этом уверены? Я думал, что я прочитал иначе, но я мог бы думать о чем-то еще. @ Evil-Knievel: если вы подписали сделку, которая имеет несколько входов с тем же адресом, подписанные сообщения все еще отличаются, поскольку алгоритм подписи занимает позиция ввода должна быть подписана во внимание. Это не звучит вообще. Можете ли вы предоставить ссылку на источник, который описывает, как положение входных воздействий в результате подписи? |
12 января 2015, 4:02:46 PM | # 11 |
Сообщения: 464
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Только, если значения K есть. , , не является независимыми (например, первые к являются случайными, вторым к + 1), то закрытый ключ может быть вычислен. Вы в этом уверены? Я думал, что я прочитал иначе, но я мог бы думать о чем-то еще. Да, как объяснено @dabura, главное приходит из определения s = (Z + Dr) / к: 1 уравнение, 2 неизвестных (г и К). Поэтому бесконечное число решений. Если добавить еще одну подпись, теперь у вас есть 2 уравнений и 3 неизвестных (d, k1, k2). НО, если вам посчастливилось иметь соотношение между k1 и k2, теперь вы можете решить. Это тривиально, если k1 = k2, только немного сложнее, если k2 = k1 + 1. котировка @ Evil-Knievel: если вы подписали сделку, которая имеет несколько входов с тем же адресом, подписанные сообщения все еще отличаются, поскольку алгоритм подписи занимает позиция ввода должна быть подписана во внимание. Это не звучит вообще. Можете ли вы предоставить ссылку на источник, который описывает, как положение входных воздействий в результате подписи? |
12 января 2015, 4:03:58 PM | # 12 |
Сообщения: 217
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Хмм, hhanh00 был быстрее. Он писал по существу то же самое ...
Только, если значения K есть. , , не является независимыми (например, первые к являются случайными, вторым к + 1), то закрытый ключ может быть вычислен. Вы в этом уверены? Я думал, что я прочитал иначе, но я мог бы думать о чем-то еще. Конечно, вам нужно определить зависимость. Например, заметив, что r_2 = R_1 + G. Если вы можете угадать некоторую линейную зависимость между K_1 и K_2, у вас есть три линейных уравнения (два из двух подписей и зависимости), так что вы можете решить эти уравнения для восстановления неизвестных k_1, k_2 и закрытый ключ д. @ Evil-Knievel: если вы подписали сделку, которая имеет несколько входов с тем же адресом, подписанные сообщения все еще отличаются, поскольку алгоритм подписи занимает позиция ввода должна быть подписана во внимание. Это не звучит вообще. Можете ли вы предоставить ссылку на источник, который описывает, как положение входных воздействий в результате подписи? Я немного упрощен. Алгоритм подписи заменяет входной сценарий входа, который подписывается с выходными сценарием отработанномом сделки и заменяет все другие входные скрипты пустого сценария. См OP_CHECKSIG. Это даст разные сообщения для разных входов. Ниже приведен пример: хотя значения г те же значения различаются ы, так как сообщения различаются. https://blockchain.info/tx/6c2d0bbb87350cd18d93ede269817767b84715a6292a022c68b327f704ce486f |
12 января 2015, 4:10:16 PM | # 13 |
Сообщения: 464
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
@johoe: извините, не хотел, чтобы украсть вашу почту. Я ждал 30mn
Просто точность - не должен быть линейным, любое algebric уравнение между к и вы хорошо идти. |
12 января 2015, 4:20:55 PM | # 14 |
Сообщения: 217
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
Если вы можете угадать некоторую линейную зависимость между K_1 и K_2, у вас есть три линейных уравнения (два из двух подписей и зависимости), так что вы можете решить эти уравнения для восстановления неизвестных k_1, k_2 и закрытый ключ д. Чтобы добавить забавный факт, во время проблемы blockchain.info, прежде чем я проанализировал ГСЧ, я заметил, что там было двенадцать подписей с участием шести различных значений К и шесть различным частным ключам, что мой сценарий не мог сломаться. Так k1 происходило только с ключом d1 и d2, k2 с d2 и d3, и так далее до тех пор, пока не наступал k6 с d6 и d1. Это хрупкое, так как эти двенадцать неизвестных и двенадцать линейных уравнений. Я задумался, должен ли я реализовать общий линейное уравнение решателя просто разбить эти ключи, но это выглядело как много усилий просто сломать шесть дополнительных клавиш. Теперь это спорный вопрос, так как, разбивая ГСЧ я мог сломать все ключи. |
12 января 2015, 5:19:46 PM | # 15 |
Сообщения: 278
цитировать ответ |
Re: Разоблачение секретного ключа, подписав такое же сообщение дважды?
@johoe: извините, не хотел, чтобы украсть вашу почту. Я ждал 30mn Просто точность - не должен быть линейным, любое algebric уравнение между к и вы хорошо идти. Ну не совсем. Любое нетривиальное алгебраическое уравнение, связывающее k1 к2 или наоборот. Пример: Сделка: 5fcc0caeeedf3dcbfd72cf2ce01a32483191245bcc8b485a17f44416afffa1cf Bitcoin Адрес: 1JoktQJhCzuCQkt3GnQ8Xddcq4mUgNyXEa Q: 4972230932324498687212571124350031945292560402225635576575099731139372812950 90093163538124512621582638381287400742297296142742631973794490465505627039656 R1: 92627733765912716076593330327472060525510143496912551296551330375234442403667 52672529767396296781670694918936339003252868214635233297377470505896759805121 R2: 21777747090873872412507702170118124079689680605286211413831315675958103980165 28550945344342225460119170436294446323534473486342579588757092209276196855835 ================================================== =================================== Уравнение 1: 107386812206192895604609907534734551733750359009209085407402092094681165309221 (г) + 73497042855564472242350639786242013786650258073778360848595089035161389788260 (Q) = R1 ================================================== =================================== Уравнение 2: 103638365080811145359708265527675914061630653196238299508298055558291984536938 (г) + 90408099859559077857588671187578958541865517554215233387265259275631437140896 (Q) = R2, ================================================== ==================================== Связь: 48201704517020160076565286692925062647683650448021018660686086720974054945943 (г) + 94978595896780763074840294256755498914029806222047734373636501931687337209395 (R1) = R2, |