0Pricing
Cryptology Academy · Lección

Google Tink: criptografía segura de alto nivel

Utilice la API de Tink basada en keysets para realizar operaciones criptográficas habituales sin conocimientos especializados de criptografía.

Google Tink: criptografía segura de alto nivel es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.

Descripción general y motivación de Tink

Tink es una biblioteca criptográfica de código abierto desarrollada por el equipo de criptografía de Google, diseñada para proporcionar criptografía segura y fácil de usar. Su motivación principal es evitar los patrones habituales de uso incorrecto de la criptografía que se producen incluso cuando desarrolladores experimentados utilizan bibliotecas de nivel inferior. La API de Tink está diseñada para que la operación correcta sea la opción que requiera menos esfuerzo, lo que dificulta la creación accidental de configuraciones inseguras.

Abstracción basada en keysets

Tink organiza las claves en keysets en lugar de exponer objetos de clave individuales. Las aplicaciones trabajan con handles de keyset, no con bytes de clave sin procesar. Esta abstracción evita la exposición accidental de claves, permite una rotación de claves fluida y hace posible almacenar las claves en sistemas remotos de gestión de claves sin que la aplicación vea directamente el material de clave. El concepto de keyset es fundamental para el diseño seguro de Tink.

Interfaz AEAD

La interfaz AEAD (Authenticated Encryption with Associated Data) de Tink proporciona operaciones de cifrado y descifrado. AeadFactory.getPrimitive(keyset) devuelve un objeto Aead; llamar a aead.encrypt(plaintext, associatedData) devuelve un texto cifrado. Tink selecciona automáticamente el algoritmo de cifrado según el keyset (por ejemplo, AES-256-GCM) y genera un nonce aleatorio. La interfaz oculta todos los detalles del algoritmo, la gestión del nonce y la codificación del formato.

Interfaz de MAC

La interfaz MAC de Tink proporciona operaciones de cálculo y verificación para los códigos de autenticación de mensajes. MacFactory.getPrimitive(keyset) devuelve un objeto Mac. mac.computeMac(data) devuelve la etiqueta de autenticación; mac.verifyMac(tag, data) la verifica y lanza una excepción de seguridad si la verificación falla. El algoritmo predeterminado es HMAC-SHA256. La interfaz evita errores comunes, como comparar MAC mediante la igualdad convencional de cadenas en lugar de utilizar una comparación en tiempo constante.

Interfaz de firmas digitales

Tink proporciona las interfaces independientes PublicKeySign y PublicKeyVerify para las firmas digitales. Los objetos de firma y verificación se derivan de referencias a conjuntos de claves diferentes (privado y público, respectivamente), lo que evita utilizar accidentalmente una clave privada para verificar o viceversa. Las implementaciones predeterminadas de Tink son Ed25519 y ECDSA P-256, y ECDSA determinista está disponible para evitar vulnerabilidades relacionadas con la aleatoriedad.

Interfaz de cifrado híbrido

Las interfaces HybridEncrypt y HybridDecrypt de Tink implementan ECIES (Esquema Integrado de Cifrado de Curvas Elípticas). El cifrado híbrido combina el intercambio de claves asimétricas con el cifrado simétrico: el emisor genera una clave efímera, realiza ECDH con la clave pública del destinatario, deriva una clave simétrica y cifra mediante AEAD. Esto permite cifrar mensajes grandes utilizando claves asimétricas sin la sobrecarga del cifrado puramente asimétrico.

Proceso de rotación de conjuntos de claves

La rotación de claves en Tink es segura y compatible con versiones anteriores. Para rotar las claves: genere una clave nueva y añádala al conjunto de claves, marque la nueva clave como principal (los cifrados futuros la utilizarán) y conserve las claves antiguas en el conjunto de claves para descifrar los textos cifrados existentes. Los textos cifrados antiguos seguirán descifrándose porque las claves que no son principales permanecen disponibles para el descifrado. Cuando todos los textos cifrados antiguos se hayan vuelto a cifrar o hayan caducado, elimine las claves antiguas del conjunto de claves.

Serialización de conjuntos de claves

Los conjuntos de claves de Tink se serializan como JSON o en formato binario de Protocol Buffers. El formato JSON es legible para las personas y resulta útil para la depuración. El formato binario es más compacto para producción. Los conjuntos de claves serializados que contienen claves privadas deben cifrarse antes de almacenarse. Tink permite almacenar conjuntos de claves cifrados mediante el cifrado AEAD simétrico estándar o delegar el almacenamiento en un KMS.

Integración con KMS para el cifrado de conjuntos de claves

Tink se integra con los principales proveedores de KMS: AWS KMS, Google Cloud KMS y HashiCorp Vault. En lugar de cifrar los conjuntos de claves con una clave AEAD local, Tink envuelve la clave de cifrado del conjunto de claves mediante el KMS. El cifrado real del conjunto de claves utiliza una clave de cifrado de datos (DEK) generada localmente, y la DEK se cifra mediante la clave de cifrado de claves (KEK) del KMS. Esto sigue el patrón de cifrado envolvente utilizado por los proveedores de servicios en la nube.

AEAD de flujo para archivos grandes

El AEAD estándar requiere cargar todo el mensaje en memoria para cifrarlo y descifrarlo. La interfaz Streaming AEAD de Tink cifra los archivos grandes por segmentos, lo que permite cifrar y descifrar mediante un flujo sin almacenar en un búfer todo el texto plano. Cada segmento se autentica de forma independiente, y durante el descifrado se verifican el orden y la integridad de los segmentos. Esto es esencial para cifrar copias de seguridad, vídeos y otros archivos grandes.

Compatibilidad con lenguajes y ecosistema

Tink está disponible para Java, Python, Go y C++, con API idiomáticas para cada lenguaje. La interoperabilidad entre lenguajes está garantizada: un archivo cifrado con Tink en Python puede descifrarse con Tink en Java. Esto hace que Tink sea adecuado para sistemas con varios servicios escritos en distintos lenguajes que necesitan intercambiar datos cifrados. Tink también se integra con Protocol Buffers para configurar conjuntos de claves con seguridad de tipos.

Rotación de conjuntos de claves de Tink

Durante la rotación de claves de Tink, ¿qué sucede con los textos cifrados con la clave antigua (no principal)?

Recapitulación de Google Tink

Recapitulación de Tink: la abstracción basada en conjuntos de claves evita exponer claves sin procesar; la interfaz AEAD oculta la gestión de nonces y la selección del algoritmo; la interfaz MAC utiliza internamente la verificación en tiempo constante; las interfaces de firma digital y cifrado híbrido evitan el uso incorrecto de las interfaces; la rotación de claves es compatible con versiones anteriores (las claves antiguas permiten descifrar hasta que se eliminan); la integración con KMS sigue el patrón de cifrado envolvente; el AEAD de flujo gestiona archivos grandes; y la interoperabilidad entre lenguajes está garantizada.

Preguntas frecuentes

¿La lección «Google Tink: criptografía segura de alto nivel» es gratis?

Sí — el texto completo de «Google Tink: criptografía segura de alto nivel» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Google Tink: criptografía segura de alto nivel»?

Utilice la API de Tink basada en keysets para realizar operaciones criptográficas habituales sin conocimientos especializados de criptografía. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cryptology Academy?

No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Google Tink: criptografía segura de alto nivel»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?

Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. libsodium: una biblioteca criptográfica resistente al uso incorrecto
  2. API de OpenSSL: estructuras principales y errores comunes
  3. Google Tink: criptografía segura de alto nivel
  4. Auditoría y selección de dependencias criptográficas
← Volver a Cryptology Academy