Implementar la verificación GPG (Bitcoin-OTC)

1

Estoy buscando implementar una función "Verificar con Bitcoin-OTC " para mi aplicación web. La idea general es que el usuario probaría que posee una cuenta en particular en el sitio externo Bitcoin-OTC y que mi aplicación lo aceptaría / rechazaría según su calificación allí.

Así es como estoy pensando en implementar esto:

  1. El usuario proporciona el nombre de usuario de Bitcoin-OTC.
  2. Mi aplicación busca su huella digital de GPG utilizando esta bitcoin-otc gem .
  3. Mi aplicación presenta al usuario con su contraseña de un solo cifrado y le pide que la descifre.
  4. El usuario proporciona una contraseña desencriptada.
  5. Mi aplicación lo verifica con el gpg everify command en Freenode y acepta / niega al usuario.

La parte con la que estoy luchando es el paso # 5. Lo hago de esta manera porque no estoy seguro de que Bitcoin-OTC exponga una API. No estoy seguro de cómo comunicarme mediante programación con el bot en su canal IRC.

Los pasos 1 a 5 son básicamente cómo un usuario se verifica a sí mismo en el canal IRC de Bitcoin-OTC, excepto que mi aplicación está actuando como intermediario.

Mis preguntas son:

  • ¿Cómo puedo lograr el paso # 5?
  • ¿Añadir mi aplicación a este flujo presenta algún riesgo de seguridad?

Editar:

He estado investigando y me he dado cuenta de que probablemente pueda hacer que el usuario firme un mensaje que indique que es el propietario de la cuenta de Bitcoin-OTC en cuestión.

Si el mensaje está firmado con la huella digital vinculada a la cuenta de Bitcoin-OTC y la firma es de confianza, ¿puedo estar seguro de que el usuario es quien dice que es?

Aquí está mi flujo propuesto en una secuencia de comandos de Ruby ad-hoc:

require 'bitcoin/otc' account = Bitcoin::OTC::Account['mhluska'] message = Time.now.to_i.to_s + " I am the owner of username #{account.nick} on Bitcoin-OTC" puts 'Run the following command to sign a message using your GPG fingerprint #{account.fingerprint}:' puts "$ echo \"#{message}\" | gpg --clearsign" puts "Paste it back here and press Ctrl+D" $/ = "require 'bitcoin/otc' account = Bitcoin::OTC::Account['mhluska'] message = Time.now.to_i.to_s + " I am the owner of username #{account.nick} on Bitcoin-OTC" puts 'Run the following command to sign a message using your GPG fingerprint #{account.fingerprint}:' puts "$ echo \"#{message}\" | gpg --clearsign" puts "Paste it back here and press Ctrl+D" $/ = "%pre%" message = STDIN.gets response = %x[echo "#{message}" | gpg --verify 2>&1] if response.include?('Good signature') if response.include?('This key is not certified') puts 'Good signature but untrusted' else puts 'Good signature and trusted' end else puts 'Bad signature' end " message = STDIN.gets response = %x[echo "#{message}" | gpg --verify 2>&1] if response.include?('Good signature') if response.include?('This key is not certified') puts 'Good signature but untrusted' else puts 'Good signature and trusted' end else puts 'Bad signature' end     
pregunta Maros Hluska 06.02.2015 - 19:57
fuente

1 respuesta

1

En lugar de realizar todo el procedimiento de inicio de sesión # bitcoin-otc en nombre de sus usuarios (que, en el caso de una sesión existente, puede ser denegado o intentar reemplazar la sesión actual), puede tener un bot presente en # bitcoin-otc y luego requiere que los usuarios verificados por ident lo envíen con un token generado aleatoriamente o que soliciten un token del bot para usar en el sitio web. También puede desacoplar el bot de su backend principal al proporcionarle al usuario un mensaje codificado que incluya la respuesta verificada de ident firmada por su bot, ya que no necesitará implementar ninguna comunicación entre el bot y los componentes principales de su aplicación, ya que simplemente respaldaría las respuestas de ident . Creo que los usuarios se sentirían más seguros con algunos de estos enfoques, ya que puede haber alguna inquietud acerca de que un agente remoto realice esta autenticación dentro de una comunidad en gran parte consciente de la seguridad.

La mayoría de los idiomas han establecido bibliotecas de IRC, por lo que debería ser bastante sencillo una vez que te familiarices con el idioma de tu elección.

EDIT

Si solo desea verificar la propiedad de una cuenta verificada por GPG, simplemente realice su propia verificación de GPG. Si prefiere Ruby, puede usar enlace para cifrar un token firmado / con marca de tiempo para la clave pública del usuario. No tendría que mantener el estado, solo verifique que el token provisto tenga una firma válida aplicada por su servidor. Puede que ya haya una implementación abierta como esta hoy.

    
respondido por el AJAr 06.02.2015 - 21:31
fuente

Lea otras preguntas en las etiquetas