Могу ли я сделать «секретный» приглашение только Smart Contract?
У меня есть публичный смарт-контракт, где я могу сделать секрет и хеш его в рамках контракта. Затем я разделяю «секрет» с номером N моих друзей и с тайной они могут создать новый хеш (секретный + закрытый ключ), чтобы доказать, что они на самом деле знают секрет и имеют доступ к отправке средств.
Контракт будет знать только секретный внутренний хэш + новый отправленный хэш + открытый ключ msg.sender. Достаточно ли этого, чтобы доказать контракт, что msg.sender знает секрет и разрешен доступ к контрактным функциям?
Разве это не может быть сделано? Это звучит как алгоритм доказательства нулевого знания, но я не специалист в области криптографии, поэтому не уверен, что это жизнеспособное решение.
1 ответ
Так как ничто, хранящееся в контракте, фактически не является приватным (любой узел может получить доступ к хранилищу, даже «частные» переменные фактически не являются приватными), это совсем не безопасно. Безопасный способ сделать это - просто сгенерировать закрытый ключ как «секрет» и дать это своим друзьям. Затем вы создадите адрес для закрытого ключа и сохраните его в контракте, указав, что он аутентифицирован. Вы и ваши друзья можете подписывать сообщения с помощью этого закрытого ключа и отправлять их в контракт, а контракт может подтвердить, что сообщение было подписано с закрытым ключом, относящимся к адресу, который он знает.