Могу ли я сделать «секретный» приглашение только Smart Contract?

У меня есть публичный смарт-контракт, где я могу сделать секрет и хеш его в рамках контракта. Затем я разделяю «секрет» с номером N моих друзей и с тайной они могут создать новый хеш (секретный + закрытый ключ), чтобы доказать, что они на самом деле знают секрет и имеют доступ к отправке средств.

Контракт будет знать только секретный внутренний хэш + новый отправленный хэш + открытый ключ msg.sender. Достаточно ли этого, чтобы доказать контракт, что msg.sender знает секрет и разрешен доступ к контрактным функциям?

Разве это не может быть сделано? Это звучит как алгоритм доказательства нулевого знания, но я не специалист в области криптографии, поэтому не уверен, что это жизнеспособное решение.

5 голосов | спросил demolina 27 FebruaryEurope/MoscowbTue, 27 Feb 2018 22:38:59 +0300000000pmTue, 27 Feb 2018 22:38:59 +030018 2018, 22:38:59

1 ответ


4

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

ответил flygoing 28 FebruaryEurope/MoscowbWed, 28 Feb 2018 00:04:33 +0300000000amWed, 28 Feb 2018 00:04:33 +030018 2018, 00:04:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132