¿Es phpseclib una alternativa segura y confiable a OpenSSL?

5

Sé que OpenSSL debe instalarse y activarse a través de apache y los archivos de configuración, lo que puede ser incómodo o incluso imposible, y que phpseclib es más flexible y fácil de manejar que OpenSSL (problema X.509 / en ciertas situaciones, la implementación de OpenSSL en PHP necesita un certificado X.509 para crear un par de llaves válido), por lo que Me gustaría usar phpseclib en lugar de OpenSSL.

PERO, y esta es la pregunta, ¿es realmente una alternativa viable y segura? ¿No es problemático tener su código fuente en el servidor? ¿Hay algunas implicaciones negativas de seguridad en el uso de phpseclib, o alguna implementación php de RSA?

Situation:

  • OpenSSL: + nativo + binario, a menos que flexible, a menos versátil, a veces problemas de configuración
  • phpseclib: + flexible + portátil + más versátil -no nativo -no compilado

Pregunta :

  • ¿Seguridad?

EDIT : Utilizo OpenSSL para crear un par de llaves y luego cifrar los datos directamente en la base de datos (solicitud del cliente, de ninguna manera). Pero la pregunta aquí es general, independiente de la aplicación final.

    
pregunta Larzan 28.10.2013 - 20:06
fuente

2 respuestas

5

Implementar algoritmos criptográficos de manera segura es difícil. Debería saberlo. Los algoritmos criptográficos concentran los secretos en claves, que son muy valiosos, y muchas filtraciones relacionadas con la implementación (por ejemplo, pequeñas variaciones del tiempo de ejecución) pueden ser desastrosas cuando se aplican a la criptografía.

Hay formas de evitar este tipo de fugas, pero requieren atención, mucho ensayo y error y, sobre todo, un amplio conocimiento del comportamiento de bajo nivel del motor de ejecución. Como regla general, cuanto más lejos esté del hardware, más difícil será asegurar el código contra ataques de canal lateral. PHP está mucho más lejos del código de metal que de C.

Ahora no digo que no es posible ; por ejemplo, una implementación resistente a los ataques de tiempo de un algoritmo criptográfico es bastante posible en Java o .NET. Así que debería ser factible en PHP también. Pero, como es habitual, se requerirá una gran cantidad de escrutinio externo para determinarlo.

Recuerde que new is bad en criptografía; La seguridad se gana a través de la exposición prolongada. A pesar de todas sus deficiencias, OpenSSL ha tenido mucha exposición a lo largo de los años. phpseclib es más nuevo y utiliza un marco "algo hostil" cuando se trata de fugas de canal lateral, por lo que es demasiado pronto para declararlo apto para la producción.

No sé lo que quieres decir con "problema X.509". Quiero decir, X.509 es un engendro del infierno; pero no veo cómo una implementación en PHP funcionaría mejor. El único punto positivo de PHP aquí es que PHP tiene controles en los límites de la matriz, lo que limita las consecuencias de los desbordamientos de búfer (bloqueo de la aplicación en lugar de desbordar el búfer); esto es importante para X.509 solo porque parece que muchas personas no pueden implementar la codificación / decodificación ASN.1 correctamente, sin disparar estos búferes. Pero aparte de eso, la complejidad de X.509 no cambia, ya sea que use C o PHP.

La idea de reescribir todo desde cero, "por simplicidad", surge regularmente cuando se habla de X.509. Pero el "problema" de X.509 no es que las implementaciones habituales sean malas; es que X.509 es inherentemente complejo, porque trata de resolver por adelantado el tema complejo de la delegación de confianza (todas las soluciones en competencia intentan evitarlo); y X.509 (el estándar) ha acumulado una gran cantidad de basura heredada. Reescribirlo desde cero no lo hará más sencillo, a menos que elimine las partes del estándar que no le gustan, en cuyo caso será más simple, pero no funcionará.

    
respondido por el Thomas Pornin 28.10.2013 - 21:21
fuente
4

No.

phpseclib no está tan bien revisado como OpenSSL, el último de los cuales se encuentra fácilmente en la lista de los 10 códigos más cuidadosamente examinados en uso.

Si bien los errores futuros son difíciles de predecir, cuanta más atención recibe un poco del software, más rápidamente se eliminan los errores (y los problemas de seguridad en particular). OpenSSL es muy maduro. Por otro lado, phpseclib definitivamente no lo es.

Eso no quiere decir que phpseclib sea claramente inseguro; Puede ser un bit de código muy razonable. Pero no está al mismo nivel que OpenSSL porque no ha visto el nivel de escrutinio del calibre de los auditores que tiene OpenSSL.

Además, si tiene la intención de usar phpseclib en lugar de Apache / SSL para hacer HTTPS, definitivamente lo está haciendo mal. Y cualquiera que sea el "Problema X.509" es que usted estamos hablando, esta no es una solución razonable.

    
respondido por el tylerl 28.10.2013 - 20:50
fuente

Lea otras preguntas en las etiquetas