Skip to content

Methodology

Metodología de herramientas de código

Primitivas conformes a RFC, ejecución solo en el navegador, cero análisis de los datos enviados.

By Published

El clúster de Código incluye diez utilidades, todas las cuales se ejecutan completamente en el navegador y ninguna de las cuales envía su payload a ningún lugar. Esta página documenta lo que cada herramienta hace realmente: los RFC a los que se ajusta, las primitivas que usa y lo que deliberadamente no hace.

Base64 (RFC 4648)

Alfabeto estándar: A-Z a-z 0-9 + /, con relleno= hasta múltiplos de 4. La variante segura para URL (base64url) reemplaza + con - y / con _, omitiendo el relleno.

Implementación: las funciones nativas de JavaScript btoa / atob manejan la codificación, pero solo admiten cadenas Latin-1 (cada byte es un carácter). Para UTF-8 primero codificamos la cadena con TextEncoder, luego ejecutamos btoa sobre el array de bytes resultante. Esta es la única manera de codificar en Base64 de forma segura texto Unicode arbitrario en el navegador sin dependencias.

Decodificador JWT (solo inspección, sin verificación)

Los JWT (RFC 7519) son tres segmentos codificados en base64url separados por puntos: encabezado.payload.firma. Nuestro decodificador divide, descodifica en base64url el encabezado y el payload, los analiza como JSON y muestra el resultado. No verificamos la firma.

La verificación de la firma requiere la clave de firma, típicamente un secreto HMAC o una clave pública RSA/ECDSA, que debe provenir del emisor. Una herramienta de solo navegador no puede verificar significativamente un JWT emitido por un tercero, por lo que no fingimos hacerlo. Use el decodificador para inspección; use la pila del lado del servidor de su aplicación para la verificación real.

Conversor de mayúsculas

Traduce entre camelCase, snake_case, kebab-case, PascalCase, CONSTANT_CASE, Title Case, Sentence case y lower/UPPER. El algoritmo divide la entrada en «palabras» usando una expresión regular que detecta transiciones de mayúsculas, guiones, guiones bajos y espacios, luego reensambla en la convención objetivo.

Caso extremo: números en identificadores. Nuestra convención es mantener los límites número-letra como límites de palabra (así parseInt32 se divide en parse, int, 32) pero no dividir los límites letra-número dentro de secuencias que claramente parecen identificadores (así md5 permanece como una sola palabra, no md_5).

Generador de hash

SHA-1, SHA-256, SHA-384, SHA-512 a través de la Web Crypto API (crypto.subtle.digest), que es una envoltura delgada sobre la implementación nativa del sistema operativo. Deliberadamente no incluimos MD5: el navegador no lo proporciona de forma nativa (porque es criptográficamente roto) y preferimos no añadir un shim de 2 KB para soportar una función hash que nadie debería usar para nada relacionado con la seguridad.

La salida es hexadecimal en minúsculas. Todas las operaciones son síncronas desde la perspectiva del usuario, a pesar de que la Web Crypto API es asíncrona: la latencia en dispositivos modernos es sub-milisegundo para entradas de menos de un megabyte.

Generador UUID

Dos variantes:

  • v4 (aleatorio): crypto.randomUUID() cuando está disponible, con respaldo a un generador manual impulsado por crypto.getRandomValues. 122 bits de entropía.
  • v7 (marca de tiempo + aleatorio): 48 bits de marca de tiempo Unix en ms + 74 bits aleatorios. Ordenable por tiempo de generación, lo que hace de v7 la opción preferida para claves primarias de bases de datos.

Generador de contraseñas

Usa crypto.getRandomValues con muestreo de rechazo contra el mayor múltiplo del tamaño del conjunto de caracteres que cabe en un uint32. Esto elimina el sesgo modular: el enfoque ingenuo de random32 % tamañoConjunto tiene sesgo cuando el tamaño del conjunto no divide 2³² uniformemente, lo que ocurre con todos los conjuntos de caracteres realistas.

La entropía se calcula como longitud × log₂(conjunto) bits y se muestra en tiempo real. La etiqueta de fortaleza mapea la entropía en cinco bandas (muy débil / débil / regular / fuerte / muy fuerte) con umbrales que siguen la guía de seguridad común (NIST SP 800-63B recomienda ≥ 80 bits para uso de alto riesgo).

Detalles del algoritmo: las primitivas de entropía y aleatoriedad

Los generadores de contraseñas y UUID son las únicas herramientas de este clúster que dependen de aleatoriedad criptográficamente fuerte; su corrección descansa en dos primitivas del navegador.

Selección de caracteres sin sesgo (muestreo de rechazo)

Dado un conjunto de caracteres de tamaño K y un valor aleatorio sin signo de 32 bits r, el método ingenuo r % K tiene sesgo hacia índices más pequeños a menos que K divida 2³². Calculamos umbral = 2³² − (2³² mod K), extraemos, y rechazamos cualquier r ≥ umbral. Número esperado de extracciones por carácter: < 1.05 para cualquier K ≤ 2³²/16. La salida se distribuye uniformemente sobre el conjunto de caracteres.

Contabilidad de entropía

La entropía de la contraseña es longitud × log₂(K) bits. Nuestras bandas de fortaleza siguen la guía NIST SP 800-63B:

BandaEntropía (bits)Estimación de fuerza bruta (10⁹ intentos/seg)
Muy débil< 40segundos a horas
Débil40-60horas a semanas
Regular60-80meses a años
Fuerte80-100siglos
Muy fuerte≥ 100tiempo geológico

Diseño de UUID v7 (RFC 9562)

bits[0..47]   = unix_ms (48 bits)
bits[48..51]  = version = 0111 (4 bits)
bits[52..61]  = aleatorio o contador sub-ms (10 bits)
bits[62..63]  = variant = 10 (2 bits)
bits[64..127] = aleatorio (64 bits)
total aleatorio: 74 bits — resistente a colisiones en la práctica

Fuentes y referencias

Cada herramienta del clúster se corresponde con una especificación primaria: Base64 con RFC 4648, JWT con RFC 7519, hashes con FIPS PUB 180-4, UUID con RFC 9562, entropía de contraseñas con NIST SP 800-63B. La Web Crypto API en sí es una recomendación W3C. Véase el bloque de fuentes a continuación para las URL canónicas.

Supuestos y limitaciones

  • Ejecución solo en el navegador. Las herramientas asumen un navegador moderno con Web Crypto. Los entornos antiguos o endurecidos (algunos bloqueos de kioscos, Node del lado del servidor sin shims) recurrirán a una implementación JS y perderán la fortaleza criptográfica.
  • Sin verificación de firma. La descodificación JWT inspecciona pero no verifica. No use esta herramienta como parte de un pipeline de autenticación.
  • Sin MD5. Criptográficamente roto para uso autenticado; omitido intencionalmente incluso para sumas de verificación. Use SHA-256 con un pequeño compromiso de rendimiento.
  • Sin streaming para entradas grandes. Las herramientas de hash y Base64 cargan la entrada completa en memoria. Las entradas de más de 100 MB pausarán la pestaña durante la codificación.
  • Sin telemetría de payload. No registramos, almacenamos ni transmitimos nada pegado en estas herramientas. La contrapartida: tampoco podemos depurar por qué una entrada específica se muestra incorrectamente sin que el usuario lo reproduzca.
  • Las marcas de tiempo de UUID v7 tienen precisión de milisegundo. Generar más de 1000 UUID en el mismo milisegundo depende de los 10 bits de aleatoriedad sub-ms para la unicidad del orden.
  • La fortaleza de la contraseña es una heurística. La dificultad real del ataque depende de los patrones conocidos por el atacante (diccionario, conjuntos de contraseñas filtradas), no solo de la entropía.

Lo que no hacemos

  • Cifrar o descifrar contenido. La Web Crypto API lo soporta; no exponemos una interfaz de usuario porque el uso incorrecto de las API de criptografía es una trampa.
  • Verificar JWT. Véase arriba.
  • Formatear estructuralmente: preservamos el formato del usuario donde sea posible. Para un formateo completo use un formateador dedicado.
  • Registrar payloads. Nada de lo que el usuario pega sale del navegador, nunca.

Frequently asked questions

¿Qué estándar Base64 implementa Convertitive?
El alfabeto estándar definido en RFC 4648 §4 (caracteres A-Z, a-z, 0-9, +, / con relleno =). La variante base64url de RFC 4648 §5 (+ → -, / → _, sin relleno) también es compatible y se selecciona automáticamente cuando se activa el interruptor de seguridad para URL. Ambas variantes están totalmente especificadas en RFC 4648 (IETF, 2006).
¿Verifica Convertitive las firmas JWT?
No. El decodificador JWT analiza y muestra el encabezado y el payload descodificando en base64url los dos primeros segmentos separados por puntos según RFC 7519 §3. La verificación de la firma requiere el secreto de firma o la clave pública, que deliberadamente nunca solicitamos. Todo el procesamiento JWT se ejecuta localmente en el navegador; el token nunca abandona su dispositivo.
¿Qué funciones hash usa el generador de hash y son criptográficamente seguras?
El generador usa SHA-1, SHA-256, SHA-384 y SHA-512 a través de la Web Crypto API (window.crypto.subtle), cuyas implementaciones están especificadas en NIST FIPS 180-4. Todo el cálculo se realiza en el navegador. SHA-1 está obsoleto para la resistencia a colisiones (ataque SHAttered, Stevens et al., 2017) pero todavía se usa en contextos legados como los identificadores de objetos de Git. Para integridad o autenticación, use SHA-256 o superior.
¿Cómo garantiza la aleatoriedad el generador UUID?
Los UUID son de versión 4 (aleatorio) según se especifica en RFC 9562 §5.4. Cada UUID se genera usando window.crypto.getRandomValues(), un CSPRNG (generador de números pseudoaleatorios criptográficamente seguro) proporcionado por la fuente de entropía a nivel del sistema operativo del navegador. Esto es distinto de Math.random(), que no es criptográficamente seguro. Los 122 bits aleatorios dan una probabilidad de colisión de ~5 × 10⁻³⁶ por par.
¿Alguna herramienta de código envía mis datos a un servidor?
No. La codificación/descodificación Base64, el análisis JWT, el hash, la generación UUID y todas las demás utilidades de código se ejecutan completamente en el navegador a través de la Web Crypto API y JavaScript estándar. No se transmite ningún payload a ningún servidor. Puede verificar esto abriendo DevTools del navegador → Red y observando cero solicitudes salientes al usar estas herramientas.

Related

Published May 14, 2026