Phantomdrive: ¿cómo funciona y para qué sirve?

El cifrado convencional protege los archivos hasta que el propietario revela la contraseña. Sin embargo, en algunos países pueden obligar a una persona a desbloquear un soporte, y el simple hecho de tener una partición cifrada puede suscitar preguntas. El proyecto abierto Phantomdrive propone un enfoque distinto: al conectarse, la unidad muestra al equipo un dispositivo normal de 8 GB, y la memoria restante no es detectada por el sistema operativo.
La partición oculta se abre sin software adicional. El usuario edita un archivo de texto en la parte accesible de la unidad y escribe la línea password:PUTYOURPASSWORDHERE, sustituyendo el marcador por su propia contraseña. El dispositivo intercepta la escritura, extrae la contraseña, desconecta la partición visible y monta la zona cifrada. El cifrado y el descifrado se realizan dentro de la propia unidad mediante AES-256.
password:PUTYOURPASSWORDHERE
El desarrollador presenta Phantomdrive como un medio con contenido externo verosímil. El equipo solo obtiene información sobre los 8 GB visibles y no ve la capacidad restante del disco. El enfoque difiere del volumen oculto de VeraCrypt: un contenedor de software suele dejar huellas de espacio cifrado adicional, mientras que Phantomdrive limita el acceso al nivel del controlador del dispositivo USB de almacenamiento.
El proyecto es completamente abierto. Se han publicado en acceso libre el esquema eléctrico, la placa de circuito impreso, el firmware y el diseño de la carcasa. Para el diseño se usaron herramientas abiertas, por lo que el dispositivo puede ser analizado, modificado o ensamblado por uno mismo.
El corazón de la unidad es el microcontrolador CH569. El chip lo fabrica la misma compañía que produce el convertidor CH340, bien conocido por las placas económicas compatibles con Arduino. En Phantomdrive se emplean el controlador USB 3.0, la interfaz SD/eMMC y un bloque hardware AES. Dentro del CH569 también hay un módulo del algoritmo chino SM4, pero en el proyecto no se utiliza.
La memoria se almacena en una tarjeta SD. El desarrollador tenía previsto usar eMMC, pero el aumento de la demanda por parte de fabricantes de hardware para inteligencia artificial elevó los precios de esos chips. La versión con eMMC debería aparecer más adelante, cuando baje el coste de la memoria.
La tarjeta SD sigue siendo accesible físicamente si se abre la carcasa, pero toda la zona oculta está cifrada. Las mitades de la carcasa están pegadas con resina epoxi, por lo que la apertura probablemente dañe la unidad. Esta protección no reemplaza una carcasa especializada con sensores de manipulación, pero complica la extracción de la tarjeta sin dejar rastro.
La parte electrónica consta del CH569, el conector USB, dos convertidores reductores de tensión, la tarjeta SD, un botón de actualización del firmware y componentes auxiliares. En la placa también se han previsto puntos de contacto UART que se usan durante el desarrollo y la depuración.
Tras la publicación del proyecto en GitHub aparecieron informes generados automáticamente sobre posibles vulnerabilidades. Parte de las observaciones describían errores ya corregidos, otra parte contenía conclusiones erróneas y algunas limitaciones reales se presentaron sin tener en cuenta el modelo de amenazas. La discusión más sustantiva trató del modo AES-XTS, que normalmente se usa para cifrar discos.
El desarrollador comprobó la parte criptográfica mediante pruebas funcionales. El firmware cifraba datos conocidos y luego el resultado se comparaba con la implementación de AES en OpenSSL. La coincidencia confirmaba que el bloque hardware y la lógica software realizan las transformaciones de la misma manera.
No se puede usar la contraseña directamente como clave AES-256. El algoritmo requiere una clave de 32 bytes, y rellenar la contraseña con ceros apenas dificulta la fuerza bruta. Una combinación débil como password1234 puede ser verificada por hardware moderno en poco tiempo.
uint8_t key[32] = {0};
memcpy(key, password, password_length);
Otro problema adicional son las tablas precalculadas. Un atacante puede preparar una vez claves para contraseñas comunes y luego compararlas rápidamente con datos de distintos dispositivos. Phantomdrive añade a la contraseña una sal única vinculada a cada ejemplar de la unidad. Por eso la tabla debe recalcularse para cada dispositivo.
La sal se puede obtener en Linux a través del número de serie del dispositivo USB:
udevadm info --query=property --name=/dev/sdc | grep ID_SERIAL_SHORT
ID_SERIAL_SHORT=Phantomdrive:34FC1FA7145467F7
En el ejemplo, la sal es la secuencia 34FC1FA7145467F7. Es necesario conservar ese valor por separado: sin él recuperar los datos tras una avería del controlador será más difícil. No se puede simplemente mover la tarjeta SD a otro ejemplar de Phantomdrive, porque el nuevo controlador usa otra sal.
El nombre del dispositivo y los identificadores USB de fabricante y producto pueden modificarse en el firmware. Esa configuración permite camuflar Phantomdrive como otro dispositivo, aunque valores incorrectos pueden causar problemas de compatibilidad o dificultar la recuperación de datos.
La función de derivación de clave realiza 100 000 rondas de SHA-256. El rehashing desacelera cada intento de adivinanza de la contraseña. La propia unidad abre la partición oculta en aproximadamente tres segundos, mientras que el atacante debe dedicar una cantidad comparable de cálculos por cada combinación probada.
for (uint32_t i = 0; i < 100000; i++) {
sha256(password_and_salt, input_length, key);
memcpy(password_and_salt, key, sizeof(key));
}
Algoritmos como Argon2 o scrypt podrían dificultar aún más la fuerza bruta, porque requieren gran cantidad de memoria. Las capacidades del CH569 son limitadas, por lo que esas funciones no caben en los recursos disponibles ni en un tiempo de desbloqueo aceptable. El propietario puede aumentar el número de rondas de SHA-256, pero entonces la partición oculta tardará más en abrirse.
El desarrollador también contempla el cifrado doble por medios del sistema operativo. En otro escenario se puede desactivar el cifrado hardware y usar Phantomdrive solo para ocultar la partición, delegando la protección de los datos a VeraCrypt, LUKS o BitLocker.
AES procesa bloques de 16 bytes, por lo que para un disco hace falta un modo que enlace muchos bloques en un flujo único. La opción más simple, AES-ECB, cifra cada fragmento por separado. Bloques idénticos en texto plano se convierten entonces en el mismo texto cifrado, de modo que la estructura de los datos originales se conserva parcialmente.
El modo ECB tampoco protege el orden ni la integridad de los bloques. Un atacante puede eliminar o reordenar segmentos cifrados, y tras el descifrado los cambios afectarán de manera predecible al contenido. Para un disco esa esquema no es adecuada.
Phantomdrive soporta AES-CTR. El modo cifra una secuencia de valores de contador y luego combina el resultado con el texto plano mediante XOR. La lógica simplificada es la siguiente:
uint64_t i = 0;
while (i < len) {
uint8_t stream_byte = aes_encrypt_counter(i);
ciphertext[i] = plaintext[i] ^ stream_byte;
i++;
}
El principal riesgo de AES-CTR es la reutilización del contador. Un atacante puede copiar el texto cifrado, devolver el dispositivo al propietario, esperar a que se escriban nuevos datos y así obtener de nuevo el contenido del disco. Si una de las dos versiones es parcialmente conocida o predecible, el flujo repetido permite recuperar información de la otra.
Para discos normalmente se usa AES-XTS. El modo emplea dos claves: la primera cifra los datos y la segunda crea un valor variable para cada sector y bloque. El número de sector participa en el cálculo, por eso fragmentos idénticos en distintas zonas del disco obtienen textos cifrados distintos.
tweak = AES(key2, sector_number)
C0 = AES(key1, P0 XOR tweak0) XOR tweak0
C1 = AES(key1, P1 XOR tweak1) XOR tweak1
C2 = AES(key1, P2 XOR tweak2) XOR tweak2
XTS elimina el problema principal del flujo repetido, pero exige más cálculos. Phantomdrive escribe datos con AES-CTR a unos 9 MB/s y lee a 20 MB/s. Con AES-XTS la velocidad baja aproximadamente a 6 MB/s en escritura y 10 MB/s en lectura.
El desarrollador eligió CTR como compromiso entre velocidad y su modelo de amenazas, pero advierte explícitamente sobre sus limitaciones. El usuario que priorice la resistencia frente a copias repetidas de la imagen del disco puede cambiar a XTS o cifrar adicionalmente el dispositivo con software.
El firmware se apoya en dos bibliotecas abiertas.
https://github.com/hydrausb3/wch-ch56x-lib
https://github.com/hydrausb3/wch-ch56x-isp
El controlador no interpreta el sistema de archivos y no sabe dónde está un archivo de texto concreto. En la comunicación con el equipo recibe comandos USB Mass Storage WRITE10 y READ10, que luego convierte en comandos para la tarjeta SD. Por eso la contraseña se busca directamente en el flujo bruto de datos escritos.
void phantomdrive_snoop_write(uint8_t *buf, uint32_t len)
{
const char *prefix = "password:";
const size_t prefix_len = 9;
uint32_t i;
for (i = 0; i + prefix_len <= len; i++) {
if (buf[i] != 'p')
continue;
if (memcmp(buf + i, prefix, prefix_len) != 0)
continue;
size_t pw_start = i + prefix_len;
size_t pw_end = pw_start;
while (pw_end < len
&& (pw_end - pw_start) < sizeof(pending_pw)
&& buf[pw_end] != '\n'
&& buf[pw_end] != '\r'
&& buf[pw_end] != '\0') {
pw_end++;
}
size_t pw_len = pw_end - pw_start;
memcpy(pending_pw, buf + pw_start, pw_len);
pending_pw_len = pw_len;
memset(buf + i, 0, pw_end - i);
return;
}
}
La función inspecciona cada escritura en la partición abierta y busca la secuencia password:. Los caracteres después del prefijo se copian a la memoria RAM hasta un salto de línea, un byte nulo o hasta alcanzar el límite establecido. Después, la zona original del búfer se rellena con ceros, por lo que la contraseña no llega a la tarjeta SD.
El enfoque crea el riesgo de activaciones accidentales. Si el usuario almacena grandes volúmenes de datos en la parte abierta y en uno de los archivos aparece la secuencia password:, el controlador puede tomar el texto siguiente como comando de desbloqueo. El firmware no comprueba el nombre del archivo ni su ubicación, porque opera por debajo del nivel del sistema de archivos.
Phantomdrive sigue siendo un dispositivo experimental, no un medio criptográfico certificado. Por supuesto, esta unidad no protege frente a una contraseña débil, la compromisión del equipo, el análisis hardware del controlador ni la coerción en la que la parte examinadora ya conoce la existencia de la partición oculta. El modo elegido, AES-CTR, también obliga a considerar el riesgo de copiado repetido del texto cifrado.
La principal característica del dispositivo no es un algoritmo de cifrado nuevo, sino la combinación de capacidad oculta a nivel hardware, procesamiento local de la contraseña y diseño completamente abierto. Cualquier especialista puede auditar el firmware, cambiar CTR por XTS, modificar el número de rondas de la función de derivación de clave o rehacer el mecanismo de desbloqueo según su propio modelo de amenazas.