Autenticación

Introducción

Esta guía explica cómo se realiza la autenticación en la cadena de bloques Stacks.

La autenticación proporciona una forma para que los usuarios se identifiquen ante una aplicación mientras mantienen 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 con soporte para el Sistema de Nombres de Bitcoin y viceversa.

chevron-rightDiferencias entre la autenticación web2 y web3hashtag

Web2 normalmente autentica a los usuarios con nombres de usuario y contraseñas, almacenando versiones hash de las contraseñas en una base de datos. En contraste, Web3 se centra en la propiedad de los datos, dando a los usuarios control sobre su información, incluida la autenticación. En Bitcoin y Stacks, la criptografía genera claves privadas, claves públicas y direcciones. Una cuenta de Stacks usa una clave privada derivada de una frase mnemotécnica de 24 palabras. Esta clave ayuda a generar una clave pública, pero la clave privada sigue siendo el factor principal de seguridad y debe protegerse. En aplicaciones como StackingDAO, una aplicación de billetera autentica a los usuarios enviando su dirección, clave pública y una firma para verificar la propiedad de la clave privada sin exponerla. Este proceso permite iniciar sesión en aplicaciones que soportan la autenticación de Stacks usando la misma billetera y dirección.

Cómo funciona

El flujo de autenticación con Stacks es similar al flujo típico cliente-servidor utilizado por servicios de inicio de sesión centralizados (por ejemplo, OAuth). Sin embargo, con Stacks el flujo de autenticación ocurre completamente del lado del cliente.

circle-info

Esta explicación está aquí para que puedas entender cómo funciona este proceso, pero la mayor parte de esta funcionalidad la maneja la billetera y la biblioteca JS que uses.

Una aplicación y un autenticador, como el billetera Leatherarrow-up-right, se comunican durante el flujo de autenticación intercambiando dos tokens. La aplicación solicitante envía al autenticador un authRequest token. Una vez que un usuario aprueba la autenticación, el autenticador responde a la aplicación con un authResponse token.

Estos tokens se basan en un estándar JSON Web Token (JWT) con soporte adicional para la secp256k1 curva usada por Bitcoin y muchas otras criptomonedas. Se transmiten a través de cadenas de consulta URL.

Cuando un usuario elige autenticar una aplicación, esta envía el authRequest token al autenticador mediante una cadena de consulta URL con un parámetro de mismo nombre.

Cuando el autenticador recibe la solicitud, genera un authResponse token para la aplicación usando una clave de tránsito efímera. La clave de tránsito efímera se utiliza solo para la instancia particular de la aplicación, en este caso, para firmar el 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 authRequest token. El autenticador usa la porción pública de la clave para cifrar una clave privada de la aplicación que se devuelve mediante el 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:

1

Se utiliza para crear credenciales que 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 del usuario en su hub Gaia.

2

Se usa en el cifrado de extremo a extremo de 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.

3

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 al 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 dados.

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 usan y a quién se divulgan las claves privadas.

Clave privada de tránsito

La clave privada de tránsito es una clave efímera que se usa para cifrar secretos que deben ser transmitidos desde el autenticador a la aplicación durante el proceso de autenticación. Es generada aleatoriamente por la aplicación al comienzo 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 public_keys clave 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 la 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 pudiera potencialmente espiar la clave privada de la aplicación.

Última actualización

¿Te fue útil?