Estoy desarrollando una página web, que también debe tener una función de chat, para que los usuarios puedan comunicarse entre sí a través de la plataforma. Los mensajes deben cifrarse con cifrado de extremo a extremo. Por lo tanto, uso la biblioteca criptográfica incorporada de Web-API. Al final del proceso de registro, cada usuario obtiene un par de claves generado. Cuando un usuario inicia sesión, su clave privada (en formato jwk) se cargará con:
crypto.subtle.importKey("jwk", data, { name: 'ECDH', namedCurve : 'P-256' }, true, ["deriveKey", "deriveBits"]).then(...) .
Cuando el usuario intenta iniciar una conversación con otro usuario, la clave pública del otro usuario se cargará con:
crypto.subtle.importKey("jwk", jwkData, { name: 'ECDH', namedCurve : 'P-256' }, true, ["deriveKey", "deriveBits"]).then(...) o
crypto.subtle.importKey("spki", base64data, { name: 'ECDH', namedCurve : 'P-256' }, true, ["deriveKey", "deriveBits"]).then(...) .
Todo el proceso de cifrado/descifrado funciona perfectamente en Firefox. Pero si pruebo el mismo código con Safari, la carga de la clave pública falla con: SyntaxError: A required parameter was missing or out-of-range. . Recibo este mismo error si trato de cargar la clave desde base64 o datos jwk. Logré averiguar qué parámetro falta, es el componente "d" en el jwk, pero esto solo debería incluirse en la clave privada, ¿no? La clave privada se puede cargar como se esperaba también en Safari, solo que la clave pública no.
Busqué en la lista de errores de Safari con criptografía, hay un montón de ellos, pero no especialmente este. ¿Alguien tiene experiencia con este error o alguna idea de cómo solucionarlo?
Gracias y un saludo Atila