Я хочу создать веб-сайт, на котором мои пользователи могут регистрироваться и входить в систему, но не использовать какую-либо базу данных. Я хочу использовать открытый/закрытый ключ. Возьмем https://www.myetherwallet.com/ . Он говорит, что он не хранит ключи для меня. так где они? когда я хочу войти на этот веб-сайт и ввести закрытый ключ, как это вообще заставляет меня войти в систему?
Главный вопрос: как мне сделать тот же принцип, используя php и веб-сайт, который сейчас есть на myetherwallet.com?
Ни MyEtherWallet, ни MyCrypto не хранят ваши кошельки нигде. Вы владеете своими кошельками. Каждый раз, когда вы получаете доступ к своему кошельку через любой сервис, это делается локально, в вашем браузере. Вы даже можете получить доступ к своим кошелькам в автономном режиме , без подключения к Интернету!
Ваш закрытый ключ, файл хранилища ключей или аппаратный кошелек получают ваш открытый ключ, который определяет ваш адрес. MyEtherWallet или MyCrypto никогда не касаются ваших средств, вся логика доступа к вашему кошельку находится в локальном интерфейсе. Единственный раз, когда любая из этих служб вступает в игру, — это когда вы хотите получить баланс учетной записи или отправить подписанную (локально подписанную!) транзакцию. Оба этих действия можно выполнить без использования MyEtherWallet или MyCrypto, например, запустив собственный узел или используя Etherscan .
Алоха :)
Я не совсем уверен в php, но я сделал тот же сценарий в Node.js:
Вы должны загрузить библиотеку web3 ( https://www.npmjs.com/package/web3 ) [взгляните]. Когда вы успешно импортируете его, вы можете начать экспериментировать, и я настоятельно рекомендую начать с документации и полагаться на нее! :)
https://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html#create
Когда вы создадите ключи, они будут возвращены вам (в форме обратного вызова), поэтому впоследствии вы должны решить, что с ними делать.
Ответ на ваш главный вопрос: это невозможно без какой-либо «базы данных» (даже если это просто файл на жестком диске или что-то в этом роде), потому что вам нужно убедиться, что данный закрытый ключ существует, чтобы впустить пользователя.
Последняя рекомендация: когда вы понимаете, что невозможно обойтись без какой-либо базы данных, подумайте хотя бы о проблемах безопасности.
Надеюсь, я помог, хоть немного.
Всего наилучшего! :)
Я бы ответил вам в комментарии, но это слишком долго (извините заранее).
Ну, они все время общаются с узлом Ethereum (вы можете сделать то же самое через вышеупомянутую библиотеку «web3». Сначала они создают для вас кошелек (они вызывают узел ethereum через web3 и ждут ответа), после этого они возвращают закрытый ключ и Вам файл UCT.После этого, если вы решите «войти» на их веб-сайт, они просто отправят информацию, которую вы им предоставили, для связи с узлом ethereum и получите информацию о вашей учетной записи, которая впоследствии будет представлена вам (это точно так же как вы вошли в систему/аутентифицированы, за исключением того, что они не сохраняют эту информацию в своей базе данных, просто обмениваются данными с узлом туда и обратно)
В случае Etheruem Wallet закрытый ключ шифруется парольной фразой и хранится локально в файле хранилища ключей без расширения (формат JSON, но без расширения) с некоторыми дополнительными данными.
Открытый ключ генерируется из закрытого ключа, а затем зашифровывается в файл json (хранилище ключей) с вашей парольной фразой и чем-то, что называется солью, которая является случайно сгенерированным значением.
Открытый ключ может быть получен из закрытого ключа, но обратное невозможно. Нельзя получить закрытый ключ из открытого ключа. Парольная фраза используется для шифрования закрытого ключа. Таким образом, с помощью парольной фразы можно получить закрытый ключ, а с помощью закрытого ключа можно получить открытый ключ. Парольная фраза -> Закрытый ключ -> Открытый ключ
Это неотъемлемая особенность асимметричного криптографического алгоритма.
Согласно принятому ответу на этот вопрос, эфириум использует алгоритм цифровой подписи на эллиптических кривых для генерации пары ключей. Вам нужно будет реализовать то же самое в PHP.
Ричард Хоррокс