Firma de datos de transacción
Necesito una idea para desarrollar un algoritmo muy seguro para autenticar las operaciones en línea usando PHP en el servidor y una aplicación de Android en el dispositivo del usuario.
¿Cuál es la idea?
El usuario intenta iniciar sesión en el sistema. El servidor envía una solicitud de confirmación al dispositivo del usuario (Android).
El usuario ve la fecha, el país, la ciudad, la IP, el navegador y el sistema operativo en la aplicación, todo sobre el intento de inicio de sesión, y si todas estas informaciones coinciden, puede hacer clic en confirmar. La aplicación generará un token de 8 dígitos decimales basado en esta información y lo enviará al servidor, el servidor intentará generar un token con la misma información y si ambos tokens coinciden, el servidor acepta el intento de inicio de sesión.
Esta es solo una operación posible.
¿Qué necesito?
Un algoritmo universal para autenticar cualquier operación en línea.
por ejemplo:
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);
¿Qué utilizarías en la función CRAZY_MATH_USING_ALL_PARAMETERS_TO_GENERATE_8_DIGITS_TOKEN ()?
P.S .: Necesito un token numérico de 8 dígitos decimales. Porque si el usuario no tiene conexión a Internet, puede leer los detalles de la operación utilizando el Código QR y necesitará insertar el token en el sistema manualmente.