Documentacion de Cuantica

Referencia completa de la libreria de cifrado multicapa Cuantica. Un solo archivo PHP, sin dependencias externas, con 6 capas criptograficas independientes y soporte post-cuantico opcional.

Instalacion

Cuantica es un unico archivo PHP. No necesita Composer, frameworks ni dependencias externas. Solo tienes que copiar cuantica.php a tu proyecto e incluirlo.

PHP
// Incluir la libreria una sola vez
require_once __DIR__ . '/cuantica.php';

// Verificar que se cargo correctamente
$info = cuantica_info();
echo 'Cuantica v' . $info['version'] . ' cargada correctamente';

Requisitos minimos

  • PHP 7.4 o superior
  • Extension openssl (habilitada por defecto en la mayoria de instalaciones)
  • Extension sodium (incluida en PHP 7.2+, recomendada para las 6 capas completas)
  • Extension mbstring (recomendada)
Nota: Cuantica detecta automaticamente las extensiones disponibles y adapta las capas de cifrado al entorno. Si sodium no esta disponible, se usan las capas basadas en openssl de forma transparente.

Cifrar y descifrar texto

Las funciones principales para trabajar con texto son cuantica_cifrar() y cuantica_descifrar(). Ambas devuelven un array asociativo con el resultado de la operacion.

Cifrar datos

PHP
require_once 'cuantica.php';

$datos = 'Informacion confidencial que quiero proteger';
$password = 'mi_contraseña_segura_2024';

// Cifrar con todas las capas disponibles
$resultado = cuantica_cifrar($datos, $password);

if ($resultado['ok']) {
    // $resultado['datos'] contiene el texto cifrado (base64)
    echo 'Cifrado exitoso';
    echo 'PQC activo: ' . ($resultado['pqc'] ? 'Si' : 'No');

    // Guardar el texto cifrado
    $cifrado = $resultado['datos'];
} else {
    echo 'Error: ' . $resultado['error'];
}

Descifrar datos

PHP
// Descifrar usando la misma contraseña
$resultado = cuantica_descifrar($cifrado, $password);

if ($resultado['ok']) {
    echo $resultado['datos'];
    // Salida: "Informacion confidencial que quiero proteger"
} else {
    echo 'Error al descifrar: ' . $resultado['error'];
}

Estructura del resultado

Clave Tipo Descripcion
ok bool Indica si la operacion fue exitosa
datos string Texto cifrado (base64) o texto descifrado original
pqc bool Indica si se uso proteccion post-cuantica
error string Mensaje de error (solo cuando ok es false)

Cifrar y descifrar archivos

Para archivos completos, usa cuantica_cifrar_archivo() y cuantica_descifrar_archivo(). Estas funciones leen el archivo origen, aplican las 6 capas de cifrado y escriben el resultado en el destino.

Cifrar un archivo

PHP
require_once 'cuantica.php';

$origen   = '/ruta/a/documento.pdf';
$destino  = '/ruta/a/documento.pdf.enc';
$password = 'contraseña_para_archivos';

$resultado = cuantica_cifrar_archivo($origen, $destino, $password);

if ($resultado['ok']) {
    echo 'Archivo cifrado correctamente';
} else {
    echo 'Error: ' . $resultado['error'];
}

Descifrar un archivo

PHP
$origen   = '/ruta/a/documento.pdf.enc';
$destino  = '/ruta/a/documento_recuperado.pdf';
$password = 'contraseña_para_archivos';

$resultado = cuantica_descifrar_archivo($origen, $destino, $password);

if ($resultado['ok']) {
    echo 'Archivo descifrado correctamente';
}
Importante: El archivo destino se sobrescribe si ya existe. Asegurate de usar rutas diferentes para origen y destino para no perder el archivo original.

Cifrar campos de base de datos

Las funciones cuantica_cifrar_campo() y cuantica_descifrar_campo() estan disenadas para cifrar valores individuales que se almacenan en columnas de BD. Devuelven directamente un string cifrado o el valor original, sin el array envolvente.

Ejemplo con MySQL (prepared statements)

PHP + MySQL
require_once 'cuantica.php';

$clave_maestra = 'clave_secreta_para_bd';

// ── Guardar un campo cifrado ──
$email_original = 'usuario@ejemplo.com';
$email_cifrado  = cuantica_cifrar_campo($email_original, $clave_maestra);

if ($email_cifrado !== false) {
    $stmt = $pdo->prepare('INSERT INTO usuarios (nombre, email) VALUES (?, ?)');
    $stmt->execute(['Juan', $email_cifrado]);
}

// ── Leer y descifrar ──
$stmt = $pdo->prepare('SELECT email FROM usuarios WHERE id = ?');
$stmt->execute([1]);
$fila = $stmt->fetch();

$email_descifrado = cuantica_descifrar_campo($fila['email'], $clave_maestra);
// $email_descifrado === 'usuario@ejemplo.com'

Retorno de las funciones de campo

Funcion Exito Error
cuantica_cifrar_campo() string (texto cifrado en base64) false
cuantica_descifrar_campo() string (valor original) false
Nota: La columna de BD debe ser de tipo TEXT o LONGTEXT para almacenar el resultado cifrado, ya que el output en base64 puede ser significativamente mas largo que el valor original.

API REST

Cuantica incluye un endpoint REST en api.php que acepta peticiones POST con JSON. Soporta las acciones: cifrar, descifrar, info y health.

Cifrar via API

cURL
curl -X POST https://tu-servidor.com/cuantica/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "accion": "cifrar",
    "datos": "Texto secreto a proteger",
    "password": "mi_contraseña_segura"
  }'

Respuesta exitosa

JSON
{
  "ok": true,
  "datos": "Q1VBTlRJQ0EuLi4gW2RhdG9zIGNpZnJhZG9zXQ==",
  "pqc": false
}

Descifrar via API

cURL
curl -X POST https://tu-servidor.com/cuantica/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "accion": "descifrar",
    "datos": "Q1VBTlRJQ0EuLi4gW2RhdG9zIGNpZnJhZG9zXQ==",
    "password": "mi_contraseña_segura"
  }'

Consultar estado del sistema

cURL
# Informacion completa del sistema
curl -X POST https://tu-servidor.com/cuantica/api.php \
  -H "Content-Type: application/json" \
  -d '{"accion": "info"}'

# Health check rapido
curl -X POST https://tu-servidor.com/cuantica/api.php \
  -H "Content-Type: application/json" \
  -d '{"accion": "health"}'

Acciones disponibles

Accion Parametros Descripcion
cifrar datos, password Cifra el texto con las 6 capas
descifrar datos, password Descifra texto previamente cifrado
info Ninguno Devuelve informacion del sistema y extensiones
health Ninguno Health check basico para monitorizacion

OpenAPI / Swagger UI

La API incluye documentacion interactiva OpenAPI 3.0 con Swagger UI integrado.

Acceder a la documentacion

URLs
# Swagger UI interactivo (navegador)
GET /api.php?accion=docs

# Spec OpenAPI JSON (para herramientas)
GET /openapi.json

# Lista de rutas con parametros (JSON)
GET /api.php?accion=routes

Swagger UI permite probar todos los endpoints directamente desde el navegador con "Try it out". La spec openapi.json es compatible con Postman, Insomnia, y cualquier herramienta que soporte OpenAPI 3.0.

Sin dependencias: Swagger UI se carga desde CDN (unpkg.com). El archivo openapi.json es estatico y no requiere generacion.

CLI (Linea de comandos)

El script cuantica-cli.php permite usar Cuantica directamente desde la terminal. Ideal para scripts de automatizacion, backups cifrados y procesamiento por lotes.

Cifrar un archivo

Terminal
php cuantica-cli.php encrypt archivo.pdf archivo.pdf.enc "mi_contraseña"

Descifrar un archivo

Terminal
php cuantica-cli.php decrypt archivo.pdf.enc archivo_recuperado.pdf "mi_contraseña"

Cifrar texto directamente

Terminal
# Cifrar un texto
php cuantica-cli.php text encrypt "Mensaje secreto" "mi_contraseña"

# Descifrar un texto (pegar el output del cifrado)
php cuantica-cli.php text decrypt "Q1VBTlRJQ0EuLi4=" "mi_contraseña"

Procesamiento por lotes

Terminal
# Cifrar todos los archivos de una carpeta
php cuantica-cli.php batch encrypt /ruta/origen/ /ruta/destino/ "mi_contraseña"

# Descifrar un lote completo
php cuantica-cli.php batch decrypt /ruta/cifrados/ /ruta/recuperados/ "mi_contraseña"

Generar clave segura

Terminal
# Generar una clave aleatoria criptograficamente segura
php cuantica-cli.php keygen

# Especificar longitud en bytes
php cuantica-cli.php keygen 64

Informacion del sistema

Terminal
php cuantica-cli.php info

Comandos disponibles

Comando Argumentos Descripcion
encrypt origen destino password Cifra un archivo
decrypt origen destino password Descifra un archivo
batch encrypt|decrypt dir_origen dir_destino password Procesamiento por lotes
text encrypt|decrypt texto password Cifrar/descifrar texto directo
keygen [longitud] Genera clave aleatoria
info Ninguno Muestra info del sistema

Cifrado post-cuantico (PQC)

Cuantica incluye una capa adicional de proteccion post-cuantica basada en ML-KEM-768 (Kyber). Esta capa se activa automaticamente si el backend esta disponible, o puede controlarse manualmente mediante opciones.

Activar PQC explicitamente

PHP
// Forzar activacion de la capa post-cuantica
$opciones = ['pqc' => true];
$resultado = cuantica_cifrar($datos, $password, $opciones);

if ($resultado['pqc']) {
    echo 'Cifrado con proteccion post-cuantica ML-KEM-768';
}

Desactivar PQC

PHP
// Desactivar la capa post-cuantica (usar solo las 5 capas clasicas)
$opciones = ['pqc' => false];
$resultado = cuantica_cifrar($datos, $password, $opciones);

Autodeteccion de backend

PHP
// Sin opciones: Cuantica detecta automaticamente si el backend PQC esta disponible
$resultado = cuantica_cifrar($datos, $password);

// Comprobar si PQC se uso en la operacion
echo 'PQC: ' . ($resultado['pqc'] ? 'Activo' : 'No disponible');

// Verificar soporte PQC del servidor
$info = cuantica_info();
echo 'Backend PQC: ' . ($info['pqc_disponible'] ? 'Disponible' : 'No disponible');
Nota: Los datos cifrados con PQC activo solo se pueden descifrar en un entorno que tambien tenga el backend PQC disponible. cuantica_descifrar() detecta automaticamente si el paquete fue cifrado con PQC y actua en consecuencia.

Diagnostico con cuantica_info()

La funcion cuantica_info() devuelve un array con informacion detallada sobre el entorno, las extensiones disponibles y las capacidades del sistema. Es util para depuracion y para verificar que todo esta configurado correctamente.

PHP
require_once 'cuantica.php';

$info = cuantica_info();

// Mostrar toda la informacion del sistema
echo 'Version: '       . $info['version'];
echo 'PHP: '           . $info['php_version'];
echo 'OpenSSL: '       . ($info['openssl'] ? 'Si' : 'No');
echo 'Sodium: '        . ($info['sodium'] ? 'Si' : 'No');
echo 'PQC disponible: ' . ($info['pqc_disponible'] ? 'Si' : 'No');
echo 'Capas activas: ' . $info['capas'];

// Volcar toda la informacion para depuracion
print_r($info);

Ejemplo de uso para verificacion en produccion

PHP
// Script de verificacion para despliegue
require_once 'cuantica.php';

$info = cuantica_info();
$errores = [];

if (!$info['openssl']) {
    $errores[] = 'Extension openssl no disponible';
}
if (!$info['sodium']) {
    $errores[] = 'Extension sodium no disponible (recomendada)';
}

if (empty($errores)) {
    echo '[OK] Cuantica lista para produccion con ' . $info['capas'] . ' capas';
} else {
    echo '[AVISO] Problemas detectados:' . PHP_EOL;
    foreach ($errores as $e) {
        echo '  - ' . $e . PHP_EOL;
    }
}

Referencia completa de funciones

Listado de todas las funciones publicas de la libreria, con sus parametros y valores de retorno.

Funcion Parametros Retorno
cuantica_cifrar() $datos, $password, $opciones = [] ['ok' => bool, 'datos' => string, 'pqc' => bool]
cuantica_descifrar() $cifrado, $password ['ok' => bool, 'datos' => string, 'pqc' => bool]
cuantica_cifrar_archivo() $origen, $destino, $password ['ok' => bool, ...]
cuantica_descifrar_archivo() $origen, $destino, $password ['ok' => bool, ...]
cuantica_cifrar_campo() $valor, $password string|false
cuantica_descifrar_campo() $cifrado, $password string|false
cuantica_info() Ninguno array (info del sistema)

Las 6 capas de cifrado

Cuantica aplica hasta 6 capas criptograficas independientes de forma secuencial. Cada capa utiliza un algoritmo, clave derivada e IV/nonce diferente. Si un atacante rompe una capa, las restantes siguen protegiendo los datos.

Capa Algoritmo Descripcion
1 ChaCha20-Poly1305 + Argon2id Cifrado autenticado con derivacion de clave resistente a GPU/ASIC
2 AES-256-GCM Cifrado autenticado estandar de la industria
3 ChaCha20 (ronda 2) Segunda pasada de ChaCha20 con clave independiente
4 AES-256-CBC + HMAC-SHA3 Cifrado con verificacion de integridad SHA3-256
5 XOR + SHA3 Ofuscacion adicional con stream derivado de SHA3
6 ML-KEM-768 (Kyber) Encapsulamiento post-cuantico (opcional, segun backend)
Defensa en profundidad: El principio es que la seguridad no depende de un unico algoritmo. Incluso si se descubre una vulnerabilidad en AES o ChaCha20, las capas restantes mantienen la proteccion. Esta es la filosofia de defensa en profundidad aplicada a criptografia.