8 февраля 2016, 10:22:30 PM   # 1
 
 
Сообщения: 2002
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

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


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

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

Мы оба сгенерированных асимметричных ключей и уверены, что у нас есть открытый ключ друг друга (обменял на человека).

Они будут шифровать данные с моим открытым ключом, так что только два лица, которые имеют контроль над тем, кто видит, что данные сами по себе и мне.

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

Все идет нормально.

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

Если я правильно понял, я могу подтвердить, что данные, которые я получил, был от отправителя, а конечные получатели могут все проверить, что данные, которые они получают на самом деле от меня. Каждый получатель данных Посылают может видеть только те данные, которые были зашифрованы с их открытым ключом и не может видеть любого из данных, которые я обеспечиваю кому-либо (если это другое лицо или отправляющая организация не хочет делиться).

Отлично, теперь, вот проблема, которую я пытаюсь решить, и мне интересно, если есть какие-либо криптографические методы (фокусы?), Которые могут помочь.

Допустим, провайдер данных посылает мне какие-то плохие данные. Я никогда не смотрю на содержании данных и не имею никакого способа знать, если это точное или нет, даже если бы я сделал. Я просто передать плохие данные по в суб-наборов, которые я посылаю. Получатель плохой подмножестве влечет за собой значительные потери из-за решения, принятые на основе этого неверных данных. Они контакт (подать в суд?) Провайдер данных, чтобы попытаться получить компенсацию за потерю.

В рамках процесса, который я описал до сих пор, если я не хранить все данные о том, что поставщик данных никогда не посылает меня в бессрочном, поставщик теоретически может утверждать, что они дали мне правильные данные, и что какая-то ошибка в моем процессе должен ввели, что плохие данные. Если они фальсифицировать свои исходные данные, они могли бы даже быть успешными в сокрытии того факта, что они были источником плохих данных. Если я не могу доказать, что данные, которые я послал на самом деле данные, которые я получил, я мог бы закончить тем, что, как партия, перепутались.

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

Зная слишком мало о шифровании знать, если мой следующий пример даже имеет смысл, моя мысль в том, что, возможно, не было бы какой-то другой хэш вместо SHA256, что я мог бы использовать. Что-то, где я мог бы попросить поставщика подписать хэш-значение XYZ полного набора перед отправкой его мне, а затем до тех пор, как я хранить XYZ хэш каждого из подмножеств, которые я создаю, это может быть доказано, что мой XYZ хэш была основана на данных, которые также включены в поставщики XYZ хэш.

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

Так что, я думаю, что я искал что-то похожее на Merkle дерево без создателя "корень" зная точно, как ветви будут разбиты, хотя я открыт для любых других понятий.
DannyHamilton сейчас офлайн Пожаловаться на DannyHamilton   Ответить с цитированием Мультицитирование сообщения от DannyHamilton Быстрый ответ на сообщение DannyHamilton


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


9 февраля 2016, 8:30:47 AM   # 2
 
 
Сообщения: 173
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

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





Я думаю, что это будет трудно. Пока они подписывают весь набор данных с одной подписью, и разбить его на части, прежде чем подписать его снова.

Возможно ли, что вы собираете данные от выручки, а затем собрать его снова, а затем вы можете доказать, что это было плохо, когда вы его получили?

Если нет, я думаю, что вам нужно будет хранить все данные, и доказать это таким образом.

Насколько я знаю, нет никакого способа, чтобы доказать, что, например, 4 хэш бы происхождение из сигнатуры X или Y. хэш

Может быть, вы могли бы создать HMAC подпись исходных данных, подписанных с кешем фрагментации данных. А затем включить этот хэш, наряду с некоторыми мета-данными и отправить его (подпись) к обеим частям.
Тогда, чтобы доказать, что не было изменено вы получите исходные данные, кусок его, как вы делали, и доказать, что подпись соответствует, и что Chunked данные не были изменены.
xqus сейчас офлайн Пожаловаться на xqus   Ответить с цитированием Мультицитирование сообщения от xqus Быстрый ответ на сообщение xqus

9 февраля 2016, 8:41:08 AM   # 3
 
 
Сообщения: 1862
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Позвольте мне увидеть, если я правильно понял проблему:

Алиса обеспечивает X количество данных, которое шифруется и отправляется
Брайан, который затем принимает расшифрована часть Y этих данных и шифрует, что и направляет его
Cathy, кто хочет знать, действительно ли Алиса даже отправить эти данные Y Брайану в первую очередь?

Если предположить, что я понял, это то, что подход я бы хотел привлечь Алиса и Кэти общения (если вы не хотите, что происходит, то я думаю, что это будет очень сложно, и особенно, если данные были разбиты произвольно).

Если Брайан дал вам некоторые мета-данные (например, смещение в X, что Y происходит от), а затем, не раскрывая данных Cathy может отправить этот мета-данные Алисе (наряду с длиной Y), которые могли бы затем отправить обратно хэш из Y, который Cathy проверяет.
CIYAM сейчас офлайн Пожаловаться на CIYAM   Ответить с цитированием Мультицитирование сообщения от CIYAM Быстрый ответ на сообщение CIYAM

9 февраля 2016, 9:00:50 AM   # 4
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

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

Сделать поставщик подписать каждый N-KB блок данных - публиковать эти подписи.
Затем разделить данные, используя (кратное) размеры N-KB.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

9 февраля 2016, 1:57:20 PM   # 5
 
 
Сообщения: 2002
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Я думал, что я объяснил этот вопрос очень хорошо в моем О.П., но я получаю ответы, которые не отвечают требованиям. Может быть, я не делал, как хороший из работы, объясняющей, как я думал, что я сделал.

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

Вот почему 3 самые последние предложения не отвечают моим требованиям:

- чик -
Тогда, чтобы доказать, что не было изменено вы получите исходные данные, кусок его, как вы делали, и доказать, что подпись соответствует
- чик -

Да, я уже знаю, что я могу сделать то, что я пытаюсь сделать, если у меня есть доступ ко всем исходным данным. Это будет огромное количество данных. Если мне нужно хранить исходные данные навсегда, что это будет немного хлопот. Я пытаюсь выяснить, если есть способ хранения меньше.

* Я думаю *, если поставщик данных знал заранее (или если бы я мог commnicate вернуться к ним), как будет создано подмножество, то я мог бы просто иметь их генерировать Merkle дерева и подписать корень. Тем не менее, на данный момент я вряд ли сможет иметь их генерировать, что для меня.

Алиса обеспечивает X количество данных, которое шифруется и отправляется
Брайан, который затем принимает расшифрована часть Y этих данных и шифрует, что и направляет его
Cathy, кто хочет знать, действительно ли Алиса даже отправить эти данные Y Брайану в первую очередь?

Это звучит о праве. В этом случае, я Брайан. Я хочу, чтобы иметь возможность доказать, Кэти, Элис, и кто-то еще, что данные, которые я дал Cathy был получен в большом наборе от Алисы.

Если предположить, что я понял, это то, что подход я бы хотел привлечь Алиса и Кэти общения (если вы не хотите, что происходит, то я думаю, что это будет очень сложно, и особенно, если данные были разбиты произвольно).

Данные были разбиты на подмножества в соответствии с набором правил. Правила различны для каждого типа данных, полученных, но они всегда последовательны для этого типа данных. Так что это не является совершенно произвольным, но Алиса не знает, или все равно, что правила для создания подмножества. Она не будет ломать это для меня, это то, что я должен делать.


Если Брайан дал вам

Я Брайан в этом примере, поэтому он не должен "дай мне" что-нибудь.

некоторые мета-данные (такие, как смещение в X, что Y исходит от), то не раскрывая данные Кэти может отправить этот мета-данные для Алисы (наряду с длиной Y), которые могли бы затем отправить обратно хэш Y, который проверяет Кэти.

Я пытаюсь защитить мозг от Элис лгут. В вашем примере Алиса могла бы зафиксировать данные на ее конце, а затем отправить хэш фиксированных данных. Кэти будет думать, что Брайан изменил данные, поскольку данные она получила не соответствовать данным, Алиса утверждает, она послала к Брайану. Брайан должен быть в состоянии доказать, что Алиса изменила данные.

Сделать поставщик подписать каждый N-KB блок данных - публиковать эти подписи.
Затем разделить данные, используя (кратное) размеры N-KB.

Существует множество правил, которые необходимо соблюдать при оказании подмножеств. Я не могу рассчитывать на этих правилах всегда приводит в соответствии с N-KB блоками. Поставщик данных не знает, или все равно, что правила для создания подмножества. Они не будут ломать это для меня, это то, что я должен делать.
DannyHamilton сейчас офлайн Пожаловаться на DannyHamilton   Ответить с цитированием Мультицитирование сообщения от DannyHamilton Быстрый ответ на сообщение DannyHamilton

9 февраля 2016, 2:10:13 PM   # 6
 
 
Сообщения: 1862
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Я пытаюсь защитить мозг от Элис лгут. В вашем примере Алиса могла бы зафиксировать данные на ее конце, а затем отправить хэш фиксированных данных. Кэти будет думать, что Брайан изменил данные, поскольку данные она получила не соответствовать данным, Алиса утверждает, она послала к Брайану. Брайан должен быть в состоянии доказать, что Алиса изменила данные.

Хм ... что я думаю, что вам нужно, чтобы произошло то, что Алиса будет необходимо дать информацию о том, как данные были разделены, а затем подписать Merkle дерево этой информации (которая в основном означает, что Алиса также делает деля таким же образом проверить дерево Меркла, однако, принимая работу, которая определяла, отделяющие от копирования данных было гораздо сложнее, чем обработка списка смещений, то, возможно, это не слишком большой проблемы, как у Алисы есть все данные в первую очередь).

Если вы не хотите, чтобы Алиса сохранить данные после трансляции его Брайан, то я думаю, что вы, вероятно, SOL, но если Алиса может хранить информацию только достаточно долго, чтобы подписать на дереве Merkle, то вы должны быть в порядке.
CIYAM сейчас офлайн Пожаловаться на CIYAM   Ответить с цитированием Мультицитирование сообщения от CIYAM Быстрый ответ на сообщение CIYAM

9 февраля 2016, 2:33:35 PM   # 7
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Сделать поставщик подписать каждый N-KB блок данных - публиковать эти подписи.
Затем разделить данные, используя (кратное) размеры N-KB.

Существует множество правил, которые необходимо соблюдать при оказании подмножеств. Я не могу рассчитывать на этих правилах всегда приводит в соответствии с N-KB блоками. Поставщик данных не знает, или все равно, что правила для создания подмножества. Они не будут ломать это для меня, это то, что я должен делать.

ОК .. так что вам нужно
1) получить большой файл, созданный исходной партии и подписал с закрытым ключом источника.
2) разрезать его на куски, подписывая каждую из частей с закрытым ключом, а затем распространять эти подписи, а также содержание кусочков.
3) выяснить, как третья сторона, которая будет принимать какие-либо из этих частей может убедиться, что она представляет собой фактическую часть исходного файла, а не доверять вам, и не имея доступа к остальной части частей

и все, что без какого-либо сотрудничества с исходной партии ...?

ну, удачи с этим!

ИМХО, это не может быть сделано.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

9 февраля 2016, 5:10:14 PM   # 8
 
 
Сообщения: 2002
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

- чик -
Если вы не хотите, чтобы Алиса сохранить данные после трансляции его Брайан, то я думаю, что вы, вероятно, SOL
- чик -

- чик -
ну, удачи с этим!

ИМХО, это не может быть сделано.

Вот что я понял. Я лично не мог придумать способ, что это может быть сделано, но подумал, что это стоит спрашивать в случае, если что-то я не в курсе.

Моя единственная надежда была какая-то функция, что я не знал такого, что:

Данный:
DataSet = DataSet_A + DataSet_B + DataSet_C + DataSet_D

Мы могли бы сказать, что:
Func (DataSet) = Func (DataSet_A) + Func (DataSet_B) + Func (DataSet_C) + Func (DataSet_D)

Где:
Размер Func (X) значительно меньше, чем X
Func (X) приводит тот же результат каждый раз, когда вы используете один и тот же вход
Когда X и Y не являются идентичными, есть очень маленький шанс, что Func (X) будет когда-либо иметь тот же результат, как и Func (Y)

Обратите внимание на то, что "где" раздел звучит так же, как криптостойкая хэш, но мне нужен хэш-функция, которая также имела атрибут перечисленный в разделе "Мы могли бы сказать, что",

Я могу думать очень слабый "гашиш" что удовлетворяет потребности в первой части, но это не является достаточно сильным для второй части:
  • Преобразование данных в двоичном представлении
  • Сложите все 1-е в наборе данных
  • Подписать результирующее значение

Теперь, если вы делаете то же самое для подмножеств, вы обнаружите, что мне нужно хранить только количество 1-й в каждой подгруппе. Теперь я могу показать, что сумма подписанных количеств 1-й в подмножествах равна количеству 1-х, что поставщик данных подписал.

К сожалению, этот слабый пример бесполезно, потому что это, чтобы легко перемещать 1 вокруг в данных вместо того, чтобы добавлять или удалять их. Это означает, что выходит из строя "Когда X и Y не являются идентичными, есть очень маленький шанс, что Func (X) будет когда-либо иметь тот же результат, как и Func (Y)" контрольная работа.

Мне нужно что-то лучше, но я не знаю, существует ли что-то лучше. Я только что получил это мучительное чувство в задней части моей головы, что я увидел что-то вроде того, что я хочу еще в начале 90-х годов. Я, вероятно, worng и думать о чем-то еще, но должен был спросить на всякий случай.
DannyHamilton сейчас офлайн Пожаловаться на DannyHamilton   Ответить с цитированием Мультицитирование сообщения от DannyHamilton Быстрый ответ на сообщение DannyHamilton

10 февраля 2016, 11:34:47 AM   # 9
 
 
Сообщения: 610
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Как насчет какого-то гомоморфного хэша functon?

Hash (X + Y) = Hash (X) + Hash (Y) (Не Paillier сделать что-то вроде этого? .. Или что хэш-функция Gmax использует в своей КТ.)

Затем Алиса подписывает Hash (X + Y + ...), и вы можете показать, что сумма всех ваши маленьких хэшированных частей, добавляет к хэшу большого куска. Который подписывается Алисе.
spartacusrex сейчас офлайн Пожаловаться на spartacusrex   Ответить с цитированием Мультицитирование сообщения от spartacusrex Быстрый ответ на сообщение spartacusrex

10 февраля 2016, 2:07:58 PM   # 10
 
 
Сообщения: 2002
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Как насчет какого-то гомоморфного хэша functon?

Hash (X + Y) = Hash (X) + Hash (Y) (Не Paillier сделать что-то вроде этого? .. Или что хэш-функция Gmax использует в своей КТ.)

Затем Алиса подписывает Hash (X + Y + ...), и вы можете показать, что сумма всех ваши маленьких хэшированных частей, добавляет к хэшу большого куска. Который подписывается Алисе.

Именно по этой причине я начал эту тему.

Я не слышал, "Pallier", Но я собираюсь пойти Google это прямо сейчас.

Я считаю, что то, что я ищу именно то, что вы описываете, где:
Hash (X + Y + ...) = Hash (X) + Hash (Y) + Hash (...)

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

Кстати, когда вы говорите Gmax, вы имеете в виду gmaxwell? А что такое КТ?
(Честно говоря, я действительно надеялся, что gmaxwell бы видеть и проявлять интерес к этой теме. Я подозреваю, что если есть решение моей проблемы, он точно знает, что это такое).
DannyHamilton сейчас офлайн Пожаловаться на DannyHamilton   Ответить с цитированием Мультицитирование сообщения от DannyHamilton Быстрый ответ на сообщение DannyHamilton

10 февраля 2016, 4:29:22 PM   # 11
 
 
Сообщения: 610
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Кстати, когда вы говорите Gmax, вы имеете в виду gmaxwell? А что такое КТ?
(Честно говоря, я действительно надеялся, что gmaxwell бы видеть и проявлять интерес к этой теме. Я подозреваю, что если есть решение моей проблемы, он точно знает, что это такое).

Ага.

КТ Конфиденциальные сделки. Это его система показывает, что сумма входов в TXN добавить к сумме выходов, не раскрывая какой-либо из значений. Он реализован его в Elements боковой цепи.



И немного, что я думал, что может быть полезным для вас:

котировка
..
Приверженность Педерсен работает как выше, но с дополнительным свойством: обязательства могут быть добавлены, а сумма множества обязательств является таким же, как приверженность к сумме данных (С ослепительным набором ключей в виде суммы ослепляющих ключей):

  С (BF1, data1) + С (BF2, data2) == С (BF1 + BF2, data1 + data2) С (BF1, data1) - С (BF1, data1) == 0

Другими словами, обязательство сохраняет сложение и применяется свойство коммутативности.

Если data_n = {1,1,2} и {BF_n = 5,10,15}, то:

  С (BF1, data1) + С (BF2, data2) - С (BF3, данные3) == 0

и так далее.

..

Да, он будет. Он плохо задницу.
spartacusrex сейчас офлайн Пожаловаться на spartacusrex   Ответить с цитированием Мультицитирование сообщения от spartacusrex Быстрый ответ на сообщение spartacusrex

11 февраля 2016, 9:28:06 PM   # 12
 
 
Сообщения: 1045
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Как насчет следующего подхода:
Предположу, что вы разделяете данные в относительно несколько кусков без переназначения частей, и что оригинальный источник данных вычислен и подписан хэш SHA-256 по всем данным.
Затем вы можете запустить алгоритм SHA-256 по всему набору данных, записи промежуточного состояния алгоритма хеширования, где вы разделяете данные.
SHA-256 работает на 512-битовых блоков, так что, если вы разделите на границе блока, вам нужно всего лишь отметить значения в регистрах хэширования в этой точке.
Если разделить данные в пределах блока, необходимо отметить значение хэширования регистров перед блоком, плюс сам 512-битовый блок.
Каждый получатель получает данные состояния до и после его блока в дополнение к данным блока, таким образом, они могут проверить, является ли их части в порядке. Они должны предоставить вам подписанное заявление об этом факте.
Теперь у вас есть только архивировать эти подписанные заявления и блочные граничные состояния хеширования двигателя. Так как последнее пограничное состояние равно хэша за подписью автора оригинала, эти части вместе могут быть использованы, чтобы доказать, что вы не искажать данные.

Я вижу две возможные проблемы с этим подходом, хотя:
1. Вы бы раскрыть немного больше данных для каждого получателя, так как вы должны сократить на 512-битных границах. Я не знаю, что ли проблема, или может ли подталкивать источник данных для доставки данных в 512-битовых порций, например, путем заполнения каждой записи кратной 64 байт.
2. получатели данных могли бы утверждать, что вы вступили в сговор с получателем последнего блока, так что он подписывает недостоверную заявление об окончательном хэш-значения. Поскольку целостность данных только проверенные, когда окончательный хэш последнего блока равен хэш подписанного исходного источника данных, это может быть проблемой. Также возможно сговариваться с получателем, который получил ранее блоки, но вы можете обмануть только на реципиентов до того, вы вступили в сговор с.

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

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

12 февраля 2016, 1:53:51 PM   # 13
 
 
Сообщения: 610
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Onkel - мне нравится.

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

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

На самом деле я не знаю, сколько из последнего блока данных ему необходимо сохранить. Может быть, только последние 64 байта. Так что в одиночку также потребует атаки предварительного изображения сломаться?
spartacusrex сейчас офлайн Пожаловаться на spartacusrex   Ответить с цитированием Мультицитирование сообщения от spartacusrex Быстрый ответ на сообщение spartacusrex

17 февраля 2016, 7:34:56 AM   # 14
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

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

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

Но если вам просто нужно, чтобы быть в состоянии доказать, которого не изменить данные, а затем, показав, что ваши хэш добавить до нуля, и это соответствует совокупному хэш из источника данных, это представляется возможным

Источник данных должен был бы подписать комбинированный хэш.

http://crypto.stackexchange.com/questions/11923/difference-between-pedersen-commitment-and-commitment-based-on-elgamal?rq=1

Кроме того, кажется, связаны между собой, но математику позади столовой Криптографы может быть полезным.

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

17 февраля 2016, 8:36:41 PM   # 15
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

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

Так что если у вас есть терабайт полные данные, то говорят, 1MB самый маленький блок. вам потребуется 1 млн хэшей, но с 30 000: 1 сокращения размера, может быть, это приемлемо. Это решение компромисса, который не влияет на расчет. Больше, наименьший блок (позволяет называть его sblock), тем меньше гибкость, чтобы распределить его, тем меньше sblock, тем больше гибкость, но и более элементов должны быть сохранены.

Создателю данных необходимо знать размер sblock и применить то же вычисление, как вы делаете, а затем подписать его так, у вас есть доказательства того, что это то, что было доставлено.

Для каждого sblock ценности данных (мы предполагаем, что последний блок zerofilled) делаем SHA256 хэш, а затем рассматривать это как curve25519 элемент поля. Пять битов необходимо будет жестко, но есть еще 251 бит и вероятность столкновения чрезвычайно малы.

Следующий код предполагает 64-разрядных CPU и должен быть близок к расчету рабочего sblocks:

Код:
/ ************************************************* *****************************
 * Copyright © 2014-2016 Надсеть Разработчики. *
 * *
 * См АВТОРОВ, Девелопер-ДОГОВОР и ЛИЦЕНЗИОННЫЕ файлы *
 * Каталог верхнего уровня этого распределения для индивидуального авторского права *
 * Держатель информация и политика разработчиков в области авторского права и лицензирование. *
 * *
 * Если иное не оговорено в лицензионном соглашении на заказ, ни одна часть *
 * Надсеть программного обеспечения, в том числе и этот файл может быть скопирована, изменена, размножают *
 * Или распространяться только в соответствии с условиями, содержащимися в файле ЛИЦЕНЗИИ *
 * *
 * Удаление или модификация этого уведомления об авторском праве запрещено. *
 * *
 ************************************************** **************************** /

#включают
#включают
#включают
#включают

sha256_vstate структура {uint64_t длины; uint32_t состояния [8], curlen; uint8_t ЬиЕ [64]; };

объединение _bits256 {uint8_t байт [32]; uint16_t ushorts [16]; uint32_t uints [8]; uint64_t ulongs [4]; uint64_t TXID; };
ЬурейеЕ союз _bits256 bits256;

объединение _bits320 {uint8_t байт [40]; uint16_t ushorts [20]; uint32_t uints [10]; uint64_t ulongs [5]; uint64_t TXID; };
ЬурейеЕ союз _bits320 bits320;

// специальный НКУ режим для 128-битных целых чисел
ЬурейеЕ беззнаковое uint128_t __attribute __ ((режим (TI)));

// sha256 портирован из libtom, то curve25519 будет переработан donna_curve25519.c

#define STORE32L (х, у) \
{(У) [3] = (uint8_t) (((х)>>24)&255); (У) [2] = (uint8_t) (((х)>>16)&255); \
(У) [1] = (uint8_t) (((х)>>8)&255); (У) [0] = (uint8_t) ((х)&255); }

#define LOAD32L (х, у) \
\
((Uint32_t) ((у) [0] & 255)));

#define STORE64L (х, у) \
{(У) [7] = (uint8_t) (((х)>>56)&255); (У) [6] = (uint8_t) (((х)>>48)&255); \
(У) [5] = (uint8_t) (((х)>>40)&255); (У) [4] = (uint8_t) (((х)>>32)&255); \
(У) [3] = (uint8_t) (((х)>>24)&255); (У) [2] = (uint8_t) (((х)>>16)&255); \
(У) [1] = (uint8_t) (((х)>>8)&255); (У) [0] = (uint8_t) ((х)&255); }

#define LOAD64L (х, у) \
\
(((Uint64_t) ((у) [1] & 255))<<8)

#define STORE32H (х, у) \
{(У) [0] = (uint8_t) (((х)>>24)&255); (У) [1] = (uint8_t) (((х)>>16)&255); \
(У) [2] = (uint8_t) (((х)>>8)&255); (У) [3] = (uint8_t) ((х)&255); }

#define LOAD32H (х, у) \
\
((Uint32_t) ((у) [2] & 255)<<8)  

#define STORE64H (х, у) \
{(У) [0] = (uint8_t) (((х)>>56)&255); (У) [1] = (uint8_t) (((х)>>48)&255); \
(У) [2] = (uint8_t) (((х)>>40)&255); (У) [3] = (uint8_t) (((х)>>32)&255); \
(У) [4] = (uint8_t) (((х)>>24)&255); (У) [5] = (uint8_t) (((х)>>16)&255); \
(У) [6] = (uint8_t) (((х)>>8)&255); (У) [7] = (uint8_t) ((х)&255); }

#define LOAD64H (х, у) \
х = (((uint64_t) ((у) [0] & 255))<<56)

// Различные логические функции
#define RORC (х, у) (((((uint32_t) (х)&0xFFFFFFFFUL)>>(Uint32_t) ((у)&31)) | ((Uint32_t) (х)<<(Uint32_t) (32 - ((у)&31)))) & 0xFFFFFFFFUL)
#define Ch (х, у, г) (г ^ (х & (У ^ г)))
#define майор (х, у, г) (((х | у) & г) | (Икс & у))
#define S (х, п) RORC ((х), (п))
#define Р (х, п) (((х)&0xFFFFFFFFUL)>>(П))
#define Sigma0 (х) (S (х, 2) ^ S (х, 13) ^ S (X, 22))
#define Sigma1 (х) (С (х, 6) ^ S (X, 11) ^ S (X, 25))
#define Gamma0 (х) (S (х, 7) ^ S (х, 18) ^ Р (х, 3))
#define Gamma1 (х) (С (х, 17) ^ S (х, 19) ^ Р (х, 10))
#define MIN (х, у) (((х)<(У))? (Х) :( у))

int32_t sha256_vcompress (STRUCT sha256_vstate * мкр, uint8_t * ЬиЕ)
{
    uint32_t S [8], Вт [64], t0, t1, я;
    для (я = 0; я<8; я ++) // скопировать состояние в S
        S [I] = MD->состояние [I];
    для (я = 0; я<16; я ++) // скопировать состояние на 512 битов в W [0..15]
        LOAD32H (W [I], ЬиЕ + (4 * я));
    для (I = 16; я<64; я ++) // заполнить W [16..63]
        W [I] = Gamma1 (Ш [я - 2]) + W [I - 7] + Gamma0 (Ш [я - 15]) + W [I - 16];
    
#define RND (а, б, в, г, д, е, ж, з, и, ки) \
t0 = H + Sigma1 (е) + Ч. (д, е, ж) + ки + W [I]; \
t1 = Sigma0 (а) + Maj (а, б, в); \
D + = t0; \
ч = t0 + t1;
    
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 0,0x428a2f98);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 1,0x71374491);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 2,0xb5c0fbcf);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 3,0xe9b5dba5);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 4,0x3956c25b);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 5,0x59f111f1);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 6,0x923f82a4);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 7,0xab1c5ed5);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 8,0xd807aa98);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 9,0x12835b01);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 10,0x243185be);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 11,0x550c7dc3);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 12,0x72be5d74);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 13,0x80deb1fe);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 14,0x9bdc06a7);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 15,0xc19bf174);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 16,0xe49b69c1);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 17,0xefbe4786);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 18,0x0fc19dc6);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 19,0x240ca1cc);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 20,0x2de92c6f);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 21,0x4a7484aa);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 22,0x5cb0a9dc);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 23,0x76f988da);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 24,0x983e5152);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 25,0xa831c66d);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 26,0xb00327c8);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 27,0xbf597fc7);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 28,0xc6e00bf3);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 29,0xd5a79147);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 30,0x06ca6351);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 31,0x14292967);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 32,0x27b70a85);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 33,0x2e1b2138);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 34,0x4d2c6dfc);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 35,0x53380d13);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 36,0x650a7354);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 37,0x766a0abb);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 38,0x81c2c92e);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 39,0x92722c85);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 40,0xa2bfe8a1);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 41,0xa81a664b);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 42,0xc24b8b70);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 43,0xc76c51a3);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 44,0xd192e819);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 45,0xd6990624);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 46,0xf40e3585);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 47,0x106aa070);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 48,0x19a4c116);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 49,0x1e376c08);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 50,0x2748774c);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 51,0x34b0bcb5);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 52,0x391c0cb3);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 53,0x4ed8aa4a);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 54,0x5b9cca4f);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 55,0x682e6ff3);
    RND (S [0], S [1], S [2], S [3], S [4], S [5], S [6], S [7], 56,0x748f82ee);
    RND (S [7], S [0], S [1], S [2], S [3], S [4], S [5], S [6], 57,0x78a5636f);
    RND (S [6], S [7], S [0], S [1], S [2], S [3], S [4], S [5], 58,0x84c87814);
    RND (S [5], S [6], S [7], S [0], S [1], S [2], S [3], S [4], 59,0x8cc70208);
    RND (S [4], S [5], S [6], S [7], S [0], S [1], S [2], S [3], 60,0x90befffa);
    RND (S [3], S [4], S [5], S [6], S [7], S [0], S [1], S [2], 61,0xa4506ceb);
    RND (S [2], S [3], S [4], S [5], S [6], S [7], S [0], S [1], 62,0xbef9a3f7);
    RND (S [1], S [2], S [3], S [4], S [5], S [6], S [7], S [0], 63,0xc67178f2);
#undef RND
    для (я = 0; я<8; я ++) // обратная связь
        MD->состояние [I] = MD->состояние [I] + S [I];
    Возвращение (0);
}

#undef RORC
#undef Ch
#undef майор
#undef S
#undef R
#undef Sigma0
#undef Sigma1
#undef Gamma0
#undef Gamma1

недействительным sha256_vinit (структура sha256_vstate * мкр)
{
    MD->curlen = 0;
    MD->длина = 0;
    MD->состояние [0] = 0x6A09E667UL;
    MD->состояние [1] = 0xBB67AE85UL;
    MD->состояние [2] = 0x3C6EF372UL;
    MD->состояние [3] = 0xA54FF53AUL;
    MD->состояние [4] = 0x510E527FUL;
    MD->состояние [5] = 0x9B05688CUL;
    MD->состояние [6] = 0x1F83D9ABUL;
    MD->состояние [7] = 0x5BE0CD19UL;
}

int32_t sha256_vprocess (структура sha256_vstate * мкр, Const uint8_t * в, uint64_t inlen)
{
    uint64_t н; int32_t заблуждается;
    если (MD->curlen > SizeOf (MD->ЬиЕ))
        Возвращение (-1);
    в то время как (inlen > 0)
    {
        если (MD->curlen == 0 && inlen >= 64)
        {
            если ((ERR = sha256_vcompress (мкр (uint8_t *) в))! = 0)
                возвращать (ERR);
            MD->Длина + = 64 * 8, в + = 64, inlen - = 64;
        }
        еще
        {
            п = MIN (inlen, 64 - MD->curlen);
            тетср (MD->ЬиЕ + MD->curlen, в, (size_t) N);
            MD->curlen + = п, в + = п, inlen - = п;
            если (MD->curlen == 64)
            {
                если ((ERR = sha256_vcompress (мД, MD->ЬиЕ))! = 0)
                    возвращать (ERR);
                MD->Длина + = 8 * 64;
                MD->curlen = 0;
            }
        }
    }
    Возвращение (0);
}

int32_t sha256_vdone (структура sha256_vstate * мкр, uint8_t * вне)
{
    int32_t я;
    если (MD->curlen >= SizeOf (MD->ЬиЕ))
        Возвращение (-1);
    MD->Длина + = MD->curlen * 8; // увеличить длину сообщения
    MD->ЬиЕ [MD->curlen ++] = (uint8_t) 0x80; // добавить немного «1»
    // если Len > 56 байт мы добавляем нули затем сжать. Тогда мы можем упасть обратно заполнение нулей и кодирование длины, как нормальные.
    если (MD->curlen > 56)
    {
        в то время как (MD->curlen < 64)
            MD->ЬиЕ [MD->curlen ++] = (uint8_t) 0;
        sha256_vcompress (мкр, MD->ЬиЕ);
        MD->curlen = 0;
    }
    в то время как (MD->curlen < 56) // подушечка ДО 56 байт нулей
        MD->ЬиЕ [MD->curlen ++] = (uint8_t) 0;
    STORE64H (MD->длина, MD->ЬиЕ + 56); // длина магазин
    sha256_vcompress (мкр, MD->ЬиЕ);
    для (я = 0; я<8; я ++) // выводим копия
        STORE32H (MD->состояние [I], выход + (4 * я));
    Возвращение (0);
}

недействительным store_limb (uint8_t * вне, uint64_t в)
{
    int32_t я;
    для (я = 0; я<8; я ++, в>>= 8)
        из [I] = (в & 0xff);
}

uint64_t load_limb (uint8_t * в)

    (((Uint64_t) в [4]) << 32)

// Возьмите немного-Endian, номер 32-байтный и развернуть его в виде многочлена
bits320 fexpand (bits256 Basepoint)
{
    bits320 вне;
    out.ulongs [0] = load_limb (basepoint.bytes) & 0x7ffffffffffffLL;
    out.ulongs [1] = (load_limb (basepoint.bytes + 6) >> 3) & 0x7ffffffffffffLL;
    out.ulongs [2] = (load_limb (basepoint.bytes + 12) >> 6) & 0x7ffffffffffffLL;
    out.ulongs [3] = (load_limb (basepoint.bytes + 19) >> 1) & 0x7ffffffffffffLL;
    out.ulongs [4] = (load_limb (basepoint.bytes + 24) >> 12) & 0x7ffffffffffffLL;
    возврат (выход);
}

недействительный fcontract_iter (uint128_t т [5], int32_t флаг)
{
    int32_t я; uint64_t маска = 0x7ffffffffffffLL;
    для (я = 0; я<4; я ++)
        т [г + 1] = т [г] >> 51, т [I] &= Маска;
    если (флаг! = 0)
        т [0] + = 19 * (т [4] >> 51); т [4] &= Маска;
}

// Возьмите полностью уменьшенную полиномиальное номер формы и контракт его в прямой порядок байтов, 32-байтовый массив
bits256 fcontract (Const bits320 вход)

    uint128_t т [5]; int32_t я; bits256 вне;
    для (я = 0; я<5; я ++)
        T [I] = input.ulongs [I];
    fcontract_iter (т, 1), fcontract_iter (т, 1);
    // донна: в настоящее время т составляет от 0 до 2 ^ 255-1, правильно выполняется.
    // донна: случай 1: от 0 до 2 ^ 255-20. Случай 2: между 2 ^ 255-19 и 2 ^ 255-1.
    т [0] + = 19, fcontract_iter (т, 1);
    // теперь между 19 и 2 ^ 255-1 в обоих случаях, и смещение на 19.
    т [0] + = 0x8000000000000 - 19;
    для (я = 1; я<5; я ++)
        т [г] + = 0x8000000000000 - 1;
    // теперь между 2 ^ 255 и 2 ^ 256-20, а компенсировано 2 ^ 255.
    fcontract_iter (т, 0);
    store_limb (out.bytes, т [0]

// Умножить два числа: выход = in2 * в
// выход должен быть отличным для обоих входов. Входы снижается коэффициент формы, выход не является.
// Предполагается, что в [я] < 2 ** 55 и также для in2. По возвращению, выход [I] < 2 ** 52
bits320 FMUL (Const bits320 дюйм2, Const bits320 в)
{
    uint128_t т [5]; uint64_t R0, R1, R2, R3, R4, s0, s1, s2, s3, s4, с; bits320 вне;
    r0 = in.ulongs [0], R1 = in.ulongs [1], г2 = in.ulongs [2], г3 = in.ulongs [3], r4 = in.ulongs [4];
    s0 = in2.ulongs [0], s1 = in2.ulongs [1], с2 = in2.ulongs [2], s3 = in2.ulongs [3], s4 = in2.ulongs [4];
    т [0] = ((uint128_t) г0) * s0;
    т [1] = ((uint128_t) г0) * S1 + ((uint128_t) г1) * s0;
    T [2] = ((uint128_t) г0) * s2 + ((uint128_t) г2) * S0 + ((uint128_t) г1) * s1;
    т [3] = ((uint128_t) г0) * s3 + ((uint128_t) г3) * S0 + ((uint128_t) г1) * s2 + ((uint128_t) г2) * s1;
    т [4] = ((uint128_t) г0) * s4 + ((uint128_t) г4) * S0 + ((uint128_t) г3) * S1 + ((uint128_t) г1) * s3 + ((uint128_t) г2) * с2;
    r4 = 19, r 1 * = 19, r 2 * = 19, г3 * = 19;
    т [0] + = ((uint128_t) г4) * S1 + ((uint128_t) г1) * s4 + ((uint128_t) г2) * s3 + ((uint128_t) г3) * с2;
    т [1] + = ((uint128_t) г4) * s2 + ((uint128_t) г2) * s4 + ((uint128_t) г3) * s3;
    T [2] + = ((uint128_t) г4) * s3 + ((uint128_t) г3) * s4;
    т [3] + = ((uint128_t) г4) * s4;
    г0 = (uint64_t) т [0] & 0x7ffffffffffffLL; с = (uint64_t) (т [0] >> 51);
    т [1] + = с; R1 = (uint64_t) т [1] & 0x7ffffffffffffLL; с = (uint64_t) (т [1] >> 51);
    T [2] + = с; r 2 = (uint64_t) т [2] & 0x7ffffffffffffLL; с = (uint64_t) (т [2] >> 51);
    т [3] + = с; r3 = (uint64_t) т [3] & 0x7ffffffffffffLL; с = (uint64_t) (т [3] >> 51);
    т [4] + = с; r4 = (uint64_t) т [4] & 0x7ffffffffffffLL; с = (uint64_t) (т [4] >> 51);
    г0 + = с * 19; с = г0 >> 51; г0 = г0 & 0x7ffffffffffffLL;
    R1 + = с; с = r1 >> 51; r1 = r1 & 0x7ffffffffffffLL;
    R2 + = с;
    out.ulongs [0] = г0, out.ulongs [1] = r1, out.ulongs [2] = г2, out.ulongs [3] = г3, out.ulongs [4] = r4;
    возврат (выход);
}

ИНТ основной (интермедиат ARGC, Const символ * ARGV [])
{
    int32_t sblocksize, длина; uint8_t * ЬиЕ; bits320 прод; bits256 TMP, хэш;
    структура sha256_vstate мкр; FILE * Ф.П. * sblocks;
    если (ARGC < 2)
        Е ("Использование:% S файл данных [sblocksize] \ п", ARGV [0]);
    иначе если (ARGC > 3 && (Sblocksize = atoi (ARGV [2])) < 32)
        Е ("Использование:% S файл данных [sblocksize] # мин sblocksize 32 \ п", ARGV [0]);
    иначе, если ((Fp = Еореп (ARGV [1],"Р.Б.")) == 0)
        Е ("Использование:% S файл данные [sblocksize] # не может найти% s \ п", ARGV [0], ARGV [1]);
    еще
    {
        если ((sblocks = Еореп ("sblocks","термометру")) == 0)
        {
            Е ("Ошибка при создании sblocks выходного файла \ п");
            Выход (-1);
        }
        если (sblocksize == 0)
            sblocksize = 1024 * 1024;
        Е ("вычисления для sblocks% S \ N", ARGV [1]);
        MemSet (tmp.bytes, 0, SizeOf (TMP)), tmp.bytes [0] = 9;
        прод = fexpand (TMP); // начать с действительным элементом поля. может потребоваться использовать единичный элемент
        ЬиЕ = calloc (1, sblocksize);
        в то время как ((Len = (int32_t) Fread (BUF, 1, sblocksize, FP)) > 0)
        
            sha256_vinit (&мкр), sha256_vprocess (&мкр, ЬиЕ, sblocksize), sha256_vdone (&MD, hash.bytes);
            FWRITE (hash.bytes, 1, SizeOf (хэш), sblocks); // сохранить SHA256 из sblock
            hash.bytes [0] &= 0xf8, hash.bytes [31] &= 0x7F, hash.bytes [31]
        TMP = fcontract (прод);
        FWRITE (tmp.bytes, 1, SizeOf (TMP), sblocks); // это значение всех данных
        бесплатно (BUF);
        fclose (FP);
        fclose (sblocks);
        Возвращение (0);
    }
    Возвращение (-1);
}


Я не имел шанс проверить это, но все это делает это вычисление SHA256 хэш каждого sblock, отображение его на элемент поля и умножив его на общую сумму. Операции на местах работают на 320 размере бита, так что 256-битный хэш должны быть расширен, и по контракту.

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

Это полностью автономный портативный C так, чтобы сохранить файл, а затем GCC это сделать исполняемый файл. Выход является sblocks файл, который имеет соответствующий хэш для каждого sblock вместе с общим в конце.

Надеемся, что она работает для того, что вам нужно. Это просто быстрое доказательство концептуального кода, но если какое-либо бит изменяется в любом из sblocks, хэш изменится, который изменит комбинированный продукт. Совершая к sblock хэш, вы можете доказать, что вы штрафную коррумпированные данные, которые вы получили, пока поставщик данных также выполняет ту же программу, и подписывает его. Любое подмножество, которое поставляется может быть проверено независимо, чтобы соответствовать вашему размещенному набору sblock хэш.

Я думаю, что удовлетворяет вашим требованиям?

Джеймс

Постскриптум Если вероятность столкновения (около 1 в 2 ^ 120) слишком высок, то второй хэш может быть использована для создания двух элементов на sblock. Коэффициенты два различных хэш столкновений с теми же данными, исчезающе малы.
jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777

17 февраля 2016, 8:49:41 PM   # 16
 
 
Сообщения: 420
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Разве это не простое решение, чтобы включить подпись всего документа с каждым блоком вы вперед. Если требования о подписчиках он предоставил другой текст, ему нужно будет предъявить документ, который соответствует хэш, что он подписал, но он не может сделать это, а также ложь.

Есть, как правило, более простые решения. Подумать только из коробки и парадигмы перекладывать проблему.
TPTB_need_war сейчас офлайн Пожаловаться на TPTB_need_war   Ответить с цитированием Мультицитирование сообщения от TPTB_need_war Быстрый ответ на сообщение TPTB_need_war

17 февраля 2016, 9:02:57 PM   # 17
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Разве это не простое решение, чтобы включить подпись всего документа с каждым блоком вы вперед. Если требования о подписчиках он предоставил другой текст, ему нужно будет предъявить документ, который соответствует хэш, что он подписал, но он не может сделать это, а также ложь.

Есть, как правило, более простые решения. Подумать только из коробки и парадигмы перекладывать проблему.
Я думаю, что проблема в том, что отправитель данных может быть антагонистическими и не сотрудничать и возлагать бремя на посредника, но это хорошая идея, чтобы включить подпись в хэш каждого sblock.

Я думаю, что только с помощью поля умножения N различных хэш для каждого sblock позволит достичь любого уровня доверия о столкновениях, за счет большего пространства для этого, хотя. Использование curve25519 поля умножения очень быстро. Вероятно, будет делать больше, чем миллион в секунду на одном ядре. Ограничение, вероятно, будет HDD скорость загрузки данных или SHA256 Calcs

Джеймс

Постскриптум Не уверен, что он может получить гораздо проще, чем 300 строк кода C ...
jl777 сейчас офлайн Пожаловаться на jl777   Ответить с цитированием Мультицитирование сообщения от jl777 Быстрый ответ на сообщение jl777

17 февраля 2016, 9:08:40 PM   # 18
 
 
Сообщения: 420
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Хорошо, тогда jl777. Другой способ сделать это, это есть возбудитель знак хэш, который является корнем дерева Меркель. Затем вы можете разбить документ на слова или даже отдельные символы, если вы хотите. И вы можете отправить любые части документа и доказать, составитель подписал их.
TPTB_need_war сейчас офлайн Пожаловаться на TPTB_need_war   Ответить с цитированием Мультицитирование сообщения от TPTB_need_war Быстрый ответ на сообщение TPTB_need_war

17 февраля 2016, 9:20:24 PM   # 19
 
 
Сообщения: 1162
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

Хорошо, тогда jl777. Другой способ сделать это, это есть возбудитель знак хэш, который является корнем дерева Меркель. Затем вы можете разбить документ на слова или даже отдельные символы, если вы хотите. И вы можете отправить любые части документа и доказать, составитель подписал их.
Merkle дерево добавляет сложность, не так много, но по сравнению с 300 линиями, измеримыми. В 300 строк включает SHA256 и поле умножения.

но с Merkle дерева не уверен, если он удовлетворяет требованиям этой проблемы. Возбудитель можно считать некооперативными и только один со всем набором данных. Если данные приставал я думаю, что мы должны были бы определить, было ли это посредник или конечный получатель, который изменил данные.

Как посредник, который оленья кожа есть данные использовать Merkle дерево, чтобы убедиться, что конечный получатель имеет право sblock? Поскольку Merkle дерево только проверяет, что все листы правильны, то кажется все мы находим, что данные были повреждены, но не тот, кто повредил. Может быть, достаточно, если все стороны, подписавшие протокол, когда sblocks поставляются.

во всяком случае, интересная проблема. нужна обратная связь с OP ли соблюдены требования. Перерыв на обед закончился, вернуться к отладке я иду

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

17 февраля 2016, 9:27:09 PM   # 20
 
 
Сообщения: 420
Цитировать по имени
цитировать ответ
по умолчанию Re: Non-Bitcoin криптография вопрос

jl777, если отправитель подписал корневой хэш дерева Merkel, когда он представил его посреднику, то посредник может доказать, что какой-либо фрагмент (ы) документа был подписан отправителем. Возбудитель является тот, кто разбивает документ на слова или символы на листьях. Дерево Меркель является очень эффективной структурой пространства целесообразно, если зернистость очень высока.

Я полагаю, ваш детерминированного отображение каждого хэш на элемент поля и умножив все вместе (и отправитель подписывает продукт) больше места эффективным, но я думаю, что примерно на порядок величины равна медленнее. Почему бы не добавить вместо умножения, так как добавление гораздо быстрее (один предполагает хэши трудно прообраза)?

Исправление: дерево Меркель также является более эффективным пространством (так же как быть быстрее), поскольку посредник не определяет хэш для всех листьев при написании доказательства.
TPTB_need_war сейчас офлайн Пожаловаться на TPTB_need_war   Ответить с цитированием Мультицитирование сообщения от TPTB_need_war Быстрый ответ на сообщение TPTB_need_war



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW