Algoritmo para la firma de datos de transacción

0

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.

    
pregunta Lucas NN 30.05.2014 - 06:09
fuente

1 respuesta

1

Stringifique la información enviada de forma estándar, tome el hash SHA256, firme con la mitad privada del par de claves que se genera para el teléfono cuando se instala la aplicación (la mitad pública se envía al servidor al momento de la inscripción) hora).

Lo más importante es que HMAC es fácil de hacer mal porque es crypto y crypto es realmente difícil de hacer (incluso Ron Rivest, el R en RSA, y posiblemente uno de los mejores expertos en crypto) puede llegar a algo como RC4 que tiene algunas debilidades a nivel de protocolo_. DO NOT ROLL YOUR OWN CRYPTO . Apostaría dinero a que no lo harás correctamente. En su lugar, utiliza los algoritmos existentes, las metodologías existentes, las bibliotecas existentes. Crypto EC para su generación y firma de pares de claves público-privadas, utilice una curva que sea bien conocida, como las curvas NIST, ya que tienen el mayor control y la investigación criptoanalítica altamente financiada por el gobierno federal.

    
respondido por el DTK 29.11.2014 - 13:47
fuente

Lea otras preguntas en las etiquetas