¿Es seguro enviar una clave pública con un archivo de licencia?

3

He implementado un cliente y servidor de licencias para nuestras aplicaciones web. Actualmente, solo hay una forma de licenciar una aplicación, el usuario debe cargar manualmente el archivo de licencia utilizando el formulario y el menú especificados en la sección de administración.

Tengo cuatro formas de publicar la clave pública asociada que se requiere para garantizar la integridad del archivo de licencia:

  1. Usando un servidor de claves. La aplicación descarga la clave pública del servidor. Esto no siempre es posible, algunos de nuestros clientes tienen acceso restringido a Internet para sus servidores.

  2. Codificación fija de la clave pública. El enfoque más fácil, pero si terminamos usando varias teclas, ¡tendremos varias versiones diferentes! Y sería muy doloroso cambiar la clave después.

  3. Envíelo como un archivo junto a los archivos de la aplicación web. De esta manera es más fácil cambiar y reemplazar el archivo.

  4. Anexando la clave pública dentro del archivo de licencia. Este método parece muy flexible y es la mejor manera en la que se me ocurrió hasta ahora.

Estaré agradecido de conocer sus recomendaciones y si es seguro publicar la clave pública con cada archivo de licencia, o no.

    
pregunta Akbari 27.01.2016 - 15:01
fuente

5 respuestas

2

Como lo señalaron @ 王庭茂 y @LieRyan, necesita alguna forma de probar que la clave pública que se carga con el archivo de licencia en realidad proviene de su compañía y no fue colocada allí por un atacante (en su caso, alguien tratando de falsificar un archivo de licencia sin pagar). La solución a esto es hacer que su clave pública se convierta en un certificado .

Mirando su caso de uso, realmente no creo que lo que usted quiere sea una Autoridad de Certificación de confianza pública. En su lugar, debe configurarse una jerarquía de autoridad de certificación privada (esto se puede hacer de forma gratuita y con el mínimo esfuerzo con OpenSSL). No es tan aterrador como parece, una CA es en realidad solo un archivo de clave pública que OpenSSL puede usar para firmar otros archivos o certificados.

Debes configurar algunas CA de OpenSSL como esta: luegoincrusteelcertificadodeCAraízenelcódigofuentedesuaplicación(estosedenomina fijación de certificado ). La CA raíz es un ancla de confianza, pero en realidad no hace nada más que firmar los certificados de las CA sub. En la mayoría de los casos, realmente puede desconectar la CA raíz después de haber creado sus subs. Las sub-AC son las que usas día a día para firmar cosas. Por lo general, la sub-CA firmará firma de certificados que usted usa para firmar los archivos de licencia (creando otra capa en el árbol), pero en su caso, probablemente salga con la idea de que las sub-CA firmen el Licencia de archivos directamente si eso es lo único que está utilizando para ellos. De esta manera, tiene la flexibilidad de usar múltiples claves como lo menciona en su punto # 2 (cada sub-CA es básicamente solo una clave de firma), o incluso eliminar una clave y reemplazarla por una nueva, si alguna vez necesita - sin ninguna interrupción del servicio o la necesidad de enviar parches.

Para implementar esto realmente, tendrá una sub-CA que firme el archivo de licencia, y luego enviará el archivo de licencia y el certificado de esa sub-CA al cliente. Deberá vincular OpenSSL a su aplicación para que tenga la lógica para validar un certificado. Cuando cargue un archivo de licencia a la aplicación, validará que 1) el archivo de licencia no está modificado (es decir, verifique la firma), 2) que la firma coincida con la clave en el certificado de la sub-CA, y 3) que la firma en el certificado de sub-CA coincide con el certificado de CA raíz que está incrustado en el código fuente de la aplicación. Ahora tiene una infraestructura de clave pública adecuada y segura sin necesidad de que la aplicación acepte el archivo de licencia para tener conectividad a Internet.

También abordaré la pregunta preventiva "¿Realmente vale la pena la molestia?". La respuesta es: no sé, eso depende de ti. ¿Cuánto cobras por una licencia? $ 5? Probablemente nadie se molestará en descifrar el formato de su licencia. $ 500? Puedes apostar que la gente comenzará a publicar claves falsas en línea. De su pregunta, obviamente ha decidido que vale la pena ir por la ruta de clave pública. Mi opinión es que, con seguridad, debes hacerlo correctamente o no hacerlo. Proporcionar algo que parezca a seguridad, pero que se rompa fácilmente, no evitará incluso a los atacantes poco hábiles, y brindará a sus clientes una falsa sensación de protección (lo que puede provocar indignación cuando lo descubran). / p>     

respondido por el Mike Ounsworth 29.01.2016 - 16:21
fuente
5

No.

Desea garantizar la integridad del archivo de licencia utilizando una clave pública para verificar. Sin embargo, si deja que su aplicación reciba la clave pública con el archivo de licencia, un atacante (que desea cambiar el archivo de licencia) podría simplemente cambiar el contenido, generar una nueva clave para firmar el contenido y reemplazar su clave con su clave.

Y tu aplicación utilizará la clave pública del atacante para verificar la firma, que es hecha por el atacante .

    
respondido por el maowtm 27.01.2016 - 15:33
fuente
2

Ver comentarios: la información de la licencia se firma con la clave privada y se valida con la clave pública.

En este caso, la clave pública puede ser 100% pública. Nadie más debería poder firmar datos con la clave privada (siempre que se mantenga en secreto), y no hay una forma (conocida) de obtener volver a la clave privada desde una clave pública.

Publíquelo en su sitio web, inclúyalo en el paquete, imprímalo en la parte posterior de su papelería, ¡todo está bien!

Simplemente no hagas lo mismo con la clave privada. Eso debería mantenerse bajo llave, idealmente en un HSM.

    
respondido por el Matthew 27.01.2016 - 15:11
fuente
2

Necesitas un ancla de confianza. En los sistemas PKI x509 (utilizados para TLS, correo electrónico S / MIME y firma de código, entre otros), el ancla de confianza la proporciona el público autoridades de certificación .

Su clave pública (su certificado) está firmada por la autoridad de certificación, que el usuario confía implícitamente. Para falsificar un certificado que especifique su nombre o el de su organización, un atacante tendría que convencer a la autoridad de certificación para emitir un certificado con su nombre o el de su organización, y se supone que esto es bastante difícil.

    
respondido por el Lie Ryan 29.01.2016 - 16:00
fuente
-1

Cuando estas claves se encuentran en otras aplicaciones para conectarse con su servicio, lea acerca de la autenticación de dos / tres patas. (OAuth) enlace (Versión 1) Ya existe una versión 2, pero no tengo experiencia con la versión 2

    
respondido por el Klaas 29.01.2016 - 15:46
fuente

Lea otras preguntas en las etiquetas