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:
- El usuario proporciona el nombre de usuario de Bitcoin-OTC.
- Mi aplicación busca su huella digital de GPG utilizando esta bitcoin-otc gem .
- Mi aplicación presenta al usuario con su contraseña de un solo cifrado y le pide que la descifre.
- El usuario proporciona una contraseña desencriptada.
- 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