Come posso usare Delphi per creare una sfida / risposta visiva per ripristinare l'accesso a un'applicazione?

StackOverflow https://stackoverflow.com/questions/4249160

Domanda

Sono interessato a creare un processo di tipo di sfida / risposta a Delphi. Lo scenario è questo ... abbiamo 2 computer ... 1 appartiene all'utente e 1 appartiene a un tecnico di supporto.

L'utente è bloccato da un determinato programma e, per ottenere 1 volta l'accesso, voglio:

  1. L'utente deve essere presentato con una frase di sfida, come "28394ldja9281dhq" o qualche tipo di valore ragionevolmente unico
  2. L'utente chiamerà il personale di supporto e leggerà questa sfida (dopo che il personale di supporto ha convalidato la propria identità)
  3. La persona di supporto digiterà questo valore di sfida in un programma sul proprio sistema che genererà una risposta, qualcosa di altrettanto unico della risposta, come "9232KLSDF92SD"
  4. I tipi di utente nella risposta e il programma determinano se questa è una risposta valida.
  5. In tal caso, all'utente viene concesso 1 volta l'accesso all'applicazione.

Ora, come fare questa è la mia domanda? Avrò 2 applicazioni che lo faranno non hanno accesso reciproco l'uno all'altro. C'è qualche funzionalità all'interno di Windows che può aiutarmi con questa attività?

Credo di poter usare alcune funzionalità all'interno Criptoapi, ma non sono davvero sicuro da dove cominciare. Apprezzerei qualsiasi aiuto che potresti offrire.

È stato utile?

Soluzione

Vorrei implementare un'autenticazione sfida-risposta basata su MD5.

Da Wikipedia http://en.wikipedia.org/wiki/cram-md5

Protocollo

  1. Sfida: nell'autenticazione CRAM-MD5, il server invia prima una stringa di sfida al client.
  2. Risposta: Il cliente risponde con un nome utente seguito da un personaggio spaziale e quindi un digest a 16 byte in notazione esadecimale. Digest è l'output di HMAC-MD5 con la password dell'utente come chiave segreta e la sfida originale del server come messaggio.
  3. Confronto: il server utilizza lo stesso metodo per calcolare la risposta prevista. Se la risposta data e la risposta attesa, l'autenticazione ha avuto successo.

Ciò fornisce tre importanti tipi di sicurezza.

  1. Innanzitutto, altri non possono duplicare l'hash senza conoscere la password. Questo fornisce autenticazione.
  2. In secondo luogo, altri non possono riprodurre l'hash: dipende dalla sfida imprevedibile. Questo è variamente chiamato freschezza o prevenzione del replay.
  3. In terzo luogo, gli osservatori non imparano la password. Questo si chiama segreto.

Le due importanti caratteristiche di questo protocollo che forniscono questi tre vantaggi di sicurezza sono l'hash a senso unico e la nuova sfida casuale.

Inoltre, è possibile aggiungere un po 'di identificazione dell'applicazione nella stringa di sfida, per un doppio controllo sul mittente della sfida.

Importante: ha alcuni punti deboli, valuta attentamente come possono influenzarti.

Altri suggerimenti

Per quanto riguarda la strategia di sfida/risposta verbale: abbiamo usato questo approccio per autorizzare un'applicazione di nicchia su cinquemila workstation in tutto il mondo per più di dieci anni. Il nostro team di supporto lo ha definito i "Codici di lancio missilistici" a causa della sua somiglianza con il classico processo di autenticazione del lancio missilistico visto nei vecchi film.

Questo è un modo estremamente che richiede tempo per proteggere il tuo programma. Ha consumato enormi quantità di tempo del nostro personale e dei nostri clienti a leggere i codici da e verso gli utenti. Lo odiavano tutti.

La tua situazione/contesto può essere diversa. Forse non lo userai quasi frequentemente come noi. Ma ecco alcuni suggerimenti:

  1. Considera attentamente la lunghezza e il contenuto del codice: la maggior parte degli utenti (e del personale di supporto) si risente per digitare molti caratteri. Molti utenti sono cattivi dattilogi. Valuta se una corda lunga e l'inclusione dei segni di punteggiatura e la sensibilità dei casi li offuscano indebitamente rispetto alla quantità di sicurezza aggiunta.

  2. Dopo anni di utilizzo di un'implementazione di sfida verbale/risposta, l'abbiamo lasciata in atto (come back-back) ma abbiamo aggiunto un semplice sistema automatizzato. Abbiamo scelto di utilizzare FTP piuttosto che un approccio web più sofisticato in modo da non dover avere un software in esecuzione sul nostro server interno (o gestire il nostro personale IT!)

Fondamentalmente, utilizziamo i file FTP per eseguire lo scambio precedentemente fatto sul telefono. Il server posiziona un file sul server FTP contenente la frase di sfida. Il nome del file è il nome del cliente. Il nostro personale di supporto ha un programma che crea automaticamente questo file sul nostro sito FTP.

Il cliente è incaricato dal nostro staff di colpire una chiave calda che legge il file FTP, lo autentica e rimette un file di risposta sul server.

Il software del nostro personale di supporto è stato elettorale in attesa del software del cliente per creare il file di risposta. Quando vede il file, lo scarica e conferma il suo contenuto ed lo elimina dal server.

Ovviamente non puoi far sì che questo scambio avvenga tutte le volte e in entrambe le direzioni di cui hai bisogno in una determinata sessione per raggiungere i tuoi obiettivi.

I dati nei file possono avere le stesse chiavi MD5 che useresti verbalmente, in modo che sia sicuro come desideri.

Una debolezza in questo sistema è che l'utente deve avere accesso FTP. Abbiamo scoperto che la maggior parte dei nostri utenti (tutte le aziende) ha l'accesso FTP. (Naturalmente, la tua base di clienti potrebbe non ...) Se la nostra applicazione sul campo non è in grado di accedere al nostro sito FTP, annuncia chiaramente il problema in modo che i nostri clienti possano andare al personale IT per richiedere che aprano l'accesso. Nel frattempo, torniamo ai codici verbali.

Abbiamo usato i semplici strumenti FTP Vanilla Indy senza problemi.

Senza dubbio ci sono alcuni punti deboli in questo approccio (probabilmente includendo alcuni a cui non abbiamo pensato.) Ma, per i nostri bisogni, è stato fantastico. Il nostro personale di supporto e i nostri clienti lo adorano.

Scusa se nulla di tutto ciò è rilevante per te. Spero che questo ti aiuti un po '.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top