
Adaptador de fragmentos con introspección de protocolo para datos resilientes
Adaptador de fragmentos con introspección de protocolo para datos resilientes
Para los autodidactas, los poco convencionales y cualquiera a quien alguna vez le dijeron que se mantuviera en su carril. Sigue construyendo, sigue explorando.
PICARD cifra tus datos, los divide en fragmentos y dispersa esos fragmentos entre los endpoints de protocolo que configures: registros TXT de DNS, API de redes sociales, brokers MQTT, buckets S3, anuncios Bluetooth o todos ellos a la vez. Recupéralos y los reensambla. Con la dispersión multi-adaptador, ningún endpoint individual contiene suficiente texto cifrado para reconstruir nada. Sin servidor central. Sin cuotas mensuales de almacenamiento. Se monta como un sistema de archivos normal.
No eficiente. Agnóstico al protocolo.
[!IMPORTANT] Proyecto de investigación. PICARD es un experimento funcional de informática, no un sistema de almacenamiento de producción. Lee el aviso de investigación y legal antes de continuar.
[!WARNING] Experimental: Úsalo bajo tu propio riesgo. Estos adaptadores utilizan vulnerabilidades de hardware como primitivas de almacenamiento. Los resultados dependen del hardware, no son deterministas entre máquinas y son irreversibles en el caso de los bit flips de DRAM. Úsalo solo en hardware que poseas y controles. Ejecutarlo contra infraestructura compartida o en la nube constituye acceso no autorizado en la mayoría de las jurisdicciones.
PICARD ahora puede almacenar fragmentos en estados de bits de DRAM y en la residencia en caché de CPU, completamente fuera de la vista del sistema operativo.
| Adaptador | Qué hace |
|---|---|
rowhammer | Escribe bits martillando filas de DRAM adyacentes hasta que la fuga de carga invierte los bits objetivo. Lee examinando directamente la fila víctima. Local, efímero, DDR3/4 sin ECC. |
halfdouble | Variante de dos saltos. La proporción de agresores cercanos/lejanos elude el Target Row Refresh (TRR) de DDR4. Alcanza hardware que el rowhammer clásico ya no afecta. |
throwhammer | Martilla la DRAM de un host remoto a través de RDMA. La CPU remota no interviene en absoluto: la NIC lee por DMA directamente a la DRAM. Requiere una red RDMA. |
cpu-cache | Almacena bits en la SRAM L3 de la CPU mediante Flush+Reload. Codificación por voto mayoritario con N_REPS=5 en ranuras aisladas por página. BER por debajo de 5e-4 en i7-12700KF. Entre procesos en el mismo host; entre VM donde la deduplicación de páginas está activa. |
Los cuatro son efímeros (un ciclo de apagado los borra). Consulta docs/adapters.md para los requisitos de hardware y el modelo de amenazas.
plaintext
→ AES-256-GCM encrypt (Argon2id key, per-block salt + nonce)
→ PCHK chunk (protocol-sized pieces)
→ scatter across adapters (DNS, Redis, Reddit, S3, MQTT, …)
→ sealed envelope (HKDF sub-key, correlation tag per adapter)
retrieve
← fan out to all adapters
← collect, verify, assemble
← decrypt
Cada bloque se cifra de forma independiente con su propia sal y nonce aleatorios. Los fragmentos se distribuyen en round-robin o mediante perfiles RAID. Ningún adaptador ve el texto plano; ningún adaptador ve suficiente texto cifrado como para reconstruir nada.
El índice local (una base de datos SQLite cifrada con AES-256-GCM) asigna rutas a ubicaciones de fragmentos. Pierde la frase de contraseña, pierde los datos.
Era una fresca mañana de Berlín. Desde mi patio miraba fijamente una pared de estuco lisa coronada por ladrillo rojo. Un borrón de alas me llamó la atención: un pequeño pájaro viró hacia un agujero de drenaje cerca de la línea del tejado y desapareció. Otra cabeza apareció por un agujero distinto, piando. Cinco agujeros de drenaje, cinco nidos. Las canaletas estaban pensadas para conducir agua, no para alojar familias, y aun así los pájaros habían encontrado refugio, cobertura y fácil acceso. Nunca me había dado cuenta porque nunca me había molestado en mirar.
Nuestra infraestructura digital transporta más de lo que fue diseñada para almacenar. Los registros TXT de DNS aceptan texto arbitrario dentro de la especificación. Los mensajes retenidos de MQTT persisten datos en el broker. Los paquetes ICMP echo llevan un campo de carga útil. Las API de redes sociales aceptan texto estructurado de forma libre. Cada uno de estos protocolos define campos destinados a metadatos, descubrimiento o diagnóstico. Esos campos pueden transportar bytes igual de bien que los casos de uso previstos por sus diseñadores.
picard web abre un panel en el navegador en http://localhost:8471.
Superficie de almacenamiento por categoría, estado de los adaptadores y detalles de cifrado de un vistazo.
259 adaptadores navegables por categoría, con parámetros requeridos y adición con un solo clic.
pip install picard-store
export PICARD_PASSPHRASE="your-passphrase" # or picard will prompt
picard init # create picard.toml
# edit picard.toml to add your adapters, then:
picard put myfile.txt --as /docs/myfile.txt
picard get /docs/myfile.txt -o recovered.txt
picard ls
picard tree /
Del origen:
git clone https://github.com/neitzert/picard
cd picard
pip install -e ".[dev]"
python -m pytest --tb=short -q
# picard.toml
[general]
block_size = 65536
[[adapters]]
name = "dns-primary"
type = "dns"
enabled = true
params = { nameserver = "10.10.10.10", domain = "chunks.example.com" }
[[adapters]]
name = "s3-backup"
type = "s3"
enabled = true
tor_proxy = true # route through Tor SOCKS5
params = { bucket = "picard-chunks", prefix = "data/" }
[[adapters]]
name = "reddit-stash"
type = "reddit"
enabled = true
browser_mode = "headed" # api | headless | headed
params = { subreddit = "u_myuser" }
[[raid]]
level = "raid5"
adapters = ["dns-primary", "s3-backup", "filesystem"]
[scatter.paranoid]
raid_level = "raid10"
min_adapters = 4
Perfiles de dispersión: quiet, resilient, speed, paranoid