El mayor obstáculo para migrar muchos servicios online, es la capacidad de asegurar los datos y verificar la identidad de los usuarios del mismo. Actualmente, la autenticación online se basa en una contraseña y en raras ocasiones el uso de autenticación de doble factor. El problema con estos métodos es que las contraseñas son notoriamente inseguras y la autenticación de doble factor generalmente se basa en el envío de un código a través de SMS o un servicio tercero. Una solución a este problema podría ser la cadena blockchain, ya que los mismos principios criptográficos podrían aplicarse a la autenticación.
Al distribuir un ledger entre todos los miembros de la red, la autenticación blockchain erradica el poder modificar maliciosamente el ledger. Cada vez que se agrega una "transacción" o bloque de datos a la cadena, la mayoría de la red debe verificar su validez, lo que garantiza su integridad.
Podríamos entonces utilizar un cifrado de clave pública, como el cifrado RSA para enviar credenciales de forma segura y el destinatario podría verificar el envío contra una entrada en la cadena blockchain inmutable, resultando una forma increíblemente segura y confiable para la verificación de identidad.
¿Por qué nuestra actual identidad es insegura?
Las credenciales de correo electrónico y las contraseña son fáciles de romper, como pudimos ver en la última violación de Yahoo con 500 millones de cuentas. Si tenemos que presentar el DNI cuando pagamos con tarjeta, existe el riesgo de dar a alguien más información de la que necesita. Si pagamos en un restaurante, el mismo sólo necesita saber que usted es quien dice que es y su fecha de nacimiento, pero también estamos proporciona la dirección, la altura, el peso, el color del pelo y el color de los ojos, información que puede ser crucial para robar identidad.
La solución ideal sería una forma de autenticación que sólo otorgue acceso a cierta información y eliminando la necesidad de que cada proveedor de servicios almacene credenciales para cada cliente. Blockchain puede ofrecer este enfoque mediante la descentralización de la propiedad de las credenciales y disponibilidad en una cadena inmutable de datos, como vimos en el post Blockchain identity management. Estos datos, en lugar de ser almacenados por una aplicación, se almacenan en un "libro compartido". Este ledger compartido es descargado por cada usuario individual, reflejando un registro de cada transacción realizada.
¿Por qué blockchain es seguro?
La cadena de bloques se basa en tres grandes pilares ( consenso, distribución y sin confianza ) y la seguridad se deriva de una prueba del trabajo de resolución de problemas. Donde es necesario tomar una gran cantidad de potencia computacional para completarlos y por lo tanto, donde a una sola persona puede tomarle años, pero para una red de computadoras puede tomar tan sólo unos minutos. Las pruebas de trabajo que están vinculadas a los datos de cada bloque son necesarias para que los bloques sean aceptados. La dificultad de este trabajo se ajusta para limitar la velocidad a la que nuevos bloques pueden ser generados por la red a una media de uno cada 10 minutos.
Así, la cadena puede continuamente agregarse y las transacciones se procesan de manera oportuna mientras se protegen los datos de la manipulación indebida, por los que la naturaleza de este problema hace matemáticamente imposible que alguien cambie la cadena de bloqueo.
Cambiar un bloque (que sólo puede hacerse haciendo un nuevo bloque que contenga el mismo predecesor) requiere regenerar a todos los sucesores y rehacer el trabajo que contienen".
Esto se podría hacer teóricamente con suficiente tiempo, pero el libro público mencionado anteriormente es elegido por consenso, donde la red de usuarios está de acuerdo en que la cadena bloqueada más larga sea la cadena reconocida. Esto constituye el primer pilar de la cadena de bloques. Al acordar la cadena de bloques más larga, la única forma de que un usuario altere la cadena con éxito sería alterar un bloque y luego generar bloques de transacción subsiguientes para crear una nueva cadena más larga.
Sin embargo, el uso de una prueba de problema de trabajo lo hace matemáticamente imposible debido a que la red de usuarios agregará bloques a un ritmo mucho más rápido que a la que cualquier persona sola podría agregar bloques. Así, la seguridad es confiable, lo que significa que la seguridad radica en evitar que las partes maliciosas hagan daño por naturaleza del protocolo, sin tener que autenticar una transacción.
Por último, el libro mayor se distribuye, lo que significa que cada usuario almacena el libro mayor actual, evitando que alguien altere un único punto de verdad. En la criptografía tradicional, un único punto de verdad podría ser una autoridad de certificación, sin embargo, si esa autoridad de certificación iba a ser violada, un atacante malicioso podría reemplazar las claves almacenadas con sus propias claves. Al distribuir el libro mayor, un atacante tendría que violar cada máquina miembro y reemplazar la cadena de bloque por la suya propia haciendo que sea funcionalmente imposible para un atacante alterar la cadena.
Blockchain para la autenticación y verificación de nuestra identidad
Nuevas empresas han comenzado a aprovechar el potencial de la cadena de bloques, desarrollando una variedad de servicios utilizando la tecnología. El centro de la autenticación de bloque de bloques sería un ID de bloque de bloques. Este ID es esencialmente un bloque de datos en la cadena que puede ser verificado por cualquier tercero y puede mostrar la información necesaria, como la fecha de nacimiento. El secreto de esta verificación es el ECDSA (algoritmo de firma digital de curva elíptica). Cuando se agrega un ID a blockchain, un servicio de emisión de identificación enlaza una clave pública de forma predeterminada y luego transfiere la propiedad de la clave privada al usuario. Esto permite al usuario, y sólo al usuario, firmar una firma que se puede verificar contra la clave pública almacenada en la cadena de bloques. Esta identificación de un usuario sería una fuente descentralizada de autenticación. Sería esencialmente un portal de inicio de sesión único al que cualquier aplicación puede acceder pero que no pertenece a ninguna entidad individual. Una aplicación protegida solo tendría que solicitar una firma digital y un ID de un usuario que solicita acceso. La aplicación podría verificar que la firma es válida y que el ID del usuario verifica quién dice ser.
Problemas con la autenticación actual de segundo factor (2F)
Hay algunas opciones actualmente utilizadas para la autenticación en dos factores. Estos tienen una adopción relativamente amplia, sin embargo, los métodos son anticuados y plantean otras amenazas de seguridad. Por ejemplo, uno de los métodos más comunes es enviar un código a través de SMS. Esto es genial, sin embargo, los mensajes SMS son notoriamente inseguros. Un posible atacante podría "ver" mensajes de cualquier número y leerlos, además de falsificar el remitente del mensaje. Esto tiene un gran problema porque si un atacante sabe que su cuenta usa mensajes de texto como un método de copia de seguridad de autenticación y su nombre, podría encontrar sus números de teléfono listados en línea y luego interceptar esos mensajes, obteniendo acceso a cualquier código enviado.
El otro problema con la autenticación actual de 2F es la naturaleza propietaria de los servicios. Métodos como Google Authenticator son seguros y fáciles de usar, sin embargo, Google, tiene acceso a todos tus códigos de segundo factor. Esta opción es mucho más segura pero retoma el problema de que sea una sola entidad propietaria de los datos de autenticación. Una error de Google podría hacer que se filtren todos sus códigos de autenticación. El enfoque descentralizado ofrecido por la cadena de bloques elimina este problema porque la cadena está 100% abierta al público y no se almacenan datos sensibles en la cadena de bloqueo.
Aplicaciones del Blockchain
Blockchain ID es una solución viable para poder resolver la verificación de que un usuario es quien dice que es. Pudiendo además, ampliar esta funcionalidad para realizar una variedad de transferencias seguras de datos en nombre de dicho individuo. Un servicio profundamente vinculado con la verificación de la identidad es el intercambio de información de identidad sin revelar información innecesaria como comente anteriormente.
Además de compartir datos, un usuario también podría agregar datos a la cadena como prueba de una transacción, sin dar los datos originales de la transacción. Cualquiera de las partes podría verificar un documento en contra dicha entrada y demostrar que es válida, lo que permite una auditoría rápida y fiable de los datos compartidos.
Esta metodología se basaría en el principio de la firma de mensajes y el hash.
Muchos servicios ya utilizan esta tecnología para verificar de forma segura los datos (como JSON Web Tokens) sin revelar los datos originales.
Propuesta de autenticación con blockchain
Un flujo de autenticación genérico que ha sido probado y utilizado por compañías como Blockstack se basa en un handshake centrado en bloques. Este handshake verifica tanto a la aplicación de autenticación como al usuario que es la otra parte con la que se están comunicando.
En este ejemplo, la aplicación protegida es la aplicación que solicita la autenticación y el usuario es la entidad que intenta obtener acceso a la aplicación protegida. El primer paso de este flujo es similar al de cualquier inicio de sesión. Sin embargo, no se le pedirá al usuario que introduzca una contraseña. En su lugar, un usuario vería un formulario en la aplicación protegida para un nombre de usuario, a continuación, mostrará un código QR para la autenticación. El ejemplo de código QR sería más fácil de configurar y simplemente codificaría la solicitud de autenticación de la aplicación protegida. Esta solicitud de autenticación es el primer paso del handshake. El siguiente paso es verificar la solicitud y enviar una respuesta. Este paso contiene muchos pasos para garantizar la autenticación. En primer lugar, el usuario verificará que los datos de la solicitud son legítimos y que el sitio web protegido es el que espera. Esto podría hacerse utilizando criptografía de clave pública, y permitiría a la aplicación protegida firmar la solicitud, la cual luego se verifica públicamente a través de blockchain o una autoridad de certificación. Para soportar transiciones simples, sería razonable comenzar con un sistema de autoridad de certificado usado en TLS a HTTS. Sin embargo, esto podría transformarse en una autenticación de bloque de bloques completa mediante la creación de un ID de aplicación en la cadena blockchain que podría verificarse. Después de verificar esta solicitud, el usuario debería hacer clic en un botón que indicase el inicio de sesión. Esto crearía una respuesta, la firmaría y, a continuación, la enviaría de vuelta a una ruta especificada en la aplicación protegida. Esta solicitud se verificará mediante la utilización de la criptografía de clave pública en la aplicación protegida y registrará el usuario. El beneficio de utilizar la cadena blockchain es que está completamente descentralizada. Si no se desea utilizar una aplicación para facilitar este flujo, el usuario podría simplemente generar su propia firma con su clave pública y enviarla en un formulario que el sitio web verificará. Esto demuestra el verdadero beneficio de un sistema descentralizado, puesto que cualquiera puede acceder a los datos y el usuario tiene el control de su clave privada, y como usuario no se obliga a utilizar una API para facilitar esta solicitud, pudiendo dar tanta confianza como se este dispuesto a dar.
Compartir sólo la información de identidad que deseas
Un problema actual con la verificación de identidad es que se está obligado a dar más información de la que el sistema realmente necesita. El problema con esto, es que si la transacción se ve comprometida y alguien es capaz de interceptar los datos de alguna manera, tendrán bastante información para comenzar a forjar una identidad. Para resolver este problema, el flujo de autenticación anterior podría ampliarse para soportar este tipo de servicio.
Blockstack ha propuesto un formato sugerido para estas solicitudes
Primero el protocolo definiría un conjunto de "permiso" o solicitud para un conjunto particular de datos. Este nivel de "permiso" sería definido para un caso de uso común. Por ejemplo, si el sistema desea recopilar información de la tarjeta de crédito, podría enviar una solicitud de "pago". Que el usuario podría ver y determinar si quieren revelar su información de tarjeta de crédito a este vendedor. Si confían en él, pueden firmar la solicitud y enviar un paquete de datos que contenga la información pertinente. Si su banco admite la autenticación blockchain, podrían simplemente enviar un paquete de pago firmado, que el sitio web podría luego reenviar al banco y completar la transacción. Evitando así que el usuario proporcione a la tienda información personal ( Es aquí donde esta la magia ). De lo contrario, el paquete de datos podría incluir información financiera, como el número de tarjeta de crédito, cvs ... Sin embargo, el sitio web con el fin de evitar el fraude, podría verificar que esta persona es realmente el propietario de los datos y que no se esta utilizando una tarjeta robada.
Para hacer esto, el hash criptográfico podría ser verificar los datos, un principio aplicado por Tieron para lograr este efecto. El primer paquete sería el hash firmado por el usuario. Esto diría a la tienda que es realmente una persona quien envío los datos. A continuación, el sitio buscaría en blockchain una versión firmada y un hash de estos datos. Si los hashes coinciden con las firmas, el almacén sabrá que los datos están asociados con esa persona y que los datos no están alterados, dando una seguridad razonable de que la tarjeta es propiedad del individuo autenticado. Al aplicar los principios utilizados por Blockstack y Tierion, se podría establecer un sistema de autenticación y verificación de identidad completo, seguro y, sobre todo, distribuido.
Conclusiones
A pesar de que existen muchas aplicaciones posibles en blockchain, no debemos suponer que la cadena de bloques es una solución perfecta para estos problemas. Como con cualquier sistema, todavía hay inconvenientes e inseguridades, ya que ningún sistema es 100% seguro y por lo tanto, debemos considerarlo a la hora de adoptar esta tecnología.
En el caso de la autenticación, el problema sigue siendo que se puede confiar en un tipo de autoridad de certificación, confiando en una tercera parte. Para asegurar que un ID es realmente la persona que dice ser, se requieren formas de verificación más seguras que simplemente usar los mensajes de los medios de comunicación sociales. Por lo tanto, al igual que el caso de las autoridades de certificación para el protocolo TLS, las personas tendrían que confiar en que estas autoridades están verificando adecuadamente estos documentos. Solucionándolo con un sistema basado en hash que podría ser utilizado para almacenar un registro del documento utilizado para que alguien pueda verificar que es parte de una identidad dada, sin embargo, la información de este documento puede ser sensible y por lo tanto el propietario no quiere cierta información esté disponible en la cadena de bloques.
Esto introduce la cuestión actual de un tercero de confianza y temas como la seguridad. Aunque ECDSA es extremadamente seguro, y la criptografía de clave pública está más que probada, la gente está notoriamente insegura con los datos expuestos, especialmente en el caso de las personas que no entienden la tecnología que están utilizando ( que son la mayoría de las personas que lo utilizan ).
Cuestiones como estas deben considerarse antes de crear un amplio sistema de identidades basado en blockchain, sin embargo, los posibles casos de uso y beneficios para la sociedad son innegables. A medida que la sociedad esta cada vez más centrada en la tecnología e internet, es necesaria una mejor identidad digital y las formas contemporáneas de autenticación e identificación se vuelven cada vez más inseguras e insuficientes para el mundo en el que vivimos.