Comparación de implementaciones TLS
# Comparación de implementaciones TLS

El protocolo de la capa de seguridad de transporte Transport Layer Security (TLS) provee la capacidad de asegurar la comunicación a través de las redes. Esta comparación de implementaciones TLS contrasta varias de las bibliotecas más notables. Hay varias implementaciones de TLS que son software libre y de código abierto.

Todas las categorías de comparación usan la versión estable de cada implementación listada en la sección de descripción general. La comparación está limitada a características que se relacionan directamente con el protocolo TLS.

## Descripción general

| Implementación | Desarrollado por | Código Abierto | Licencia de Software | Propietario(s) de los derechos de autor | Escrito en | Última versión estable, fecha de publicación | Origen |
| - | - | - | - | - | - | - | - |
| GnuTLS | Proyecto GnuTLS | Sí | GNU LGPLv2.1+ | Fundación de Software libre | C | Estable - 3.5.18/16 de febrero de 2018; hace 4 meses. Próximo estable: 3.6.2/16 de febrero de 2018; hace 4 meses. | UE (Grecia y Suecia) |
| OpenSSL | Proyecto OpenSSL | Sí | Licencia doble OpenSSL-SSLeay | Eric Young, Tim Hudson, Sun, Proyecto OpenSSL, y otros más | C, Lenguaje ensamblador | 1.1.0h (27 de marzo de 2018; hace 3 meses). 1.0.2o (27 de marzo de 2018; hace 3 meses). | Australia/UE |
| wolfSSL (previamente CyaSSL) | wolfSSL | Sí | GNU GPLv2+ y licencia comercial | wolfSSL Inc. | C | 3.15.3 (22 de junio de 2018; hace 15 días). | US |
| Implementación | Desarrollado por | Código Abierto | Licencia de Software | Propietario(s) de los derechos de autor | Escrito en | Última versión estable, fecha de publicación | Origen |

## Soporte de protocolo

Existen varias versiones del protocolo TLS. SSL 2.0 es una versión obsoleta del protocolo con debilidades significativas. SSL 3.0 (1996) y TLS 1.0 (1999) le suceden con dos desventajas en relleno-CBC, las cuales fueron explicadas en el 2001 por Serge Vaudenay. TLS 1.1 (2006) solo corrigió uno de los problemas al alternar aleatoriamente los vectores de inicialización (IV) para los bloques de cifrado CBC, mientras que el uso más problemático del cifrado mac-pad, no del cifrado pad-mac (el cual es más seguro), fue abordado con RFC7366. Una solución alternativa para SSL 3.0 y TLS 1.0, aproximadamente equivalente a los IVs aleatorios del TLS 1.1, fue adoptada abiertamente por varias implementaciones a finales del 2011, así que desde una perspectiva de seguridad, todas las versiones existentes de TLS 1.0, 1.1 y 1.2 proveen una fuerza equivalente en el protocolo base que, hasta al menos el 2030, resultan más apropiadas para la seguridad de 128 bits de acuerdo al NIST SP800-57. En el 2014 se descubrió la vulnerabilidad POODLE de SSL 3.0, la cual toma ventaja de la vulnerabilidades conocidas en CBC y de una negociación de respaldo insegura usada en los navegadores web.

TLS 1.2 (2008) es la versión más recientemente publicada del protocolo base, la cual introduce una forma de identificar los hashes usados para firmas digitales. Mientras permite el uso de funciones hash más fuertes para las firmas digitales en el futuro (rsa,sha256/sha384/sha512), por encima de su alternativa más conservadora, SSL 3.0 (rsa,sha1+md5), el cambio de protocolo TLS 1.2 inadvertida y sustancialmente debilita las firmas digitales por defecto y además provee (rsa,sha1) e incluso (rsa,md5).

La capa de seguridad de transporte de datagrama (DTLS o TLS de datagrama) 1.0 es una modificación del TLS 1.1 para una capa de transporte orientada a paquetes, donde la pérdida y reordenación de paquetes deben ser toleradas. La revisión de DTLS 1.2 basada en TLS 1.2 fue publicada en enero del 2012

Cabe notar que hay vulnerabilidades conocidas en SSL 2.0 y SSL 3.0. Con la excepción de los predecibles IVs (para los cuales existe una solución alternativa), todas las vulnerabilidades conocidas en la actualidad afectan a todas las versiones de TLS 1.0/1.1/1.2 por igual.

| Implementación | SSL 2.0 (inseguro) | SSL 3.0 (inseguro) | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 (Borrador) | DTLS 1.0 | DTLS 1.2 |
| - | - | - | - | - | - | - | - | - |
| GnuTLS | No(a) | Inhabilitado por defecto | Sí | Sí | Sí | Sí | Sí | Sí |
| OpenSSL | No | Habilitado por defecto | Sí | Sí | Sí | Sí | Sí | Sí |
| wolfSSL | No | Desahabilitado por defecto | Sí | Sí | Sí | Sí | Sí | Sí |
| Implementación | SSL 2.0 (inseguro) | SSL 3.0 (inseguro) | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 (Borrador) | DTLS 1.0 | DTLS 1.2 |

(a) El cliente SSL 2.0 Hello está soportado aun cuando SSL 2.0 no esté respaldado o esté inhabilitado por compatibilidades atrasadas.

## Criptografía de NSA Suite B

Los componentes requeridos para la Criptografía de NSA Suite B (RFC 6460) son:

* Estándar de Encriptación Avanzada (AES) con tamaños de clave de 128 y 256 bits. Para el flujo de tráfico, AES debería ser usado en Modo Contador (CTR) para tráfico de baja banda ancha o en Modo Contador/Galois (GCM), modo de operación para alto tráfico de banda ancha (véase modos de operación de cifrado en bloque) — encriptación simétrica
* Algoritmo de Firma Digital de Curva Elíptica (ECDSA) — firmas digitales
* Curva Elíptica Diffie–Hellman (ECDH) — acuerdo clave
* Algoritmo 2 de Hash Protegido (SHA-256 y SHA-384) — resumen del mensaje

Por medio de CNSSP-15, la curva elíptica de 256-bit (especificada en FIPS 186-2), SHA-256, y AES, claves de 128 bits son suficientes para proteger información clasificada hasta el nivel secreto, mientras que con la curva elíptica de 384-bits (especificada en FIPS 186-2), SHA-384, y AES, claves de 256-bits son necesarias para la protección de información de alta seguridad.

| GnuTLS | Sí |
| - | - |
| OpenSSL | Sí |
| wolfSSL | Sí |
| Implementación | TLS 1.2 Suite B |

## Certificaciones

Nótese que ciertas certificaciones han recibido serias críticas negativas de personas que, de hecho, han están involucradas en ellas.

| Implementación | FIPS 140-1, FIPS 140-2 | Solución FIPS Integrada |
| - | - | - |
| GnuTLS | Módulo criptográfico (#2780) Red Hat Enterprise Linux GnuTLS | |
| OpenSSL | Módulo de Objeto OpenSSL FIPS: 1.0 (#624), 1.1.1 (#733), 1.1.2 (#918), 1.2, 1.2.1, 1.2.2, 1.2.3 o 1.2.4 (#1051) 2.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.0.7 o 2.0.8 (#1747) | |
| wolfSSL | Módulo wolfCrypt FIPS: 3.6.0 (#2425) Véanse los detalles en NIST certificate para entornos operativos validados | Sí |
| Implementación | FIPS 140-1, FIPS 140-2 | Solución FIPS Integrada |

## Algoritmos de intercambio de claves (solo con certificado)

Esta sección lista la funcionalidad de la verificación de certificado disponible en las distintas implementaciones.

| Implementación | RSA | RSA-EXPORTACION (inseguro) | DHE-RSA (secreto-perfecto-hacia-adelante) | DHE-DSS (secreto-perfecto-hacia-adelante) | ECDH-ECDSA | ECDHE-ECDSA (secreto-perfecto-hacia-adelante) | ECDH-RSA | ECDHE-RSA (secreto-perfecto-hacia-adelante) | GOST R 34.10-94, 34.10-2001 |
| - | - | - | - | - | - | - | - | - | - |
| GnuTLS | Sí | No | Sí | Deshabilitado por defecto | No | Sí | No | Sí | No |
| OpenSSL | Sí | No | Sí | Deshabilitado por defecto | Sí | Sí | Sí | Sí | Sí |
| wolfSSL | Sí | No | Sí | No | Sí | Sí | Sí | Sí | No |
| Implementación | RSA | RSA-EXPORTACION (inseguro) | DHE-RSA (secreto-perfecto-hacia-adelante) | DHE-DSS (secreto-perfecto-hacia-adelante) | ECDH-ECDSA | ECDHE-ECDSA (secreto-perfecto-hacia-adelante) | ECDH-RSA | ECDHE-RSA (secreto-perfecto-hacia-adelante) | GOST R 34.10-94, 34.10-2001 |

## Algoritmos de intercambio de clave (intercambio de clave alternativo)

| Implementación | SRP | SRP-DSS | SRP-RSA | PSK-RSA | PSK | DHE-PSK (secreto-perfecto-hacia-adelante) | ECDH-PSK (secreto-perfecto-hacia-adelante) | KRB5 | DHE-ANON (inseguro) | ECDH-ANON (inseguro) |
| - | - | - | - | - | - | - | - | - | - | - |
| GnuTLS | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | Deshabilitado por defecto | Deshabilitado por defecto |
| OpenSSL | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Deshabilitado por defecto | Deshabilitado por defecto |
| wolfSSL | No | No | No | No | Sí | No | Sí | No | No | No |
| Implementación | SRP | SRP-DSS | SRP-RSA | PSK-RSA | PSK | DHE-PSK (secreto-perfecto-hacia-adelante) | ECDHE-PSK (secreto-perfecto-hacia-adelante) | KRB5 | DHE-ANON (inseguro) | ECDH-ANON (inseguro) |

## Métodos de verificación de certificado

| Implementación | Definido por aplicación | Validación de ruta PKIX | CRL | OCSP | DANE (DNSSEC) | Confianza al primer uso (TOFU) |
| - | - | - | - | - | - | - |
| GnuTLS | Sí | Sí | Sí | Sí | Sí | Sí |
| OpenSSL | Sí | Sí | Sí | Sí | Sí | No |
| wolfSSL | Sí | Sí | Sí | Sí | No | No |
| Implementación | Definido por aplicación | Validación de ruta PKIX | CRL | OCSP | DANE (DNSSEC) | Confianza al primer uso (TOFU) |

## Algoritmos de cifrado

| Implementación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado de flujo | Ninguno |
| - | - | - | - | - | - | - | - | - | - | - | - | - |
| Implementación | AES GCM | AES CCM | AES CBC | Camellia GCM | Camellia CBC | ARIA GCM | ARIA CBC | SEED CBC | 3DES EDE CBC (inseguro) | GOST 28147-89 CNT (propuesto) (1) | ChaCha20-Poly1305 | Nulo (inseguro) (2) |
| GnuTLS | Sí | Sí | Sí | Sí | Sí | No | No | No | Deshabilitado por defecto | No | Sí | Deshabilitado por defecto |
| OpenSSL | Sí | Deshabilitado por defecto | Sí | No | Deshabilitado por defecto | No | No | Deshabilitado por defecto | Deshabilitado por defecto | Sí | Sí | Deshabilitado por defecto |
| wolfSSL | Sí | Sí | Sí | No | Sí | No | No | No | Sí | No | Sí | Deshabilitado por defecto |
| Implementación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado de flujo | Ninguno |
| Implementación | AES GCM | AES CCM | AES CBC | Camellia GCM | Camellia CBC | ARIA GCM | ARIA CBC | SEED CBC | 3DES EDE CBC (inseguro) | GOST 28147-89 CNT (propuesto) | ChaCha20-Poly1305 | Nulo (inseguro) |

### Notas

(1) Este algoritmo aún no está definido como una suite de cifrado en RFC; está como una propuesta en borrador.

(2) Solo autenticación, no encriptación.

### Algoritmos obsoletos

| Implementación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado de flujo | Cifrado de flujo |
| - | - | - | - | - | - | - |
| Implementación | IDEA CBC RFC 5469(inseguro) (1) | DES CBC (inseguro) (1) | DES-40 CBC (EXPORTACION, inseguro) (1) | RC2-40 CBC (EXPORTACION, inseguro) (2) | RC4-128 (inseguro) (3) | RC4-40 (EXPORTACION, inseguro) (4)(2) |
| GnuTLS | No | No | No | No | Deshabilitado por defecto | No |
| OpenSSL | Deshabilitado por defecto | Deshabilitado por defecto | No | No | Deshabilitado por defecto | No |
| wolfSSL | Deshabilitado por defecto | No | No | No | Deshabilitado por defecto | No |
| Implementación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado en bloque con modo de operación | Cifrado de flujo | Cifrado de flujo |
| Implementación | IDEA CBC (inseguro) | DES CBC (inseguro) | DES-40 CBC (EXPORTACION, inseguro) | RC2-40 CBC (EXPORTACION, inseguro) | RC4-128 (inseguro) | RC4-40 (EXPORTACION, inseguro) |

**Notas**

(1) IDEA y DES han sido removidos del TLS 1.2

(2) 40 bits de intensidad de cifrado fueron diseñados para operar a longitudes de clave reducidas para cumplir con las regulaciones de los Estados Unidos acerca de la exportación de software criptográfico que contiene algoritmos de cifrado de alta intensidad (véase Exportación de criptografía de los Estados Unidos). Estas suites débiles están prohibidas en TLS 1.1 y versiones posteriores.

(3) Lo ataques RC4 debilitan y/o interrumpen el RC4 usado en SSL/TLS. El uso de RC4 está prohibido por el RFC 7465.

(4) Loas ataques RC4 debilitan y/o interrumpen el RC4 usado en SSL/TLS.

## Curvas elípticas respaldadas

Esta sección lista las curvas elípticas respaldadas por cada implementación.

| Implementación | sect163k1 NIST K-163 (1) | sect163r1 (2) | sect163r2 NIST B-163 (3) | sect193r1 (4) | sect193r2 (5) | sect233k1 NIST K-233 (6) | sect233r1 NIST B-233 (7) | sect239k1 (8) | sect283k1 NIST K-283 (9) | sect283r1 NIST B-283 (10) | sect409k1 NIST K-409 (11) | sect409r1 NIST B-409 (12) | sect571k1 NIST K-571 (13) | sect571r1 NIST B-571 (14) |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| GnuTLS | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
| OpenSSL | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí |
| wolfSSL | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
| Implementación | sect163k1 NIST K-163 (1) | sect163r1 (2) | sect163r2 NIST B-163 (3) | sect193r1 (4) | sect193r2 (5) | sect233k1 NIST K-233 (6) | sect233r1 NIST B-233 (7) | sect239k1 (8) | sect283k1 NIST K-283 (9) | sect283r1 NIST B-283 (10) | sect409k1 NIST K-409 (11) | sect409r1 NIST B-409 (12) | sect571k1 NIST K-571 (13) | sect571r1 NIST B-571 (14) |
| Implementación | secp160k1 (15) | secp160r1 (16) | secp160r2 (17) | secp192k1 (18) | secp192r1 prime192v1 NIST P-192 (19) | secp224k1 (20) | secp224r1 NIST P-244 (21) | secp256k1 (22) | secp256r1 prime256v1 NIST P-256 (23) | secp384r1 NIST P-384 (24) | secp521r1 NIST P-521 (25) | Curva principal arbitraria (0xFF01) | Curvas arbitrarias char2 curves (0xFF02) |
| GnuTLS | No | No | No | No | Sí | No | Sí | No | Sí | Sí | Sí | No | No |
| OpenSSL | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No |
| wolfSSL | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No |
| Implementación | secp160k1 (15) | secp160r1 (16) | secp160r2 (17) | secp192k1 (18) | secp192r1 prime192v1 NIST P-192 (19) | secp224k1 (20) | secp224r1 NIST P-244 (21) | secp256k1 (22) | secp256r1 prime256v1 NIST P-256 (23) | secp384r1 NIST P-384 (24) | secp521r1 NIST P-521 (25) | arbitrary prime curves (0xFF01) | arbitrary char2 curves (0xFF02) |
| Implementación | brainpoolP256r1 (26) | brainpoolP384r1 (27) | brainpoolP512r1 (28) | X25519 | Curve448 Ed448-Goldilocks | M221 Curve2213 | E222 | Curve1174 | E382 | M383 | Curve383187 | Curve41417 Curve3617 | M511 Curve511187 | E521 |
| GnuTLS | No | No | No | Sí | No | No | No | No | No | No | No | No | No | No |
| OpenSSL | Sí | Sí | Sí | Sí | Sí | No | No | No | No | No | No | No | No | No |
| wolfSSL | Sí | Sí | Sí | Sí | No | No | No | No | No | No | No | No | No | No |
| Implementación | brainpoolP256r1 (26) | brainpoolP384r1 (27) | brainpoolP512r1 (28) | Curve25519 | Curve448 Ed448-Goldilocks | M221 Curve2213 | E222 | Curve1174 | E382 | M383 | Curve383187 | Curve41417 Curve3617 | M511 Curve511187 | E521 |

## Integridad de datos

| Implementación | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA256/384 | AEAD | GOST 28147-89 IMIT | GOST R 34.11-94 |
| - | - | - | - | - | - | - |
| GnuTLS | Sí | Sí | Sí | Sí | No | No |
| OpenSSL | Sí | Sí | Sí | Sí | Sí | Sí |
| wolfSSL | Sí | Sí | Sí | Sí | No | No |
| Implementación | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA256/384 | AEAD | GOST 28147-89 IMIT | GOST R 34.11-94 |

## Compresión

Nótese que la falla de seguridad CRIME toma ventaja de la compresión TLS, así que las implementaciones conservadoras no habilitan la compresión al nivel de TLS. La compresión HTTP no está relacionada ni se ve afectada por este abuso, pero se aprovecha del relacionado ataque BREACH.

| Implementación | DEFLATE (inseguro) |
| - | - |
| GnuTLS | Deshabilitado por defecto |
| OpenSSL | Deshabilitado por defecto |
| wolfSSL | Deshabilitado por defecto |
| Implementación | DEFLATE |

## Extensiones

En esta sección se listan las extensiones que cada implementación mantiene. Nótese que la extensión de Renegociación Segura es crítica para la seguridad del cliente HTTPS. Clientes TLS que no la implementan son vulnerables a ataques, independientemente de si el cliente implementa la renegociación TLS o no.

| Implementación | Renegociación Segura | Indicación del nombre de servidor | ALPN | Solicitud de estado de certificado | OpenPGP | Datos suplementarios | Ticket de sesión | Exportador de material de tipeo | Longitud máxima de fragmento | Truncado HMAC | Encrypt-then-MAC | TLS de vuelta atrás SCSV | Secreto maestro extendido | Relleno ClientHello | Claves públicas primas |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| GnuTLS | Sí | Sí | Sí | Sí | Obsoleto | Sí | Sí | Sí | Sí | No | Sí | Sí | Sí | Sí | No |
| OpenSSL | Sí | Sí | Sí | Sí | No | No? | Sí | Sí? | No | No | No | Sí | Sí | Sí | Desconocido |
| wolfSSL | Sí | Sí | Sí | Sí | No | No | Sí | No | Sí | Sí | No | No | Sí | No | Desconocido |
| Implementación | Renegociación segura | Indicación del nombre de servidor | ALPN | Solicitud de estado de certificado | OpenPGP | Datos suplementarios | Ticket de sesión | Exportador de material de tipeo | Longitud máxima de fragmento | HMAC truncado | Encrypt-then-MAC | TLS de vuelta atrás SCSV | Secreto maestro extendido | Relleno ClientHello | Claves públicas primas |

## Criptografía asistida

Esta sección lista las habilidades de implementación conocidas por tomar ventaja de los sets de instrucción de CPU que optimizan la encriptación, o que utilizan dispositivos específicos del sistema que permiten accesar el hardware criptográfico subyacente para la aceleración o separación de datos.

| Implementación | Dispositivo PKCS #11 | Intel AES-NI | VIA PadLock | ARMv8-A | Intel SGX | Intel QAT |
| - | - | - | - | - | - | - |
| GnuTLS | Sí | Sí | Sí | Sí | No | No |
| OpenSSL | Sí | Sí | Sí | Sí | | No |
| wolfSSL | No | Sí | No | Sí | Sí | Sí |
| Implementación | Dispositivo PKCS #11 | Intel AES-NI | VIA PadLock | ARMv8-A | Intel SGX | Intel QAT |

## Soporte basado en sistema

Esta sección lista la habilidad de cada implementación de aprovechar el soporte específico del sistema operativo disponible, o incluso el soporte provisto por alguna otra implementación.

| Implementación | /dev/crypto | Windows CSP | CommonCrypto | Motor OpenSSL |
| - | - | - | - | - |
| GnuTLS | Sí | No | No | No |
| OpenSSL | Sí | No | No | Sí |
| wolfSSL | No | Parcial | No | No |
| Implementación | /dev/crypto | Windows CSP | CommonCrypto | Motor OpenSSL |

## Módulo criptográfico/Token de soporte

| Implementación | Soporte TPM | Token de soporte de hardware | Objetos identificados vía |
| - | - | - | - |
| GnuTLS | Sí | PKCS11 | RFC7512 PKCS #11 URLs |
| OpenSSL | Sí | PKCS11 (vía módulo por terceros) | RFC7512 PKCS #11 URLs |
| wolfSSL | No | No | |
| Implementación | Soporte TPM | Token de soporte de hardware | Objetos identificados vía |

## Dependencias de código

| Implementación | Dependencias | Dependencias opcionales |
| - | - | - |
| GnuTLS | libc nettle gmp | zlib (compresión) p11-kit (PKCS #11) trousers (TPM) |
| OpenSSL | libc | zlib (compresión) |
| wolfSSL | Ninguna | libc, zlib (compresión) |
| Implementación | Dependencias | Dependencias opcionales |

## Entorno de desarrollo

| Implementación | Namespace | Herramientas de estructuración | Manual API | Crypto back-end | Capa de compatibilidad OpenSSL |
| - | - | - | - | - | - |
| GnuTLS | gnutls_* | Autoconf, automake, libtool | Manual y referencia API (HTML, PDF) | Externa, libnettle | Sí (limitada) |
| OpenSSL | SSL_* SHA1_* MD5_* EVP_* ... | Makefile | Man pages | Incluida (monolítica) | — |
| wolfSSL | CyaSSL_* SSL_* | Autoconf, automake, libtool, espacios de trabajo de proyecto MSVC, proyectos XCode, proyectos CodeWarrior, proyectos MPLAB X, Keil, IAR, Clang, GCC | Manual y referencia API (HTML, PDF) | Incluida (monolítica) | Sí (cerca del 10% de API) |
| Implementación | Namespace | Herramientas de estructuración | Manual API | Crypto back-end | Capa de compatibilidad OpenSSL |

## Problemas de portabilidad

| Implementación | Requisitos de plataforma | Requisitos de red | Hilo de seguridad | Semilla aleatoria | Capacidad de compilación cruzada | No OS (sistema completo) | Sistemas operativos respaldados |
| - | - | - | - | - | - | - | - |
| GnuTLS | C89 | POSIX send y rcv. API proporcionará su propio reemplazo. | Enlace de hilo seguro, necesita enganche mutex personalizado en caso de que no hayan hilos POSIX o Windows disponibles. | Depende de la plataforma | Sí | No | Por lo general cualquier plataforma POSIX o Windows, plataformas comúnmente probadas incluyen GNU/Linux, Win32/64, OS X, Solaris, OpenWRT, FreeBSD, NetBSD, OpenBSD. |
| OpenSSL | C89? | ? | Necesita retrollamada mutex | Establecido a través de API nativo | Sí | No | Unix, DOS (con djgpp), Windows, OpenVMS, MacOS, NetWare, eCos |
| wolfSSL | C89 | POSIX send y recv. API proporcionará su propio reemplazo. | Enlace de hilo seguro, necesita enganche mutex si PThreads o WinThreads no están disponibles, puede ser desconectado | Establecido a través de wolfCrypt | Sí | Sí | Win32/64, Linux, OS X, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, Linux embebido, Haiku, OpenWRT, iPhone (iOS), Android, Nintendo Wii y Gamecube a través de DevKitPro, QNX, MontaVista, OpenCL, NonStop, TRON/ITRON/µITRON, Micrium µC OS, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, HP/UX, Keil RTX, TI-RTOS |
| Implementación | Requisitos de plataforma | Requisitos de red | Hilo de seguridad | Semilla aleatoria | Capacidad de compilación cruzada | No OS (sistema completo) | Sistemas operativos respaldados |
