códigos de desbloqueo para una aplicación móvil

7

Esto es para un proyecto de juego de Android (a través de Cordova / Phonegap). Mi objetivo es poder proporcionar un "código de promoción" que permita a cualquiera desbloquear el juego de forma gratuita, pero quiero limitar cada código para que funcione solo por un día y no quiero confiar en un componente del lado del servidor Para validar los códigos. La solución que se me ocurrió fue que el código de cada día fueran las primeras letras del hash md5 de (el código del día anterior + un valor secreto). Aquí está en js:

function checkPromoCode(codeToCheck) {
    var secretString = "ABCDEFGH"; 
    var startDate = new Date(1388534400000);    // Jan 1 2014
    var currentDate = new Date();
    var todaysCode = "";
    while (startDate < currentDate) {
        todaysCode = md5(todaysCode + secretString).substring(0,6);
        startDate.setDate(startDate.getDate() + 1);
    }
    if (codeToCheck == todaysCode) return true;
    return false;
}

¿Estoy en lo cierto al pensar que la única manera razonable para que un atacante (quién sabe el algoritmo que estoy usando y los códigos de algunos días anteriores) para determinar el código de hoy sea determinando el valor de secretString? Entiendo que un atacante determinado podría averiguar el valor de las cadenas secretas por fuerza bruta o por análisis de la apk. Nada es irrazonable; El objetivo aquí es hacer que sea razonablemente difícil. ¿Me falta algo obvio? ¿Y es MD5 un hash apropiado para usar?

    
pregunta DevOfZot 16.10.2014 - 21:56
fuente

1 respuesta

1

Sin comentar sobre la seguridad, esto es lo que obtuve de una vez más:

  • Se considera una forma mejor tener una sola declaración var separada por comas
  • Podría hacer var startDate = new Date('2014/1/1'); y luego no necesita su comentario
  • Puedes escribir

    if (codeToCheck == todaysCode) return true;
    return false;
    

    como

    return codeToCheck == todaysCode;
    
  • Aparte de eso, me gusta la denominación de variables, el flujo del código y la legibilidad general
respondido por el tomdemuyt 17.10.2014 - 04:18
fuente

Lea otras preguntas en las etiquetas