Quiero crear un sitio web donde mis usuarios puedan registrarse e iniciar sesión, pero sin usar ningún tipo de base de datos. Quiero usar clave pública/privada. Tomemos https://www.myetherwallet.com/ . Dice que no almacena claves para mí. Entonces, ¿dónde están? cuando quiero iniciar sesión en ese sitio web y escribir la clave privada, ¿cómo me hace iniciar sesión?
La pregunta principal es: ¿Cómo hago el mismo principio usando php y el sitio web que tiene myetherwallet.com en este momento?
Ni MyEtherWallet ni MyCrypto almacenan sus billeteras en ningún lugar. Usted es dueño de sus billeteras. Cada vez que accede a su billetera a través de cualquiera de los servicios, se hace localmente, en su navegador. ¡Incluso puede acceder a sus billeteras sin conexión , sin tener una conexión a Internet!
Su clave privada, archivo de almacén de claves o billetera de hardware derivan su clave pública, que deriva su dirección. MyEtherWallet o MyCrypto nunca tocan sus fondos, la lógica para acceder a su billetera está en la interfaz local. La única vez que cualquiera de los servicios entra en juego es cuando desea recuperar el saldo de la cuenta o enviar una transacción firmada (¡firmada localmente!). Ambas acciones se pueden realizar sin usar MyEtherWallet o MyCrypto, por ejemplo, ejecutando su propio nodo o usando Etherscan .
hola :)
No estoy completamente seguro de php, pero hice el mismo escenario en Node.js:
Debe descargar la biblioteca web3 ( https://www.npmjs.com/package/web3 ) [echar un vistazo]. Cuando lo importe con éxito, podría comenzar a experimentar, ¡y mi cálida recomendación es comenzar y confiar en la documentación! :)
https://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html#create
Cuando cree las claves, se le devolverán (en forma de devolución de llamada), por lo que luego debe decidir qué hacer con ellas.
La respuesta a su pregunta principal es: es imposible sin algún tipo de 'base de datos' (incluso si es solo un archivo en el disco duro o algo así), porque necesita verificar que existe la clave privada dada para permitir que el usuario ingrese.
Última recomendación: cuando se da cuenta de que es imposible pasar sin algún tipo de base de datos, al menos piense en las preocupaciones de seguridad.
Espero haber ayudado, al menos un poco.
¡Mis mejores deseos! :)
Te respondería en un comentario, pero es demasiado largo (lo siento de antemano).
Bueno, se comunican todo el tiempo con el nodo Ethereum (usted podría hacer lo mismo a través de la biblioteca 'web3' antes mencionada. En primer lugar, crean una billetera para usted (llaman al nodo ethereum a través de web3 y esperan una respuesta), luego devuelven la clave privada y UCT para usted. Luego, si decide 'iniciar sesión' en su sitio web, solo envían la información que les proporcionó para comunicarse con el nodo ethereum y obtener información sobre su cuenta, que luego se le presenta (es exactamente lo mismo como ha iniciado sesión/autenticado, excepto que no guardan esa información en su base de datos, solo se comunican con el nodo de un lado a otro)
En el caso de Etheruem Wallet, la clave privada se cifra con una frase de contraseña y se almacena localmente en un archivo de almacén de claves sin extensión (formato JSON, pero sin extensión) con algunos datos adicionales.
La clave pública se genera a partir de la clave privada y luego se cifra en un archivo json (almacén de claves) con su frase de contraseña y algo llamado sal, que es un valor generado aleatoriamente.
La clave pública puede derivarse de la clave privada, pero no es posible lo contrario. No se puede derivar la clave privada de la clave pública. La frase de contraseña se utiliza para cifrar la clave privada. Entonces, con la ayuda de la frase de contraseña, se puede derivar la clave privada y con la ayuda de la clave privada se puede derivar la clave pública. Frase de contraseña -> Clave privada -> Clave pública
Esta es una característica inherente del algoritmo criptográfico asimétrico.
Según una respuesta aceptada de esta pregunta, ethereum utiliza el algoritmo de firma digital de curva elíptica para generar el par de claves. Tendrás que implementar lo mismo en PHP.
Richard Horrocks