12 октября 2014, 3:11:32 AM   # 1
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Во-первых, я напомню вам, что я только простой C программист и не криптограф. Если кто-нибудь имеет математический фон, чтобы подтвердить или опровергнуть мое экспериментальное обнаружение, пожалуйста, напишите!

Я экспериментировал с Curve25519 вчера, и я наблюдал очень полезное свойство, которое позволяет создавать multisig. https://forum.thesupernet.org/index.php?topic=154.msg1262#msg1262

Теперь я сомневаюсь, что это было только в тех немногих случаях, когда я обнаружил, что работает. Я BruteForce искал тысячи комбинаций и обнаружил очень простые отношения, которые я считаю, может быть использован для любого М N подписей.

Основное свойство Curve25519 является то, что если А и B знают друг друг, открытый ключ, они могут создать общий секрет. Пусть А и В закрытые ключи и и б открытых ключей:

curve25519 (A, B) == curve25519 (В, а)

Я искал и искал в Интернете, чтобы найти немного фактической полезной информации, поэтому я начал с вышеизложенным и моей интуиции и искал сочетания, которые создали тот же результат, и там было много, но самый простой и ясный был:

Добавить C и С к выше и обозначают S_ab, чтобы быть результатом curve25519 (A, B) или curve25519 (В, а) (они одинаковы)

curve25519 (А, S_bc) == curve25519 (В, S_ac) == curve25519 (С, S_ab)!

Это соотношение является весьма полезным и это, вероятно, очевидно, кто-нибудь знакомыми с curve25519 так может быть, я просто волнуюсь по пустякам, но рекомендация немедленно хеширования выхода S_ab. Предположительно, чтобы избежать каких-либо низких участков энтропии точки, и как только вы сделаете это, выше отношения не работают, как вы в конечном итоге полностью скремблирование положения точки в конечной области. Я называю это rawsharedkey и, возможно, она была изучена в глубину, чтобы мы могли получить некоторые математические доказательства этого соотношения.

Мы также знаем, что curve25519 (A, curve25519 (B, curve25519 (C, семена))) равно все перестановки порядка, я думаю, что это происходит потому, что поле образует абелеву группу, но это было давно, так как я сделали любую абстрактную алгебру, так что я, вероятно, термины неправильно. Это просто причудливый способ сказать о порядок не имеет значения,.

Итак, как использовать эти математические свойства, чтобы сделать multisig?

Так как S_xy постоянна для каждого набора для пары ключей для каждого узла, эти значения могут фактически быть кэшированы локально. Конечно, это означает, что присутствие S_xy на выходе не означает, что либо X или Y на самом деле подписали ничего. Оказывается, это хорошо, так как последний шаг требует узла подписания активно участвовать и окончательный вывод может быть обработан до собаки приходит домой:

sha256 (семена ^ curve25519 (A, S_bc))
sha256 (начальное число ^ curve25519 (В, S_ac))
sha256 (начальное число ^ curve25519 (С, S_ab))

все выше производят одинаковый результат и доказывает, что A, B и C все подписали с семенами (которые должны иметь метку времени в нем), и так как она проходит через SHA256 выход не дает никакой полезной информации о A, B или C. I Я не уверен, что если S_xy утечки любой информации к узлам, которые получают доступ к нему, но я не думаю, что так как это выход curve25519 и что это должно быть трудно отменить.

Так как это безопасно опубликовать окончательное число, А, В и С опубликовать его, и каждый может проверить, если 0, 1, 2 или 3 подписанты подписал. Исполнение следующих результатов выходит за рамки этой темы

Теперь, как это может быть обобщена? Я сильно чувствую, что "треугольник" отношения могут быть обобщены, но до сих пор мои экспериментальные результаты не найти правильную последовательность.

Позвольте мне побродить немного, что иногда помогает

Начиная с фундаментальным треугольником:
curve25519 (А, S_bc) == curve25519 (В, S_ac) == curve25519 (С, S_ab)

Заменим C, C с D, D:
curve25519 (А, S_bd) == curve25519 (В, S_ad) == curve25519 (D, S_ab)

Проблема заключается в том, это разные значения, как это S_ab в сочетании с C против D, однако, мы можем использовать собств / паб эквивалентности:

curve25519 (д, curve25519 (С, S_ab)) ?? curve25519 (с, curve25519 (D, S_ab))

Нету, что не работал, но, как и ожидалось:

curve25519 (D, curve25519 (С, S_ab)) == curve25519 (С, curve25519 (D, S_ab))
что значит:

curve25519 (D, curve25519 (С, S_ab)) == curve25519 (С, curve25519 (D, S_ab)) == curve25519 (В, curve25519 (D, S_ac)) == curve25519 (А, curve25519 (Д, S_bc))

Привет! Это означает, что существует 4 подписавшего решение, но для этого требуется несколько автографов, а затем корреляции, так что не совсем то, что я ищу. Во всяком случае, я надеюсь получить некоторую математическую помощь здесь, так что эффективные М N multisig с использованием curve25519 возможно. Экспериментально я нашел отношения треугольника, который я не уверен, если это тривиально очевидно, или что-то значительное.

Джеймс
jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777


Как заработать Биткоины?
Без вложений. Не майнинг.


13 октября 2014, 7:24:07 PM   # 2
 
 
Сообщения: 170
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

Получил 1806 Биткоинов
Реальная история.





Привет Джеймс,

Похоже, что несколько недоразумений здесь. Позвольте мне начать с каким-то фоном. Это легче объяснить, что происходит, если мы отвлечемся немного: давайте начнем с определения группа. Группа просто набор с операцией (так называемый +), некоторого множества элементов 0, что 0 + х = х + 0 = х для всех х в группе, и одноместной операцией - такие, что х + (-x) = 0 для всех х в группе. Таким образом, целые числа с добавлением представляют собой группа (как вещественные числа, рациональные и т.д.), вещественные числа с умножением представляют собой группа, множество обратимых матриц пХпа представляют собой группу под матричным умножением, и т.д.

Важная группа в криптографии является эллиптическая кривая группа, которая представляет собой группу, элементы которой являются пары (х, у) чисел, которые удовлетворяют уравнение эллиптического кривое. Сложение определяется в немного смешно, но есть Wikipedia страница на нем, что интересно.

Что важно об этих группах для криптографии заключается в следующем: дан элемент группы G, вы можете "умножать" целым числом п, путем добавления G к себе п раз. (Если п отрицательна, добавьте -G к себе -n раз.) Оказывается, что если зафиксировать элемент G в некоторой группе, а затем взять все элементы {Нг} для целых п это множество сама группа такая, что (Ng) + (мг) = (N + M) G. Это верное утверждение, что при ненулевых элементах в этой группе, скажем, P и Q, всегда есть некоторое число п такой, что P = NQ. Но для группы точек эллиптической кривой, есть так называемый "дискретный логарифм предположение" который говорит, что на самом деле вычисления п очень трудно. Существует также "Диффи-Хеллмана" предположение, которое говорит, что с учетом Ng, Мg в группе, то трудно вычислить НМГ. (Конечно, если вы знаете, н или м, это легко вычислить. Поэтому "общий секрет" Схема вы описали это эффективно вычислимая участниками, а также предположение Диффи-Хеллмана, почему это тайна.)

Так ... везде вы говорите Curve25519 (N, G), вы на самом деле означает Нг, где G является некоторый элемент в эллиптической кривой, определенной кривой curve25519 Djb в. Где вы говорите Curve25519 (A, B), где А и B являются элементами .... Я не знаю, что вы имеете в виду. Можете ли вы уточнить, что вы на самом деле вычисления здесь? Возможно, вы интерпретируете, как числа точек кривой не осознают этого, в этом случае вы должны использовать лучший язык программирования, который имеет тип системы. (В частности, С имеет очень слабую систему типа и код Djb использует символ * для все, который является ослиным, что нужно сделать в общественном коде с тонкой работой. Но, возможно, он компилирует код быстрее, чем это было бы, если бы он использовал обертку .. структуры) можно преобразовать групповой элемент в ряд, например, путем выбора двоичного кодирования, хэширования это, и интерпретировать хэш как число.

Теперь, общие секреты не очень полезно для построения схем multisignature. Они позволяют построить 1-из-N подписей (каждая сторона, которая имеет секрет может подписать), но ничего сильнее. Причина заключается в том, что любая сторона, которая знает общий секрет, может использовать это, чтобы подписать произвольные сообщения. В качестве примера реальной схемы multisig, я покажу, как построить N-из-N multisig Шнорра подписи. Семантика будет, что до тех пор, все Стороны соглашаются подписать конкретное сообщение, они могут сформировать подпись на этом сообщении. Тем не менее, ни один человек не будет видеть достаточно секретный материал для формирования подписи или ее собственной, или даже в сотрудничестве (менее N) других членов.

Схема ed25519 подписи Djb базируется от стандартной Шнорры подписи, но есть некоторые изменения, чтобы обеспечить эффективную проверку партии. Я не помню, что эти изменения (и не имеют бумаги со мной на автобусе, что я печатаю это с), так что я не уверен, если это применимо непосредственно .... но это иллюстративное в любом случае. Так вот это:

Предположим, у нас есть общественный P ключ, и пусть G образующая некоторой эллиптической кривой, и пусть Н хэш-функции. Стандартная схема шнорра представляет собой пару (с, е) чисел, которые удовлетворяют следующее соотношение: если R = эп + Sg то е = Н (м || R). Можно создать такую ​​подпись, если вы знаете х, что XG = P (так х секретный ключ здесь, и "дискретный логарифм предположение" выше, поэтому она является секретной, даже если Р является публичным), с помощью следующего механизма: выбирают случайные секретные к и вычислить R = кГс; затем положить е = H (M || R) и S = ​​K - ХЕ. Подпись (s, е). Учитывая некоторые очень сильные предположения о хэше-функции (что является непрозрачным мистическим источником равномерно случайных чисел, кроме того, что она возвращает тот же результат, когда данные же вход), мы можем доказать, что любой алгоритм, который подделывает подпись Шнорры может быть расширен, чтобы извлечь Секретный ключ. Поэтому, учитывая такую ​​хэш-функцию, кузнечна подпись Шнорры так сложно, как дискретная задачу журнала.

Теперь возникает вопрос: как мы можем сделать подпись 2-в-2? Одна из идей, как Вы предложили, чтобы использовать общий секрет: пользователи имеют секретные значения х и у и образуют закрытый ключ из (хэш) XYG. Проблема с этим, как упоминалось: обе стороны знают весь секрет, так что они могут как форма подписи на своих собственных. Так что это на самом деле схема multisig 1-из-2. Для того, чтобы получить 2-из-2, мы должны быть немного более умным. Вот протокол:
0. Предположим, что мы имеем две пары ключей (х, XG) и (у, YG), принадлежащие сторонам А и В. Покажем, как построить подпись с "2-оф-2" ключ (х + у (х + у) G).
1. Обе стороны выбирают секретные случайные числа. Вызов секретного альфа элементов а и секретный & beta; Б. А посылает αG к В, и В посылает βG А. Теперь обе стороны могут вычислить R = αG + βG = (a + b) G, и они вычислить е = H (M || R).
2. вычисляет S'= а - ХЕ и В вычисляет S „“ = β - вы, и они посылают их друг к другу. Тогда оба вычислить S = S'+ s ''.

Теперь (s, е) подпись м на открытом ключе (х + у) G, которая требует сотрудничества обеих сторон в форме, но ни одна из сторон получила достаточно информации, чтобы произвести такую ​​подпись в одиночку.


Это стоит упражнение (а) убедиться в том, что стандартная схема шнорра к - х действительно удовлетворяет соотношению (е = Н (т || R), где R = Sg + Ep), что я утверждал, что сделал, и (б) так делает 2-из-2 версии.


Это не совсем ответ на ваш вопрос, но я надеюсь, что это проливает некоторый свет на вещи.

Андрей
andytoshi сейчас офлайн Пожаловаться на andytoshi   Ответить с цитированием Мультицитирование сообщения от andytoshi Быстрый ответ на сообщение andytoshi

14 октября 2014, 12:29:46 AM   # 3
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

Привет Джеймс,

Похоже, что несколько недоразумений здесь. Позвольте мне начать с каким-то фоном. Это легче объяснить, что происходит, если мы отвлечемся немного: давайте начнем с определения группа. Группа просто набор с операцией (так называемый +), некоторого множества элементов 0, что 0 + х = х + 0 = х для всех х в группе, и одноместной операцией - такие, что х + (-x) = 0 для всех х в группе. Таким образом, целые числа с добавлением представляют собой группа (как вещественные числа, рациональные и т.д.), вещественные числа с умножением представляют собой группа, множество обратимых матриц пХпа представляют собой группу под матричным умножением, и т.д.

Важная группа в криптографии является эллиптическая кривая группа, которая представляет собой группу, элементы которой являются пары (х, у) чисел, которые удовлетворяют уравнение эллиптического кривое. Сложение определяется в немного смешно, но есть Wikipedia страница на нем, что интересно.

Что важно об этих группах для криптографии заключается в следующем: дан элемент группы G, вы можете "умножать" целым числом п, путем добавления G к себе п раз. (Если п отрицательна, добавьте -G к себе -n раз.) Оказывается, что если зафиксировать элемент G в некоторой группе, а затем взять все элементы {Нг} для целых п это множество сама группа такая, что (Ng) + (мг) = (N + M) G. Это верное утверждение, что при ненулевых элементах в этой группе, скажем, P и Q, всегда есть некоторое число п такой, что P = NQ. Но для группы точек эллиптической кривой, есть так называемый "дискретный логарифм предположение" который говорит, что на самом деле вычисления п очень трудно. Существует также "Диффи-Хеллмана" предположение, которое говорит, что с учетом Ng, Мg в группе, то трудно вычислить НМГ. (Конечно, если вы знаете, н или м, это легко вычислить. Поэтому "общий секрет" Схема вы описали это эффективно вычислимая участниками, а также предположение Диффи-Хеллмана, почему это тайна.)

Так ... везде вы говорите Curve25519 (N, G), вы на самом деле означает Нг, где G является некоторый элемент в эллиптической кривой, определенной кривой curve25519 Djb в. Где вы говорите Curve25519 (A, B), где А и B являются элементами .... Я не знаю, что вы имеете в виду. Можете ли вы уточнить, что вы на самом деле вычисления здесь? Возможно, вы интерпретируете, как числа точек кривой не осознают этого, в этом случае вы должны использовать лучший язык программирования, который имеет тип системы. (В частности, С имеет очень слабую систему типа и код Djb использует символ * для все, который является ослиным, что нужно сделать в общественном коде с тонкой работой. Но, возможно, он компилирует код быстрее, чем это было бы, если бы он использовал обертку .. структуры) можно преобразовать групповой элемент в ряд, например, путем выбора двоичного кодирования, хэширования это, и интерпретировать хэш как число.

Теперь, общие секреты не очень полезно для построения схем multisignature. Они позволяют построить 1-из-N подписей (каждая сторона, которая имеет секрет может подписать), но ничего сильнее. Причина заключается в том, что любая сторона, которая знает общий секрет, может использовать это, чтобы подписать произвольные сообщения. В качестве примера реальной схемы multisig, я покажу, как построить N-из-N multisig Шнорра подписи. Семантика будет, что до тех пор, все Стороны соглашаются подписать конкретное сообщение, они могут сформировать подпись на этом сообщении. Тем не менее, ни один человек не будет видеть достаточно секретный материал для формирования подписи или ее собственной, или даже в сотрудничестве (менее N) других членов.

Схема ed25519 подписи Djb базируется от стандартной Шнорры подписи, но есть некоторые изменения, чтобы обеспечить эффективную проверку партии. Я не помню, что эти изменения (и не имеют бумаги со мной на автобусе, что я печатаю это с), так что я не уверен, если это применимо непосредственно .... но это иллюстративное в любом случае. Так вот это:

Предположим, у нас есть общественный P ключ, и пусть G образующая некоторой эллиптической кривой, и пусть Н хэш-функции. Стандартная схема шнорра представляет собой пару (с, е) чисел, которые удовлетворяют следующее соотношение: если R = эп + Sg то е = Н (м || R). Можно создать такую ​​подпись, если вы знаете х, что XG = P (так х секретный ключ здесь, и "дискретный логарифм предположение" выше, поэтому она является секретной, даже если Р является публичным), с помощью следующего механизма: выбирают случайные секретные к и вычислить R = кГс; затем положить е = H (M || R) и S = ​​K - ХЕ. Подпись (s, е). Учитывая некоторые очень сильные предположения о хэше-функции (что является непрозрачным мистическим источником равномерно случайных чисел, кроме того, что она возвращает тот же результат, когда данные же вход), мы можем доказать, что любой алгоритм, который подделывает подпись Шнорры может быть расширен, чтобы извлечь Секретный ключ. Поэтому, учитывая такую ​​хэш-функцию, кузнечна подпись Шнорры так сложно, как дискретная задачу журнала.

Теперь возникает вопрос: как мы можем сделать подпись 2-в-2? Одна из идей, как Вы предложили, чтобы использовать общий секрет: пользователи имеют секретные значения х и у и образуют закрытый ключ из (хэш) XYG. Проблема с этим, как упоминалось: обе стороны знают весь секрет, так что они могут как форма подписи на своих собственных. Так что это на самом деле схема multisig 1-из-2. Для того, чтобы получить 2-из-2, мы должны быть немного более умным. Вот протокол:
0. Предположим, что мы имеем две пары ключей (х, XG) и (у, YG), принадлежащие сторонам А и В. Покажем, как построить подпись с "2-оф-2" ключ (х + у (х + у) G).
1. Обе стороны выбирают секретные случайные числа. Вызов секретного альфа элементов а и секретный & beta; Б. А посылает αG к В, и В посылает βG А. Теперь обе стороны могут вычислить R = αG + βG = (a + b) G, и они вычислить е = H (M || R).
2. вычисляет S'= а - ХЕ и В вычисляет S „“ = β - вы, и они посылают их друг к другу. Тогда оба вычислить S = S'+ s ''.

Теперь (s, е) подпись м на открытом ключе (х + у) G, которая требует сотрудничества обеих сторон в форме, но ни одна из сторон получила достаточно информации, чтобы произвести такую ​​подпись в одиночку.


Это стоит упражнение (а) убедиться в том, что стандартная схема шнорра к - х действительно удовлетворяет соотношению (е = Н (т || R), где R = Sg + Ep), что я утверждал, что сделал, и (б) так делает 2-из-2 версии.


Это не совсем ответ на ваш вопрос, но я надеюсь, что это проливает некоторый свет на вещи.

Андрей

да! это делает его намного понятнее, но до сих пор пытается сопоставить все эти операции в код C.

Я обрабатывал функцию curve25519 как Blackbox, что я думал, что делаю операцию поля, но он делает много вещей с некоторыми байтами, являющимися полиномами, кодируемым или нет, и других являются числами:

Код:
curve25519_donna (u8 * mypublic, Const u8 * секрет, Const u8 * Basepoint)
  конечности п.н. [5], х [5], г [5], zmone [5];
  uint8_t е [32];
  Int я;

  для (я = 0; я < 32; ++ я) е [я] = секрет [I];
  е [0] &= 248;
  е [31] &= 127;
  е [31]

Кажется, curve25519 (A, B) не имеет смысла, и он может быть использован только для Ng

Таким образом, чтобы закодировать свой протокол:
котировка
0. Предположим, что мы имеем две пары ключей (х, XG) и (у, YG), принадлежащие сторонам А и В. Покажем, как построить подпись с "2-оф-2" ключ (х + у (х + у) G).
1. Обе стороны выбирают секретные случайные числа. Вызов секретного альфа элементов а и секретный & beta; Б. А посылает αG к В, и В посылает βG А.
Я считаю, что G представлен {9}
(Х, XG) и (у, YG) являются стандартными curve25519 (х, О) и curve25519 (Y, G) пары ключей

Я думаю, мне нужно использовать функцию cmult сделать αG и βG:

Код:
/ * Вычисляет NQ, где Q является х-координата точки на кривой
 *
 * Resultx / resultz: координаты х полученной точки кривой (короткая форма)
 * П: немного обратным порядком байтов, 32-битовый номер
 * Д: точка кривой (короткая форма)
 * /
статическая сила cmult (конечности * resultx, конечность * resultz, Const U8 * п, Const конечность * д)

А будет генерировать случайные 256 бит -> а и посылает cmult (X, Z, a, G) до В
В генерирует случайные его 256 бит -> р и посылает cmult (X, Z, p, G) к А

теперь оба А и В можно вычислить (αG + βG)

котировка
Теперь обе стороны могут вычислить R = αG + βG = (α + β) G,
, но я не уверен, как именно это сделать, есть "fmonty" функция:
Код:
/ * Input: Q, Q 'Q-Q'
 * Выход: 2Q, Q + Q»
 *
 * X2 z3: длинная форма
 * X3 z3: длинная форма
 * Х г: короткая форма, разрушенные
 * Xprime zprime: короткая форма, разрушенный
 * QMQP: короткая форма, сохраняется
 * /
статическая сила
fmonty (конечности * х2, конечности * * 2, / * выход 2Q * /
       конечности * х3, конечности * Z3, / * Выход Q + Q»* /
       конечностей * х, конечности * г, / * вход Q * /
       конечностей * xprime, конечности * zprime, / * вход Q»* /
       Const конечность * QMQP / * вход Q - Q»* /)
Я думаю, что Q может быть αG и Q «βG, но не знаете, как получить третий вход (Q-Q») или (αG - βG), глядя на код, похоже, это может быть просто G {9}?

котировка
и они вычислить е = H (M || R).
Я полагаю, Н может быть SHA256 и оба А и В можно вычислить R = αG + βG

е = sha256 (м || (αG + βG))

и т есть подпись, но я совершенно запутался следующее:

котировка
2. вычисляет S'= а - ХЕ и В вычисляет S „“ = β - вы, и они посылают их друг к другу. Тогда оба вычислить S = S'+ s ''.

Подпись два числа с и е, а т является подписью и он находится внутри хэш-функции.
sha256 ((с, е) || (αG + βG)) ?? не имеют ни малейшего представления о том, как это сделать.

Предполагая, что как-то е можно рассчитать, то есть последний вопрос из них того, мульт и вычитаний:

А (а - ХЕ) = S'-> В
В (β - Ye) = S '' ->

, и S = ​​S'+ s ''

Может быть, это нормальные цифры и нормальная арифметика могут быть использованы?

Я извиняюсь за возможно супер просто недоразумение, но, по крайней мере, теперь я вижу намного лучше тип вещи, что происходит.

Джеймс

Постскриптум Большое спасибо за супер информативный пост!




jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777

14 октября 2014, 12:32:26 AM   # 4
 
 
Сообщения: 170
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

Привет Джеймс,

м это сообщение должно быть подписано. Подпись пара (R, S).

Андрей
andytoshi сейчас офлайн Пожаловаться на andytoshi   Ответить с цитированием Мультицитирование сообщения от andytoshi Быстрый ответ на сообщение andytoshi

14 октября 2014, 12:44:30 AM   # 5
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

Привет Джеймс,

м это сообщение должно быть подписано. Подпись пара (R, S).

Андрей

сложно! м для сообщения

е = sha256 (м || (αG + βG))

ИТАК м может быть просто SHA256 (МСГ) и "||" предположительно может быть XOR, так:

е = sha256 (sha256 (МСГ) ^ (αG + βG))

а затем, если следующие три только нормальная 256 битой арифметика:
(Α - х)
(Β - вы)
(С + S '')

единственный недостающий элемент, как вычислить (αG - βG), кажется, что это только одна точка не два, и в коде он {9} для расчета KeyPair, так что если это так просто, как только с помощью {9}, то Я могу закодировать что-то, что испытывает это

Джеймс
jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777

14 октября 2014, 1:01:49 AM   # 6
 
 
Сообщения: 170
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

К сожалению! || является конкатенация - вы хэш сообщения, а затем хэш R в том же состоянии SHA2. (Существующий код ed25519 должен сделать это где-то ..) (я говорю Упс, потому что я думал, что написать это и, очевидно, забыл ..)

Использование XOR не является безопасным.
andytoshi сейчас офлайн Пожаловаться на andytoshi   Ответить с цитированием Мультицитирование сообщения от andytoshi Быстрый ответ на сообщение andytoshi

14 октября 2014, 1:08:29 AM   # 7
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

К сожалению! || является конкатенация - вы хэш сообщения, а затем хэш R в том же состоянии SHA2. (Существующий код ed25519 должен сделать это где-то ..) (я говорю Упс, потому что я думал, что написать это и, очевидно, забыл ..)

Использование XOR не является безопасным.
Я использую libtom:

    sha256_init (&мкр);
    sha256_process (&мкр, SRC, длина);
    sha256_done (&мкр, хэш);

так что я думаю, я просто добавить второй sha256_process (&мкр, ЦСИ, длина) до sha256_done конкатенировать.

    sha256_init (&мкр);
    sha256_process (&мкр, тзд, msglen);
    sha256_process (&мкр,&R, 256>>3);
    sha256_done (&мкр, хэш);

Джеймс
jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777

14 октября 2014, 8:16:38 AM   # 8
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: multisig с помощью Curve25519

Должно быть, я сделал ошибку где-то ...

Код:
test3 недействительными ()
{
    статическая bits256 G, х, у, а, б, Xg, Yg, е, с;
    uint64_t ЬиЕ [2] [5];
    Int я;
    п.н. конечностей [5], XBP [5], YBP [5], e_xGx [5], e_xGz [5], e_yGx [5], e_yGz [5], SGX [5], SGZ [5], AgX [5] , AGZ [5], BGX [5], BGZ [5];
    конечности q2x [5], q2z [5], Rx [5], Rz [5], xpoly [5], ypoly [5], epoly [5], apoly [5], bpoly [5], Xe [5] , вы [5], spoly [5], xsumx [5], xsumz [5], ysumx [5], ysumz [5];
    G.bytes [0] = 9, fexpand (п.о., G.bytes);
    
    //
    RANDOMBYTES (x.bytes, SizeOf (х)), х = mask_key (х), fexpand (xpoly, x.bytes);
    RANDOMBYTES (a.bytes, SizeOf (а)), а = mask_key (а), fexpand (apoly, a.bytes);
    Xg = curve25519 (х, О);
    cmult (AgX, AGZ, a.bytes, BP);

    // B
    RANDOMBYTES (y.bytes, SizeOf (у)), у = mask_key (у), fexpand (ypoly, y.bytes);
    RANDOMBYTES (b.bytes, SizeOf (б)), б = mask_key (б), fexpand (bpoly, b.bytes);
    YG = curve25519 (у, G);
    cmult (BGX, BGZ, b.bytes, BP);
    
    // И то и другое
    fmonty (q2x, q2z, Rx, Rz, AgX, AGZ, BGX, BGZ, п.н.); // А и Б обмен (AgX, AGZ) и (BGX, BGZ), так как можно вычислить е
    тетсру (BUF [0], Rx, SizeOf (BUF [0]));
    тетсру (BUF [1], Rz, SizeOf (BUF [1]));
    символ * SRC = "Привет мир";
    calc_sha256cat (e.bytes, (неподписанные символ *) SRC, (int32_t) StrLen (SRC), (неподписанные символ *) ЬиЕ, SizeOf (BUF));
    
    //
    FMUL (х, xpoly, epoly); // х = х * е
    fdifference_backwards (х, apoly); // (& alpha; - ХЕ) = s'
    
    // B
    FMUL (вы, ypoly, epoly); // вы = у * е
    fdifference_backwards (Ye, bpoly); // (& beta; - Ye) = s ''
    
    // наконец, и доля B s'и s „“
    для (я = 0; я<5; я ++) // s = S + s ''
        spoly [I] = (х [I] + Ye [I]);
    disp_limb ("spoly", Spoly);
    fcontract (s.bytes, spoly), disp_bits256 (" s \ п", С);

    cmult (SGX, SGZ, s.bytes, BP); // Sg
    disp_xz ("Sg XZ \ п", SGX, SGZ);
 
    // R = ер + Sg -> (Е * XG + S * G), должна быть равна (е * YG + S * G)
    fexpand (XBP, xG.bytes);
    cmult (e_xGx, e_xGz, e.bytes, XBP); // еР для х
    fmonty (q2x, q2z, xsumx, xsumz, e_xGx, e_xGz, SGX, SGZ, п.н.); // (Ep + Sg)
    disp_xz ("xsum XZ \ п", Xsumx, xsumz);

    fexpand (YBP, yG.bytes);
    cmult (e_yGx, e_yGz, e.bytes, YBP); // ер для у
    fmonty (q2x, q2z, ysumx, ysumz, e_yGx, e_yGz, SGX, SGZ, п.н.); // (Ep + Sg)
    disp_xz ("ysum XZ \ п", Ysumx, ysumz);
}

Я заметил в полиномиальной форме он может изменяться, но при сжатии до 256-битового числа, всегда то же самое, так что отображения как х и г Vals.


  8e0539c79e4c30 8926b81faef662 811fdcd5840e1d 86c88ac5c0c565 829f821a0b73fa spoly
604d9ec739059eb377fdc035898b036135f747ea8a818b1591ad40b7a021f829 s

2c7332292b79212c31ae926c6cf62ea339c80452761a7d3f53eced415368c430 SGX
2dfd7e0f309e76ec163b674dfffdf8b4b07156abbcc8d282456f1c7494838637 SGZ

4d8a4ccda4b4c3959c7040478fe6ac3830aafc28d6432da97d4c834224888412 xsumx (Ep + Sg)
28768f66cef5f334af3746d27b427f52d5b91f1e1338b73af6e625b870f5d275 xsumz

908c0ac5a707594261b3df6fc64896033f61166afd6b98b7f0e32f615a514259 ysumx (Ep + Sg)
9422a680f5a74e05d561458d8ad25945ab64b5fc73aeb8b070e166a2eb34b93e ysumz

Не 100% уверен, что (Ep + Sg) проверяет, даже правильно, и, возможно, с или е перепутались. Без в любом случае уже известные значения части пути, мне кажется, что не может иметь какие-либо ошибки на протяжении всего процесса. Будем надеяться, что я по крайней мере близко.

Джеймс
jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW