Con javascript en el navegador, ¿cómo puedo firmar algunos datos sin manipular directamente una clave privada?

1

Con JavaScript en el navegador, necesito firmar digitalmente algunos datos. Estoy viendo la nueva Crypto.Subtle api , específicamente el signo ( ) y los métodos importKey() . Quiero, muy razonablemente creo, instalar un certificado en un dispositivo móvil, fuera de mi aplicación web, y luego, en la aplicación web, firmar algunas cosas con el certificado instalado sin manipular directamente ni ver la clave privada. Sin embargo, no puedo ver si o cómo la API de Crypto interactúa con los certificados instalados.

¿Me estoy perdiendo algo obvio? Si esto no es posible, ¿existen complementos para el navegador que me puedan ayudar? Veo en 2009 alguien hizo esto con un objeto MS ActiveX, pero debe haber una mejor manera seis años después?

    
pregunta bbsimonbb 16.09.2015 - 12:27
fuente

2 respuestas

0

No es posible, no sin un esfuerzo significativo por parte de los autores del navegador (o los autores de los complementos del navegador) para hacerlo posible. Recuerde, el punto de firmar algo es verificar que su autenticidad, es decir, que el firmante haya querido firmar esa cosa, con esa clave, y que sean los únicos con la clave, tenga acceso al contenido de la página web (que es un código intrínsecamente no confiable, desde el punto de vista del navegador) para acceder a las claves de firma de un usuario sería un riesgo importante para la seguridad. Incluso el solo hecho de enumerar las claves instaladas permitiría al usuario tomar huellas dactilares y realizar un seguimiento.

Ahora, un navegador (o complemento) podría intentar hacer esto de manera segura, al ofrecer una API JS que básicamente solicita al usuario " Una secuencia de comandos en el sitio intenta acceder a su almacén de certificados. [Permitir ] [Denegar (predeterminado)] "y luego una solicitud similar (si se aprueba la primera) para acceder a su clave privada (y contraseña si es necesario). Sin embargo, sería muy cauteloso con esta característica.

    
respondido por el CBHacking 16.09.2015 - 22:12
fuente
0

No es posible en un navegador simple . Pero si intenta ejecutar su aplicación web , seguramente usará algún tipo de envoltorio lib para convertirlo en una aplicación de Android (o ios, etc.). De esta manera puede hacer lo que su envoltura puede hacer en el dispositivo móvil. Si escribe su propio contenedor y tiene los derechos adecuados, puede hacer cualquier cosa lo que otras aplicaciones móviles pueden hacer.

El contenedor más popular, como phoneGap, le proporciona una API para acceder a los archivos, de esta forma puede acceder a su clave (por cierto, la firma se realiza mediante una clave privada y no mediante certificados).

Sin embargo, estoy de acuerdo con CBHacking, no sería una buena idea acceder a sus preciosas claves desde javascript. Tal vez un mejor enfoque para crear una llamada a la API que firme ese mensaje para usted. Los scripts nunca tocarán las teclas entonces.

    
respondido por el goteguru 17.09.2015 - 02:15
fuente

Lea otras preguntas en las etiquetas