Personalidad dual USB
ZeroKeyUSB opera como un dispositivo USB Full-Speed compuesto exponiendo dos interfaces simultáneamente: Ambas interfaces permanecen activas tras el arranque, pero los comandos CDC que modifican datos requieren desbloqueo con PIN + autorización en el dispositivo.Motor de salida de teclado
El firmware soporta 9 layouts de teclado almacenados como mapas de teclado compilados:
El layout activo se guarda en EEPROM en
0x003E y se puede cambiar desde Settings → Keyboard o durante el asistente de setup.
Secuencia de tecleo
Cuando tocas Centro en la pantalla principal de credenciales, ZeroKeyUSB teclea: El motor de tecleo enzerokey-utils.cpp convierte cada carácter ASCII al keycode HID apropiado usando la librería del layout de teclado seleccionado.
Protocolo de comandos serie
El canal CDC se comunica a 115200 bps usando líneas ASCII simples. Los comandos se procesan porhandleIncomingHostRequests() en zerokey-io.cpp.
FIND solo navega la búsqueda del dispositivo. Deliberadamente no hay ningún
comando serie que teclee o revele una credencial; teclear siempre requiere una
pulsación física. FIND se ignora salvo que Herramientas → Chrome esté en on
y la bóveda esté desbloqueada y en la lista de credenciales.Formato de datos de exportación
Cada credencial se envía como línea CSV:- El campo TOTP es opcional y solo se incluye si el slot tiene secreto 2FA.
- La primera línea enviada es el número total de slots (
61). - Ejemplo:
0,github.com,alice,MyP@ss123,JBSWY3DPEHPK3PXP
Formato de datos de importación
Mismo formato CSV. El host envía:- El número total de registros (entero).
- Una línea por registro:
slotIndex,site,user,pass[,totpSecret].
Sincronización horaria
Los códigos TOTP requieren hora precisa. Como ZeroKeyUSB no tiene RTC hardware, la hora se rastrea usando la deriva demillis() desde un epoch sincronizado.
- El valor de epoch debe estar entre
946684800(2000-01-01) y4102444800(2099-12-31). - El epoch guardado persiste entre apagados en EEPROM en
0x0040–0x0047. - En cada arranque, el último epoch guardado se carga y el seguimiento con
millis()se reanuda desde ese punto. - La deriva se acumula con el tiempo; sesiones largas o desenchufes frecuentes pueden requerir re-sincronización.
Entrada al bootloader
Desde Menú → Danger Zone → Bootloader Mode, el firmware:- Escribe
0xF01669EFen la dirección SRAM0x20007FFC(la palabra mágica de doble reset). - Llama a
NVIC_SystemReset(). - El bootloader ve la palabra mágica y permanece en modo DFU USB-CDC para flashear firmware.
Modelo de seguridad serie
- Antes del desbloqueo con PIN: los comandos
EXPORTeIMPORTse rechazan conERR LOCKED. - Tras el desbloqueo con PIN: los comandos se aceptan pero requieren autorización en el dispositivo (pulsación larga Centro) antes de que comience cualquier transferencia de datos.
- Durante la transferencia: el dispositivo muestra una pantalla de progreso y rechaza nuevos comandos con
ERR BUSY. - Sin comandos ocultos: el protocolo serie no tiene comandos de debug, dump ni diagnóstico en el firmware de producción.
Toda la comunicación serie es texto plano. No hay capa de cifrado en el canal CDC. Trata la conexión USB como un cable directo a las tripas del dispositivo.