Algoritmo alla firma dei dati di transazione

0

Firma dati di transazione

Ho bisogno di un'idea per sviluppare un algoritmo molto sicuro per autenticare le operazioni online usando PHP nel server e un'app Android nel dispositivo dell'utente.

Qual è l'idea?

L'utente prova ad accedere al sistema. Il server invia una richiesta di conferma al dispositivo dell'utente (Android).

L'utente vede la data, il paese, la città, l'IP, il browser e il sistema operativo nell'app, tutto ciò che riguarda il tentativo di accesso e, se tutte le informazioni corrispondono, può fare clic su conferma. L'app genera un token a 8 cifre decimali basato su queste informazioni e lo invia al server, il server proverà a generare un token con le stesse informazioni e se entrambi i token corrispondono, il server accetta il tentativo di accesso.

Questa è solo una possibile operazione.

Di cosa ho bisogno?

Un algoritmo universale per autenticare qualsiasi operazione online.

per esempio:.

function generateRandonTokenUsingNParameters(){
    $args = func_num_args();
    $token = ""; //Start token

    for($i=0; $i < $args; $i++){
        $token = CRAZY_MATH_USING_ALL_PARAMETERS_TO_GENERATE_8_DIGITS_TOKEN($token, func_get_arg($i));
    }

    return $token; //Final token based in all informations of the operation

}

//e.g.
//LOGIN INFORMATION
$date = "2014-05-30 01:02:00"
$ip = "192.168.0.1";
$browser = "Chrome";
$city = "Los Angeles";
$country = "USA";
$os = "Windows";
$android_app_local_seed = "698dc19d489c4e4db73e28a713eab07b"; //each user have a different seed in his app

//PRINTING LOGIN TOKEN
echo generateRandonTokenUsingNParameters($date, $ip, $browser, $city, $country, $os, $android_app_local_seed);

Che cosa utilizzeresti nella funzione CRAZY_MATH_USING_ALL_PARAMETERS_TO_GENERATE_8_DIGITS_TOKEN ()?

P.S .: Ho bisogno di un token numerico a 8 cifre decimali. Perché se l'utente non dispone di una connessione Internet, può leggere i dettagli dell'operazione utilizzando il codice QR e dovrà inserire manualmente il token nel sistema.

    
posta Lucas NN 30.05.2014 - 06:09
fonte

1 risposta

1

Stringi le informazioni inviate in un modo standard, prendi l'hash SHA256, firmalo con la metà privata della coppia di chiavi che viene assegnata al telefono quando l'applicazione è installata (la metà pubblica viene inviata al server al momento dell'iscrizione) tempo).

La cosa più importante è che HMAC è facile da sbagliare perché è crypto e crypto è davvero difficile da fare (anche Ron Rivest - la R in RSA, e forse uno dei migliori esperti in crypto - può venire con qualcosa come RC4 che ha alcune debolezze a livello di protocollo_. DO NON ROLL IL TUO PROPRIO CRYPTO . Scommetterei i soldi perché non lo farai correttamente, invece utilizza algoritmi esistenti, metodologie esistenti, librerie esistenti. HMAC usando SHA256 + ECDSA è ben compreso ed è stato testato. La crittografia CE per la generazione e la firma di chiavi-chiavi pubbliche-private utilizza una curva ben nota, come le curve NIST, dal momento che sono sottoposte al controllo più approfondito e hanno una ricerca crittoanalitica altamente finanziata dal governo federale.

    
risposta data 29.11.2014 - 13:47
fonte