Implementa verifica GPG (Bitcoin-OTC)

1

Sto cercando di implementare una funzione "Verifica con Bitcoin-OTC " per la mia app web. L'idea generale è che l'utente dimostrerebbe di possedere un account particolare sul sito esterno Bitcoin-OTC e la mia app lo accetterebbe / negherebbe in base alla sua valutazione.

Ecco come sto pensando di implementarlo:

  1. L'utente fornisce il nome utente Bitcoin-OTC.
  2. La mia app cerca la sua impronta digitale GPG usando questo gioiello bitcoin-otc .
  3. La mia app presenta all'utente la sua password monouso crittografata e gli chiede di decrittografarla.
  4. L'utente fornisce la password decodificata.
  5. La mia app lo verifica con il comando gpg everify su Freenode e accetta / nega l'utente.

La parte con cui sto combattendo è il punto # 5. Lo sto facendo in questo modo perché non sono sicuro che Bitcoin-OTC esponga un'API. Non sono sicuro di come comunicare in modo programmatico con il bot sul loro canale IRC.

I passaggi 1-5 sono fondamentalmente come un utente dovrebbe verificare se stesso sul canale IRC Bitcoin-OTC, tranne che la mia app agisce da intermediario.

Le mie domande sono:

  • Come posso ottenere il passaggio n. 5?
  • L'aggiunta della mia app a questo flusso introduce rischi per la sicurezza?

Modifica

Ho fatto delle ricerche e ho capito che probabilmente posso solo far firmare all'utente un messaggio in cui afferma di possedere l'account Bitcoin-OTC in questione.

Se il messaggio è firmato con l'impronta digitale legata all'account Bitcoin-OTC e la firma è affidabile, allora posso essere sicuro che l'utente è chi dice di essere?

Ecco il mio flusso proposto in uno script 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     
posta Maros Hluska 06.02.2015 - 19:57
fonte

1 risposta

1

Piuttosto che passare attraverso l'intera # procedura di login bitcoin-otc per conto dei tuoi utenti (che, nel caso di una sessione esistente, può essere negata o tentare di sostituire la sessione corrente), potresti avere un bot presente in # bitcoin-otc e poi richiedere agli utenti con ident di verificarlo con un token generato casualmente, oppure chiedere a un token dal bot di usarlo sul sito web. Potresti disaccoppiare il bot dal tuo backend principale fornendo all'utente un messaggio codificato che includa la risposta verificata da ident firmata dal tuo bot: non dovrai implementare alcuna comunicazione tra il bot e i componenti principali dell'app da allora approverebbe solo le risposte da ident . Credo che gli utenti si sentirebbero più sicuri con alcuni di questi approcci, in quanto potrebbe esserci qualche preoccupazione per un agente remoto che esegue questa autenticazione all'interno di una comunità in gran parte attenta alla sicurezza.

La maggior parte delle lingue ha stabilito librerie IRC, quindi dovrebbe essere piuttosto semplice una volta acquisita familiarità con una per la lingua scelta.

Modifica

Se desideri solo verificare la proprietà di un account verificato da GPG, esegui semplicemente la verifica GPG. Se preferisci Ruby, puoi utilizzare il link per crittografare un token firmato / timestampato per la chiave pubblica dell'utente. Non devi mantenere lo stato, basta verificare che il token fornito abbia una firma valida applicata dal tuo server. Potrebbe già esserci un'implementazione aperta come questa oggi.

    
risposta data 06.02.2015 - 21:31
fonte

Leggi altre domande sui tag