Las principales normas y regulaciones que tenemos de referencia para temas de proteción de respaldos son:
1. ISO/IEC 27001:2022 (la más utilizada)Los controles relacionados son:
Control 8.24 - Use of Cryptography
Establece que la organización debe definir e implementar el uso apropiado de mecanismos criptográficos para proteger la confidencialidad e integridad de la información.
Un respaldo es precisamente información almacenada.
Control 8.13 - Information Backup
2. ISO/IEC 27002
Es la guía de implementación de ISO 27001.Es todavía más explícita.
Indica que los respaldos deben protegerse contra:
- acceso no autorizado
- pérdida
- modificación
- divulgación
La recomendación práctica es utilizar cifrado cuando el medio pueda salir del control de la organización.
3. PCI DSS 4.0Requisito 3
Protección de datos del titular de la tarjeta.Incluye:
- bases de datos
- exportaciones
- respaldos
- cintas
- archivos
Todos deben protegerse mediante criptografía fuerte.
Requisito 3.5
Las claves criptográficas deben administrarse correctamente.
Requisito 3.6
Debe existir gestión formal del ciclo de vida de las llaves.Si un Data Pump contiene información de tarjetas, debe estar cifrado.
Muy utilizado por agencias gubernamentales y empresas grandes.
Controles relevantes:
CP-9
System Backup
Los respaldos deben protegerse contra divulgación.
SC-28
Protection of Information at Rest
Toda información almacenada debe protegerse.
La guía recomienda explícitamente el uso de cifrado.
MP-4
Media Storage
Los medios de almacenamiento deben protegerse físicamente y mediante mecanismos criptográficos.
5. CIS Controls v8
Los CIS Controls indican:
Control 3Data ProtectionIncluye proteger la información tanto en tránsito como almacenada.Los respaldos son considerados datos almacenados.
6. COBIT 2019
COBIT no exige AES256 específicamente.
Pero sí establece:
- protección de activos de información
- controles de seguridad
- gestión del riesgo
- continuidad del negocio
- Si la encriptación la hacemos después de haber creado nuestro respaldo sin encriptar de manera nativa, vamos a obtener un buen porcentaje de compresión, pero la información estaría expuesta algunos minutos mientras hacemos el proceso de compresión, para luego encriptar manualmente.
- Si usamos la manera nativa de encriptación en el momento de crear el respaldo, pero sin compresión de datos o metadata, la capacidad de comprensión va a ser cercana a "0" o menos de "0" con una herramienta externa o bien, simplemente no se va a comprimir, lo positivo será que el tiempo de ejecución no se ve alterado significativamente y no va a existir exposición de información confidencial nunca.
- Si además de encriptar en el momento de ejecutar el respaldo, utilizamos el parámetro de compression COMPRESSION=ALL, el archivo de respaldo tendrá el aproximadamente un poco más del doble del tamaño de un archivo no encriptado comprimido con GZIP -exactamente un 125% más-, y la duración del respaldo, pasa de 25 minutos a 41 minutos, un 64% más.
- Para organizaciones que no tienen el tema regulatorio como prioridad, utilizar el método 1.
- Para organizaciones que el tema regulatorio no es opcional, pero no cuentan con suficiente recursos de almacenamiento para retención de históricos, utilizar el método 3.
- Para organizaciones que están en el medio de las 2 anteriores, usar el método 2.
[oracle@bd-dev-laboratorio datapump]$ cd validar/
[oracle@bd-dev-laboratorio validar]$ ls -alt
total 157741313
drwxr-xr-x. 4 oracle oinstall 45 Jul 31 23:18 ..
drwxr-xr-x. 2 oracle oinstall 4 Jul 31 22:03 .
-rw-r-----. 1 oracle oinstall 80817483776 Jul 31 17:16 PDB1DEV_3107261650.dmp
-rw-r--r--. 1 oracle oinstall 127544 Jul 31 17:16 PDB1DEV_3107261650.log
-rw-r-----. 1 oracle oinstall 80707993600 Jul 26 22:25 PDB1DEV_2607262200.dmp
-rw-r--r--. 1 oracle oinstall 127393 Jul 26 22:25 PDB1DEV_2607262200.log
[oracle@bd-dev-laboratorio validar]$ gzip2
=== Inicio de compresión: Fri Jul 31 23:38:29 CST 2026 ===
=== Fin de compresión: Sat Aug 1 00:22:45 CST 2026 ===
[oracle@bd-dev-laboratorio validar]$
[oracle@bd-dev-laboratorio validar]$ ls -lat
total 85266481
drwxr-xr-x. 2 oracle oinstall 4 Aug 1 00:22 .
drwxr-xr-x. 4 oracle oinstall 45 Jul 31 23:18 ..
-rw-r-----. 1 oracle oinstall 80826147081 Jul 31 17:16 PDB1DEV_3107261650.dmp.gz
-rw-r--r--. 1 oracle oinstall 17205 Jul 31 17:16 PDB1DEV_3107261650.log.gz
-rw-r-----. 1 oracle oinstall 6486334242 Jul 26 22:25 PDB1DEV_2607262200.dmp.gz
-rw-r--r--. 1 oracle oinstall 17138 Jul 26 22:25 PDB1DEV_2607262200.log.gz
[oracle@bd-dev-laboratorio validar]$
[oracle@bd-dev-laboratorio validar]$ cat /home/oracle/scripts/resp_datapump_PDB1dev.sh
#!/bin/bash
TERM=xterm
USER=oracle
ORACLE_SID=cdb
ORACLE_BASE=/opt/app/oracle
MAIL=/var/spool/mail/oracle
LANG=en_US.UTF-8
HOME=/home/oracle
LOGNAME=oracle
LESSOPEN=||/usr/bin/lesspipe.sh %s
ORACLE_HOME=/opt/app/oracle/product/19.10
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_HOME ORACLE_BASE ORACLE_SID PATH
EXPDMP=`date '+PDB1DEV_%d%m%y%H%M'`
export EXPDMP
# Script de ejecución sin compresión de respaldos
# expdp c##exportdp/oracle@PDB1dev LOGFILE=$EXPDMP'.log' \
DIRECTORY=EXPDIR DUMPFILE=$EXPDMP EXCLUDE=statistics FULL=YES
# Script de ejecución con compresión de respaldos
expdp c##exportdp/oracle@PDB1dev LOGFILE=$EXPDMP'.log' DIRECTORY=EXPDIR DUMPFILE=$EXPDMP \
EXCLUDE=statistics FULL=YES encryption=ALL encryption_algorithm=AES256 \
encryption_password=NA********************$2026
gzip /respaldos/172.X.X.X/datapump/$EXPDMP*
mv /respaldos/172.X.X.X/datapump/$EXPDMP* /NFS/172.X.X.X/datapump/
[oracle@bd-dev-laboratorio validar]$ /home/oracle/scripts/resp_datapump_PDB1dev.sh
[oracle@bd-dev-laboratoriovalidar]$ tail -n 5 *.log
==> PDB1DEV_0108261124.log <==
Master table "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully loaded/unloaded
******************************************************************************
Dump file set for C##EXPORTDP.SYS_EXPORT_FULL_02 is:
/respaldos/172.24.140.99/datapump/PDB1DEV_0108261124.dmp
Job "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully completed at
Sat Aug 1 11:46:01 2026 elapsed 0 00:21:57
==> PDB1DEV_2607262200.log <==
Master table "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully loaded/unloaded
******************************************************************************
Dump file set for C##EXPORTDP.SYS_EXPORT_FULL_02 is:
/respaldos/172.XX.X.X/datapump/PDB1DEV_2607262200.dmp
Job "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully completed at
Sun Jul 26 22:25:29 2026 elapsed 0 00:25:26
==> PDB1DEV_3107261650.log <==
Master table "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully loaded/unloaded
******************************************************************************
Dump file set for C##EXPORTDP.SYS_EXPORT_FULL_02 is:
/respaldos/172.X.X.X/datapump/PDB1DEV_3107261650.dmp
Job "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully completed at
Fri Jul 31 17:16:28 2026 elapsed 0 00:25:31
[oracle@bd-dev-laboratorio validar]$
[oracle@bd-dev-laboratorio validar]$ ls -lat
total 243147137
-rw-r--r--. 1 oracle oinstall 80832880672 Aug 1 12:49 PDB1DEV_0108261124.dmp.enc
drwxr-xr-x. 2 oracle oinstall 7 Aug 1 12:32 .
drwxr-xr-x. 4 oracle oinstall 45 Aug 1 12:12 ..
-rw-r-----. 1 oracle oinstall 80832880640 Aug 1 11:46 PDB1DEV_0108261124.dmp
-rw-r--r--. 1 oracle oinstall 127549 Aug 1 11:46 PDB1DEV_0108261124.log
-rw-r-----. 1 oracle oinstall 80826147081 Jul 31 17:16 PDB1DEV_3107261650.dmp.gz
-rw-r--r--. 1 oracle oinstall 127544 Jul 31 17:16 PDB1DEV_3107261650.log
-rw-r-----. 1 oracle oinstall 6486334242 Jul 26 22:25 PDB1DEV_2607262200.dmp.gz
-rw-r--r--. 1 oracle oinstall 127393 Jul 26 22:25 PDB1DEV_2607262200.log
[oracle@bd-dev-laboratoriovalidar]$ time openssl enc -aes-256-cbc -pbkdf2 -salt \
-in PDB1DEV_0108261124.dmp -out PDB1DEV_0108261124.dmp.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
real 17m10.146s
user 1m49.553s
sys 2m16.912s
Durante aproximadamente 13 minutos, el proceso estuvo esperando principalmente operaciones
de entrada/salida. Además, openssl enc procesa este cifrado como un único flujo;
asignarle más CPU o más núcleos no hace que una sola ejecución escale linealmente.
OpenSSL incluye openssl speed precisamente para medir la capacidad criptográfica del
equipo y distinguirla del rendimiento del almacenamiento
[oracle@bd-dev-laboratoriovalidar]$ openssl speed -evp aes-256-cbc
Doing aes-256-cbc for 3s on 16 size blocks: 135996407 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 38799610 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 9970455 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 2519818 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 315709 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 16384 size blocks: 157698 aes-256-cbc's in 3.00s
OpenSSL 1.1.1k FIPS 25 Mar 2021
built on: Mon Feb 23 10:24:46 2026 UTC
options:bn(64,64) md2(char) rc4(8x,int) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -O2 -g -pipe -Wall
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions
-fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables
-fstack-clash-protection -fcf-protection -Wa,--noexecstack -Wa,--generate-missing-build-notes=yes
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC
-DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5
-DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM
-DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DZLIB -DNDEBUG
-DPURIFY -DDEVRANDOM="\"/dev/urandom\""
-DSYSTEM_CIPHERS_FILE="/etc/crypto-policies/back-ends/openssl.config"
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-256-cbc 725314.17k 827725.01k 850812.16k 860097.88k 862096.04k 861241.34k
[oracle@bd-dev-laboratoriovalidar]$ grep -m1 -o '\baes\b' /proc/cpuinfo
aes
[oracle@bd-dev-laboratoriovalidar]$
Para calcular la velocidad real:
[oracle@bd-dev-laboratoriovalidar]$ bytes=$(stat -c %s PDB1DEV_0108261124.dmp)
[oracle@bd-dev-laboratoriovalidar]$
Esto permitirá comparar el cifrado contra la velocidad máxima de lectura
y escritura del almacenamiento.
[oracle@bd-dev-laboratoriovalidar]$ awk -v b="$bytes" -v s=1030.146 \
> 'BEGIN {
> printf "Velocidad promedio: %.2f MiB/s\n", b/s/1024/1024
> }'
Velocidad promedio: 74.83 MiB/s
[oracle@bd-dev-laboratoriovalidar]$ ls -lat
total 91605377
drwxr-xr-x. 2 oracle oinstall 6 Aug 1 14:23 .
drwxr-xr-x. 4 oracle oinstall 45 Aug 1 12:12 ..
-rw-r-----. 1 oracle oinstall 6489619161 Aug 1 11:46 PDB1DEV_0108261124.dmp.gz
-rw-r--r--. 1 oracle oinstall 127549 Aug 1 11:46 PDB1DEV_0108261124.log
-rw-r-----. 1 oracle oinstall 80826147081 Jul 31 17:16 PDB1DEV_3107261650.dmp.gz
-rw-r--r--. 1 oracle oinstall 127544 Jul 31 17:16 PDB1DEV_3107261650.log
-rw-r-----. 1 oracle oinstall 6486334242 Jul 26 22:25 PDB1DEV_2607262200.dmp.gz
-rw-r--r--. 1 oracle oinstall 127393 Jul 26 22:25 PDB1DEV_2607262200.log
[oracle@bd-dev-laboratorio validar]$ time openssl enc -aes-256-cbc -pbkdf2 -salt \
-in PDB1DEV_0108261124.dmp.gz -out PDB1DEV_0108261124.dmp.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
real 1m35.347s
user 0m8.641s
sys 0m10.881s
[oracle@bd-dev-laboratorio validar]$ ^C
[oracle@bd-dev-laboratorio validar]$ ls -lat
total 97943937
-rw-r--r--. 1 oracle oinstall 6489619184 Aug 1 14:48PDB1DEV_0108261124.dmp.enc
drwxr-xr-x. 2 oracle oinstall 7 Aug 1 14:46 .
drwxr-xr-x. 4 oracle oinstall 45 Aug 1 12:12 ..
-rw-r-----. 1 oracle oinstall 6489619161 Aug 1 11:46PDB1DEV_0108261124.dmp.gz
-rw-r--r--. 1 oracle oinstall 127549 Aug 1 11:46PDB1DEV_0108261124.log
-rw-r-----. 1 oracle oinstall 80826147081 Jul 31 17:16PDB1DEV_3107261650.dmp.gz
-rw-r--r--. 1 oracle oinstall 127544 Jul 31 17:16PDB1DEV_3107261650.log
-rw-r-----. 1 oracle oinstall 6486334242 Jul 26 22:25PDB1DEV_2607262200.dmp.gz
-rw-r--r--. 1 oracle oinstall 127393 Jul 26 22:25PDB1DEV_2607262200.log
expdp c##exportdp/oracle@PDB1dev LOGFILE=$EXPDMP'.log' DIRECTORY=EXPDIR \
DUMPFILE=$EXPDMP EXCLUDE=statistics FULL=YES COMPRESSION=ALL encryption=ALL \
encryption_algorithm=AES256 encryption_password=NA****************2026
Master table "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully loaded/unloaded
******************************************************************************
Dump file set for C##EXPORTDP.SYS_EXPORT_FULL_02 is:
/respaldos/172.x.x.x/datapump/PDB1DEV_0108262144.dmp
Job "C##EXPORTDP"."SYS_EXPORT_FULL_02" successfully completed at
Sat Aug 1 22:26:36 2026 elapsed 0 00:41:49
drwxr-xr-x. 4 oracle oinstall 47 Aug 1 22:34 .
-rw-r--r--. 1 oracle oinstall 17114 Aug 1 22:26 PDB1DEV_0108262144.log.gz
-rw-r-----. 1 oracle oinstall 14740083605 Aug 1 22:26 PDB1DEV_0108262144.dmp.gz
drwxr-xr-x. 2 oracle oinstall 7 Aug 1 14:46 validar





