Esta es la parte #2 de Awesome Curated: The Tools, la serie donde analizo en profundidad las herramientas que pasan el filtro de nuestro sistema de curaciĂłn automático. Si te perdiste el arranque, el post #1 fue sobre Docker for Novices — una joyita que aparece en 16 listas. Hoy el nĂşmero es más modesto (7), pero el tema es bastante más oscuro: criptografĂa aplicada.
Hace unos años, laburando en una app que manejaba datos mĂ©dicos, tuve que implementar cifrado end-to-end entre el cliente mobile y el servidor. La idea era simple: que los datos del paciente nunca viajen en claro, ni siquiera en la base de datos. La ejecuciĂłn fue una pesadilla. AbrĂ la doc de OpenSSL y sentĂ que me habĂan tirado un manual de fĂsica cuántica en alemán. Curvas elĂpticas, parámetros de padding, longitudes de clave, modos de operaciĂłn de AES... ÂżTengo que saber todo esto para simplemente cifrar un string? El problema de la crypto para devs no es que sea imposible. Es que la API de bajo nivel te exige un conocimiento que el 95% de los proyectos no necesita — y que si lo hacĂ©s mal, no hay warning en runtime. Tu cĂłdigo compila perfecto y tu crypto está rota. Silenciosamente. Eso es lo más peligroso.
AhĂ es exactamente donde entra Themis.
Qué hace
Themis es una librerĂa de criptografĂa de alto nivel, open source (Apache 2.0), desarrollada por Cossack Labs. El pitch es simple: te da primitivas criptográficas serias — ECC, AES, ECDH, ECDSA — pero envueltas en una API que un dev backend puede usar sin necesitar un posgrado en matemáticas. Cubre tres casos de uso principales:
- Secure Cell: cifrado simétrico para almacenar datos en reposo. Pensalo como "quiero guardar esto en la DB y que nadie que acceda a la base pueda leer el contenido". Usa AES-GCM por abajo.
- Secure Message: mensajerĂa asimĂ©trica para intercambio de datos entre dos partes. ECC + ECDSA para firmar, RSA + PSS + PKCS#7 como alternativa. El clásico "encriptalo con la clave pĂşblica del destinatario".
- Secure Session: sesiones con forward secrecy. Esto es lo que diferencia a Themis de una librerĂa de cifrado genĂ©rica. Usa ECDH para el key agreement — significa que si alguien captura el tráfico hoy y consigue las claves mañana, no puede descifrar lo que capturĂł. Cada sesiĂłn tiene claves efĂmeras.
El diferencial real es el soporte multi-lenguaje y multi-plataforma. Themis tiene wrappers para Python, Go, JavaScript (Node y browser), Java, Kotlin, Swift, Objective-C, C++, Ruby y PHP. Si tenés un servidor en Go y una app mobile en Swift, los dos hablan el mismo protocolo. No tenés que reimplementar nada ni rezar para que las dos implementaciones sean compatibles.
# Ejemplo: cifrar datos en reposo con Secure Cell (Python)
from pythemis.scell import SCellSeal
# La clave la generás una vez y la guardás segura (env var, secrets manager, etc.)
clave_maestra = b'mi-clave-secreta-de-32-bytes-ok!'
cell = SCellSeal(key=clave_maestra)
# Cifrar — context es opcional pero recomendado (asocia el dato a su contexto)
dato_original = b'datos del paciente muy sensibles'
contexto = b'registro-medico-id-12345'
dato_cifrado = cell.encrypt(dato_original, context=contexto)
# dato_cifrado es bytes — lo guardás en la DB asĂ
print(dato_cifrado) # bytes ilegibles
# Descifrar — necesitás la misma clave Y el mismo contexto
dato_recuperado = cell.decrypt(dato_cifrado, context=contexto)
print(dato_recuperado) # b'datos del paciente muy sensibles'
// Ejemplo: Secure Message entre cliente iOS y servidor (Swift)
import themis
// En el cliente: generás tu par de claves
let keyPair = TSKeyGen(algorithm: .EC)!
let clavePublicaCliente = keyPair.publicKey
let clavePrivadaCliente = keyPair.privateKey
// El servidor tiene su propio par. El cliente conoce la clave pĂşblica del servidor.
// Encriptás el mensaje con tu clave privada + la pública del servidor
let encryptor = TSMessage(
inEncryptModeWithPrivateKey: clavePrivadaCliente,
peerPublicKey: clavePublicaServidor // la obtuviste en el handshake inicial
)
do {
let mensajeOriginal = "datos sensibles del usuario".data(using: .utf8)!
// Solo el servidor (con su clave privada) puede descifrar esto
let mensajeCifrado = try encryptor.wrap(mensajeOriginal)
// mandás mensajeCifrado al servidor via HTTP/WebSocket
} catch {
print("Error de cifrado: \(error)")
}
Por qué está en la lista
Siete listas independientes de awesome no se ponen de acuerdo por accidente. La comunidad de seguridad tiende a ser bastante agnóstica de las modas — si algo llega a ese nivel de consenso en el ecosistema de herramientas de crypto, es porque resuelve un problema real con criterio.
El veredicto del sistema de curaciĂłn fue WORTH_TRYING, pero yo lo marquĂ© como GEM despuĂ©s de revisarlo en profundidad, y lo sostengo. El motivo principal es el forward secrecy en Secure Session. La mayorĂa de los devs que implementan crypto en sus apps nunca piensan en esto. Cifran los datos, listo. Pero si un atacante captura tráfico cifrado durante meses y despuĂ©s compromete las claves del servidor, puede descifrar todo ese historial. Con forward secrecy, eso no pasa — las claves efĂmeras de cada sesiĂłn se descartan. Es una propiedad de seguridad que TLS moderno implementa, pero que cuando construĂs tu propio protocolo de comunicaciĂłn tenĂ©s que pensar explĂcitamente. Themis lo hace por vos.
Comparado con libsodium — que es la alternativa más directa y tiene una comunidad más grande — Themis gana en el escenario multi-plataforma con mobile. La API de libsodium es excelente pero tenés que hacer más trabajo para que el cliente iOS y el servidor Go se entiendan. Themis resuelve esa capa de interoperabilidad out of the box. Frente al AWS Encryption SDK, la diferencia es obvia: Themis es open source, no te ata a ningún cloud, podés auditarlo vos mismo o pagar a alguien para que lo audite.
Además, Cossack Labs tiene experiencia real en seguridad empresarial. No es un proyecto de una persona que lo mantiene los fines de semana. Han hecho auditorĂas de la librerĂa (los reportes están disponibles en el repo). Eso pesa cuando estás eligiendo una dependencia de crypto.
Cuándo NO usarlo
La abstracciĂłn de Themis es su mayor fortaleza y tambiĂ©n su techo. Si tu caso de uso requiere control fino sobre los parámetros criptográficos — elegir el tamaño exacto del nonce, usar un modo de operaciĂłn especĂfico que Themis no expone, o integrar con un HSM con una API particular — te vas a quedar corto. Para eso, libsodium o directamente OpenSSL/BoringSSL son la respuesta correcta, aunque tengas que bancarte la curva de aprendizaje.
TambiĂ©n tenĂ©s que evaluar el riesgo de supply chain. Agregar cualquier dependencia de crypto externa es una decisiĂłn seria. Themis tiene auditorĂas, tiene historial, tiene mantenimiento activo — pero si tu organizaciĂłn tiene polĂticas estrictas sobre quĂ© librerĂas de seguridad pueden entrar al stack (algo muy comĂşn en fintech regulado o salud), necesitás pasar esto por el proceso de aprobaciĂłn correspondiente. Alternativas a evaluar: libsodium para proyectos donde querĂ©s máximo control, AWS Encryption SDK si ya estás all-in en AWS y eso te cierra el tema de auditorĂas.
Cierre
Si alguna vez abriste la doc de OpenSSL y cerraste la pestaña pensando "hay que ser ingeniero en criptografĂa para hacer esto", Themis es para vos. No reemplaza entender los conceptos — igual tenĂ©s que saber quĂ© es symmetric vs asymmetric encryption, quĂ© significa forward secrecy — pero sĂ te saca del quilombo de implementar los detalles del protocolo a mano. Y en crypto, los detalles son exactamente donde todo se rompe.
Este fue el post #2 de Awesome Curated: The Tools. Cada herramienta que aparece acá pasĂł por consenso de mĂşltiples listas, análisis de IA y veredicto humano mĂo. La serie entera está pensada para que cuando necesitĂ©s una tool en un dominio especĂfico, tengas un lugar donde alguien ya hizo el trabajo de filtrar el ruido. Si querĂ©s seguir la serie, la encontrás completa en /blog/series/awesome-curated-tools.

