Для того, чтобы обеспечить выход от злоупотребления один может требовать, чтобы "предварительно хэш" включается, когда транзакция передается или когда блок опубликован. Для Bitcoin в ScriptHash = ripemd160 (SHA256 (сценарий)). Таким образом, хэш ripemd160 бы в выходных данных и передающий узел будет также включать prehash (выход функции SHA256) с транзакцией. Вершины бы взять SHA256 "prehash" хэш его и убедитесь, что он соответствует выходу, чтобы подтвердить выход имеет допустимый хэш. После того, как TXN был достаточно глубоко в blockchain, чтобы повторно Orgs маловероятно, узлы сети могут отказаться от prehash.
Когда кто-то изобретает independantly ту же самую идею, вы знаете, что это должно быть, по крайней мере, несколько хорошо. (Ну, а на самом деле, может быть, нет.)
Я назвал это P2SH ^ 2:
http://sourceforge.net/p/bitcoin/mailman/message/30705609/Любые другие идеи?
Да, у меня есть более мощная схема, которая не _ever_ распространять прообраз, он идет следующим образом:
Сначала некоторые супер неаккуратно фон так остальное имеет смысл для людей, которые не знают, что (вы можете пропустить, если вы знакомы с спаривание крипто):
Сигнатура BLS простая схема подписи для спаривания криптографии, которая использует группы, где вычислительные дискретная журнал, как полагают неразрешимыми, но дискретная задача принятия решения журнала сговорчивым. подписи BLS имеют важное свойство, что подпись является _unique_ для данного Публичного, сообщения кортежа есть только одна подписи возможно. Сопряжение крипто работает как ECC, но у вас есть дополнительные операции сопряжения (точка, точка), который может быть использован для решения дискретной задачи принятия решения журнала.
Конструкция подписи BLS является,
G представляет собой генератор группы, я пишу это аддитивно здесь.
Н (у), который преобразует г до точки на кривой таким образом, что дискретный журнал не известно. (Например, это какое-то прямое бито принуждение не у * G)
Секретный ключ: х
Публичных: XG
знак: сиг = х (сообщение)
проверить: спаривание (Н (сообщение), Публичный) == спаривание (сиг, г)
Проверка в основном отвечая на вопрос "Является ли сиг значения ECDH для пары точек Публичных и H (сообщение)",
Вот как вы можете использовать это, чтобы подавить канал новообращенного:
H2 = sha256 или то, что у вас, случайное столкновение стойкого хэша.
Секретный ключ: х == данные, которые вы хотите кодировать
Публичных: XG == предполагающие данных имеет размер порядка группы это один из способов вычислимая биекция, если данные, которые вы хотели закодировать был безопасный хэш, так это Публичных.
Доказательство: Доказательство = х (Н2 (Публичный))
Доказательство теперь показывает, что Публичная точку вы знаете, дискретный логарифм, твердость дискретного журнала в группе показывает, вы не можете выбрать некоторые данные вложения Публичной как вы не знаете, дискретный журнал.
Вы передать {Публичных, доказательство}
Вы не можете сделать этот трюк с использованием регулярных подписей ECDSA / Шноррой, насколько я могу сказать, потому что неоднозначность позволяет использовать знание нонса как люк.
Это уменьшает ваш скрытый канал только маленькие кусочки, которые вы можете себе позволить, чтобы размолоть в него с догадкой и проверкой. Если значения уже должно соответствовать некоторым вычислительным критериям (например, вы всегда должны измельчить), то любое дополнительное измельчение является умножением на что, так и с линейной стоимостью для честных пользователей, что экспоненциальный канал затрат может быть выполнен в виде вычислительно дорого, как вам нравится.
Лучше: полный провал криптосистемы только вновь вводит скрытый-канал, он не ставит под угрозу безопасности вашего P2SH.
Даунсайд: Доказательство добавляет другую группу-элемент (например, 32 байт для 256-битное шифрование) количество размера данных, а также проверки принимает порядка 1 мс. Хеширование (требуется при тратить время) требует точка скалярного умножения, который также медленнее, чем в классической хэш-функции (хотя намного лучше, чем с половиной мс).
Может быть, можно построить что-то подобное с подписями RSA; но я не пробовал, и стоимость детерминировано генерации секретного ключа (хэширования ваше сообщение) может быть проблематичным ... и, очевидно, размер будет непривлекательным. Я думаю, что в принципе то же самое можно сделать с любой уникальной схемой подписи, где подпись не просачивается никакой информации о секретном ключе (например, не работает с Лампортом подписью, хотя они тривиальные уникальны).
Я уверен, что это невозможно.
Невозможное представлены. Я рад быть полезным.
Таким образом, вы будете придерживаться данных без транзакций там, как "prehash",
Да, но вы можете проверить это prehash только для блоков на кончике, а не истории. и забыть об этом. Так что я думаю, что соответствует по крайней мере, некоторым определениям "из blockchain", (Хотя, как я только что продемонстрировал даже, что слабость может быть закрыта.)
Все, что здесь работает лучше с несколько узким определением "из blockchain", Даже с выходами фиксированных подписи еще в конечном итоге с скрытым каналом (хоть что-то с очень ограниченной функциональностью может также сделать его сколь угодно узким, снова используя уникальные подписи), но большая часть своей мысли в этом пространстве было сосредоточены вокруг устранения высокой пропускной способности скрытых каналов для данные, что все участники сильно вынуждены системой для хранения.
Есть и другие вещи, которые можно сделать здесь. Utxo, грубо, TXID: Vout -> {ScriptPubkey, значение}. Вы могли бы вместо того, чтобы хранить H1 (TXID: Vout) -> Enc (H2 (TXID: Vout), {scriptPubkey, значение}) локально не ослепить себя эти данные до самого момента это необходимо (когда блок обнаруживается, что на самом деле тратит на выходе).