Autenticación

Introducción
Esta guía explica cómo se realiza la autenticación en la blockchain de Stacks.
La autenticación proporciona una forma para que los usuarios se identifiquen ante una aplicación manteniendo el control total sobre sus credenciales y datos personales.
Los usuarios que se registran en tu aplicación pueden posteriormente autenticarse en cualquier otra aplicación que admita el Sistema de Nombres de Bitcoin y viceversa.
Autenticación Web2 vs Web3
Si vienes del mundo web2, probablemente estés acostumbrado a autenticarte con nombres de usuario y contraseñas, donde la información del usuario se almacena en una base de datos. Al introducir la contraseña, esta se hashea y se compara con el hash almacenado en la base de datos y, si coincide, el usuario inicia sesión.
La autenticación web3 funciona un poco diferente. Una de las filosofías centrales de web3 es la propiedad de los datos, lo que significa que los usuarios controlan sus datos, incluida su autenticación.
La autenticación en el mundo de Bitcoin y Stacks utiliza criptografía para generar claves privadas, claves públicas y direcciones.
Repasaremos los conceptos básicos aquí, pero si quieres profundizar, Learn Me a Bitcoin es un gran lugar para comenzar.
Para generar una cuenta de Stacks, generamos una clave privada a partir de una frase mnemónica de 24 palabras, como se discutió en la sección anterior. Esta clave privada se utiliza luego para generar una clave pública mediante una función hash unidireccional. Esto significa que puedes derivar una clave pública a partir de una clave privada, pero no al revés.
La clave privada de un usuario es su principal fuente de seguridad y se utiliza para autenticarlo. No pierdas tu clave privada.
Entonces, cuando uso una aplicación de billetera como Leather y quiero usarla para autenticarme con una dapp como StackingDAO, lo que estoy haciendo es dar a mi billetera mi clave privada, demostrando que soy dueño de la dirección correspondiente.
La billetera entonces pasará esa información (mi dirección y clave pública) a la aplicación junto con una firma.
Una firma puede considerarse como la prueba de que poseo la clave privada sin revelar realmente la clave privada. Ese mecanismo es cómo puedo usar la misma billetera y dirección para iniciar sesión en cualquier aplicación que admita la autenticación de Stacks.
Third Web tiene un gran manual conceptual sobre la autenticación web3.
Para una introducción más práctica, echa un vistazo al tutorial de inicio rápido y la documentación de Stacks.js de Hiro.
Cómo funciona
El flujo de autenticación con Stacks es similar al flujo típico cliente-servidor utilizado por servicios centralizados de inicio de sesión (por ejemplo, OAuth). Sin embargo, con Stacks el flujo de autenticación ocurre completamente del lado del cliente.
Una aplicación y un autenticador, como la billetera Leather, se comunican durante el flujo de autenticación intercambiando dos tokens. La aplicación solicitante envía al autenticador un token authRequest . Una vez que un usuario aprueba la autenticación, el autenticador responde a la aplicación con un token authResponse .
Estos tokens se basan en un estándar JSON Web Token (JWT) con soporte adicional para la secp256k1 curva utilizada por Bitcoin y muchas otras criptomonedas. Se pasan a través de cadenas de consulta en la URL.
Cuando un usuario elige autenticar una aplicación, esta envía el token authRequest token al autenticador mediante una cadena de consulta en la URL con un parámetro del mismo nombre:
https://wallet.hiro.so/...?authRequest=j902120cn829n1jnvoa...
Cuando el autenticador recibe la solicitud, genera un token authResponse token para la aplicación usando una clave de tránsito efímera. La clave de tránsito efímera se usa solo para la instancia particular de la aplicación, en este caso, para firmar el token authRequest.
La aplicación almacena la clave de tránsito efímera durante la generación de la solicitud. La porción pública de la clave de tránsito se pasa en el token authRequest token. El autenticador utiliza la porción pública de la clave para cifrar una clave privada de la aplicación que se devuelve a través del token authResponse.
El autenticador genera la clave privada de la aplicación a partir de la clave privada de la dirección de identidad del usuario y del dominio de la aplicación. La clave privada de la aplicación cumple tres funciones:
Se utiliza para crear credenciales que le dan a la aplicación acceso a un contenedor de almacenamiento en el hub Gaia del usuario
Esto permite que la aplicación acceda al almacenamiento específico de la aplicación en el hub Gaia del usuario.
Se utiliza en el cifrado de extremo a extremo de los archivos almacenados para la aplicación en el almacenamiento Gaia del usuario
Esta clave se utiliza para cifrar archivos de modo que solo la aplicación (con la clave derivada) pueda descifrarlos.
Sirve como un secreto criptográfico que las aplicaciones pueden usar para realizar otras funciones criptográficas
Las aplicaciones pueden usar este secreto determinista para operaciones criptográficas adicionales vinculadas a la identidad y el dominio del usuario.
Finalmente, la clave privada de la aplicación es determinista, lo que significa que siempre se generará la misma clave privada para una dirección de Stacks y un dominio determinados.
Pares de claves
La autenticación con Stacks hace un uso extensivo de la criptografía de clave pública en general y de ECDSA con la secp256k1 curva en particular.
Las secciones siguientes describen los tres pares de claves pública-privada utilizados, incluyendo cómo se generan, dónde se utilizan y a quién se revelan las claves privadas.
Clave privada de tránsito
La clave privada de tránsito es una clave efímera que se utiliza para cifrar secretos que deben ser transferidos desde el autenticador a la aplicación durante el proceso de autenticación. Es generada aleatoriamente por la aplicación al inicio de la respuesta de autenticación.
La clave pública que corresponde a la clave privada de tránsito se almacena en un arreglo de un solo elemento en la clave public_keys del token de solicitud de autenticación. El autenticador cifra datos secretos como la clave privada de la aplicación usando esta clave pública y los envía de vuelta a la aplicación cuando el usuario inicia sesión en la aplicación. La clave privada de tránsito firma la solicitud de autenticación de la aplicación.
Clave privada de la dirección de identidad
La clave privada de la dirección de identidad se deriva de la frase de la cadena de claves del usuario y es la clave privada del nombre de usuario de Stacks que el usuario elige usar para iniciar sesión en la aplicación. Es un secreto propiedad del usuario y nunca abandona la instancia del autenticador del usuario.
Esta clave privada firma el token de respuesta de autenticación para que una aplicación indique que el usuario aprueba el inicio de sesión en esa aplicación.
Clave privada de la aplicación
La clave privada de la aplicación es una clave privada específica de la aplicación que se genera a partir de la clave privada de la dirección de identidad del usuario usando el domain_name como entrada.
La clave privada de la aplicación se comparte de forma segura con la aplicación en cada autenticación, cifrada por el autenticador con la clave pública de tránsito. Debido a que la clave de tránsito solo se almacena del lado del cliente, esto evita un ataque de intermediario donde un servidor o proveedor de Internet podría potencialmente husmear la clave privada de la aplicación.
Última actualización
¿Te fue útil?