Sistema de licencias para la aplicación web de código del lado del cliente

3

Tengo una aplicación web del lado del cliente que se ejecuta en la colección de sitios de SharePoint, cada colección de sitios tiene su propia identificación única. Quiero usar un proceso de licencia para bloquear la aplicación a una colección de sitios.

Este es el proceso de desafío-respuesta que estoy tratando de implementar:

  • Se le solicitó al usuario que genere challenge code
  • challenge code es site_collection_id procesado a través de alguna función
  • El usuario me envía challenge code
  • Encripto / hash challenge code con algo (¿clave privada RSA?)
  • El resultado cifrado se considera el license key que envío al usuario
  • El usuario guarda license key en la aplicación

Proceso de validación:

  • En la carga de la aplicación, recupera license key
  • Descifrar / un-hash license key usando algo (¿clave pública RSA?)
  • El resultado es el challenge code que el usuario ha enviado antes
  • Compare el challenge code que ha generado a partir del license con el que obtendría del sitio para determinar si coinciden

¿Esto tiene sentido? Lo único de lo que no estoy seguro es sobre las cosas de clave pública / privada y si hay una manera de hacerlo en JavaScript. Por lo que he leído, no puedo usar RSA de forma segura para cifrar con clave privada y descifrar con público. Normalmente es lo contrario. Así que estoy buscando alternativas

Para ser claro, necesito almacenar algo en el script de la aplicación que pueda usar para descifrar la licencia, pero estaría encriptando el código de desafío en un sitio diferente o en el lado del servidor

Sé que es imposible asegurar al 100% las aplicaciones del lado del cliente. Solo estoy buscando algo para evitar que alguien distribuya la aplicación fácilmente

    
pregunta Batman 02.01.2016 - 23:11
fuente

1 respuesta

2

Tu esquema está bastante cerca, diría yo. RSA en JavaScript es una molestia, así que busque una biblioteca que lo haga por usted. Esta es mi sugerencia para su esquema final:

  1. El cliente le envía el ID de sitio i
  2. Usted firma esa identificación con su clave privada p : S = RSA-SIGN (i, p) = i ^ d mod n
  3. Envía S de vuelta al cliente en un archivo o en un correo electrónico
  4. El cliente almacena el archivo de licencia
  5. Cuando se cargue la aplicación web, descargue el archivo ( S ') y su clave pública o y haga los cálculos: S' '= RSA-VERIFY (S ', o) = S' ^ e mod n . Si S '' = S ', la licencia está bien.

Las fórmulas de RSA aquí son Textbook-RSA y criptográficamente inseguras. Uno podría recuperar la clave privada. Así que asegúrate de usar el relleno y el hashing adecuados (palabra clave: PKCS7)

P.S .: Como dijo el TO, esto no es 100% seguro. No puede ser, ya que el código del lado del cliente puede ser manipulado completamente fácilmente.

P.S.S .: Creo que un formulario en línea para los pasos del 1 al 3 sería mucho mejor en términos de facilidad de uso que enviar por correo electrónico esas cosas.

    
respondido por el marstato 02.01.2016 - 23:59
fuente

Lea otras preguntas en las etiquetas