Una sola password con token hardware

0

Sto facendo ricerche sui metodi di autenticazione del software che sono semplici ma sicuri da implementare nei miei progetti.

IDEAS: passaggi per autenticare le app

L'applicazione è in esecuzione da un'unità USB in quanto non viene mai installata su nessun computer.

  1. Ad ogni esecuzione, il software avvia Informazioni come USB Hardware ID e forse un ID univoco per l'app vengono raccolte e in qualche modo hash in una stringa key-like di attivazione.
  2. Questa stringa viene quindi passata come parametro in una funzione PHP dove viene invertita (lato server) e il contenuto viene verificato su un database per verificare che l'applicazione sia stata eseguita da una chiave USB 'autorizzata' e non copiata da una a un altro (dato che l'ID H / W cambierebbe e non corrisponderebbe a quello nel database) - in pratica questo ridurrebbe al minimo la possibilità che un client ottenga due "licenze software" funzionanti.

Domande

L'idea è di essere in grado di recuperare le colonne per la riga nel database, che corrisponde a quel particolare HW ID e all'app segreto univoco individuerà la riga corretta. Il PHP viene utilizzato per verificare se ulteriori voci in quella riga corrispondono anche ad altri valori, ad esempio se la chiave HW è scaduta o meno. Tuttavia , per impedire all'utente di utilizzare sempre lo stesso parametro di stringa, dovrebbe essere casuale e quasi impossibile da calcolare / indovinare, ma collegare alla stessa posizione nel database.

Ora sto considerando la crittografia anziché l'hashing (a vantaggio del mantenimento dei dati), in quanto può essere decodificato utilizzando una chiave master sul server. Capisco che l'hashing si converta solo in una direzione e forse non stavo esprimendo correttamente lo scenario prima di questa modifica, quindi spero che le cose siano diventate un po 'più chiare. Qualcuno potrebbe guidarmi nella giusta direzione? Come è fatto?

Apprezzerei molto qualsiasi feedback e idee su come farlo funzionare correttamente.

    
posta ProGrammer 24.11.2017 - 02:34
fonte

1 risposta

1

Si desidera una stringa che sia unica ogni volta che la chiave di registrazione è selezionata e qualcosa che l'utente non sarà in grado di eseguire facilmente il reverse engineering (e quindi di bypassare le restrizioni del DRM).

Un modo per farlo è avere l'applicazione per memorizzare la tua chiave crittografica. È possibile concatenare / combinare le chiavi software, gli ID e qualsiasi altro dato desiderato insieme a una stringa casuale che cambia ogni volta che si accede / richiede un dato. Lo crittografate con la chiave crittografica e passate al vostro server. Il server decrittografa con la sua chiave crittografica, estrae i dati decrittografati e scarica la stringa casuale.

  1. L'uso della stringa casuale significa che la stringa del testo cifrato risultante è unica ogni volta, rendendo difficile la decodifica.
  2. Crittografia significa che puoi leggere i dati in chiaro anche se il testo cifrato è diverso ogni volta (una caratteristica che un hash diretto non può fornire).

Lo svantaggio è che il testo cifrato potrebbe diventare grande (a seconda di come lo fai). Assicurati inoltre che il testo casuale abbia una lunghezza variabile per rendere più difficile l'indovinare le stringhe del componente.

L'altro problema che avrai sarà corretta gestione della chiave nella tua app. Una volta che un utente ottiene quello, quindi possono creare le proprie stringhe che supereranno i test.

In generale, stai chiedendo come escogitare una soluzione DRM. Esistono molti modi per farlo e ti consiglio di osservare i loro schemi di progettazione.

La lotta comune è che una volta posizionata la tua app nelle mani di un utente, perdi molto controllo. È meglio progettare la soluzione in modo che non importi se un utente copia il software o progetta un framework su cui viene eseguita l'app anziché locale (il che è molto diffuso nelle app basate sul Web). Devi anche valutare i costi / benefici di tutto questo lavoro di progettazione contro il lavoro che un utente dovrà affrontare per sconfiggerlo. Stai mettendo i tuoi sforzi nel posto giusto?

    
risposta data 24.11.2017 - 12:15
fonte

Leggi altre domande sui tag