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.
// 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)
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
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
// 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
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
$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';
}
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)
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 |
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 -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
{
"ok": true,
"datos": "Q1VBTlRJQ0EuLi4gW2RhdG9zIGNpZnJhZG9zXQ==",
"pqc": false
}
Descifrar via API
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
# 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
# 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.
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
php cuantica-cli.php encrypt archivo.pdf archivo.pdf.enc "mi_contraseña"
Descifrar un archivo
php cuantica-cli.php decrypt archivo.pdf.enc archivo_recuperado.pdf "mi_contraseña"
Cifrar texto directamente
# 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
# 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
# Generar una clave aleatoria criptograficamente segura
php cuantica-cli.php keygen
# Especificar longitud en bytes
php cuantica-cli.php keygen 64
Informacion del sistema
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
// 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
// Desactivar la capa post-cuantica (usar solo las 5 capas clasicas)
$opciones = ['pqc' => false];
$resultado = cuantica_cifrar($datos, $password, $opciones);
Autodeteccion de backend
// 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');
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.
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
// 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) |