
Adattatore di Chunk con Introspezione dei Protocolli per Dati Resilienti
Protocol-Introspecting Chunk Adapter for Resilient Data
Per gli autodidatti, per gli anticonformisti e per chiunque si sia mai sentito dire di restare al proprio posto. Continua a costruire, continua a esplorare.
PICARD cifra i tuoi dati, li suddivide in chunk e disperde questi chunk attraverso qualunque endpoint di protocollo tu configuri: record DNS TXT, API di social media, broker MQTT, bucket S3, annunci Bluetooth o tutti questi contemporaneamente. Recuperali e li riassembla. Con lo scatter multi-adapter, nessun singolo endpoint contiene abbastanza ciphertext per ricostruire qualcosa. Nessun server centrale. Nessun costo mensile di archiviazione. Si monta come un normale filesystem.
Non efficiente. Indipendente dal protocollo.
[!IMPORTANT] Progetto di ricerca. PICARD è un esperimento informatico funzionante, non un sistema di archiviazione di produzione. Leggi l'avviso di ricerca e legale prima di procedere.
[!WARNING] Sperimentale: usa a tuo rischio. Questi adapter utilizzano vulnerabilità hardware come primitive di archiviazione. I risultati dipendono dall'hardware, sono non deterministici tra macchine diverse e irreversibili nel caso di bit flip nella DRAM. Usa solo su hardware di tua proprietà e sotto il tuo controllo. L'esecuzione contro infrastrutture condivise o cloud costituisce accesso non autorizzato nella maggior parte delle giurisdizioni.
PICARD ora può memorizzare chunk negli stati dei bit della DRAM e nella residenza della cache della CPU -- completamente al di fuori della visibilità del sistema operativo.
| Adapter | Cosa fa |
|---|---|
rowhammer | Scrive bit martellando le righe DRAM adiacenti finché la dispersione di carica inverte i bit bersaglio. Legge esaminando direttamente la riga vittima. Locale, effimero, DDR3/4 non-ECC. |
halfdouble | Variante a due salti. Il rapporto tra aggressore vicino e lontano aggira il Target Row Refresh (TRR) di DDR4. Raggiunge hardware che il rowhammer classico non riesce più a colpire. |
throwhammer | Martella la DRAM di un host remoto tramite RDMA. La CPU remota non è coinvolta affatto -- la NIC esegue DMA-read direttamente verso la DRAM. Richiede una fabric RDMA. |
cpu-cache | Memorizza bit nella SRAM L3 della CPU tramite Flush+Reload. Codifica a voto di maggioranza con N_REPS=5 su slot isolati per pagina. BER inferiore a 5e-4 su i7-12700KF. Cross-process sullo stesso host; cross-VM dove è attiva la deduplicazione delle pagine. |
Tutti e quattro sono effimeri (un ciclo di alimentazione cancella tutto). Vedi docs/adapters.md per i requisiti hardware e il modello di minaccia.
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
Ogni blocco è crittografato in modo indipendente con il proprio salt e nonce casuali. I chunk vengono distribuiti in round-robin o tramite profili RAID. Nessun adapter vede il testo in chiaro; nessun adapter vede abbastanza testo cifrato da ricostruire qualcosa.
L'indice locale (un database SQLite crittografato con AES-256-GCM) mappa i percorsi alle posizioni dei chunk. Perdi la passphrase, perdi i dati.
Era una fresca mattina berlinese. Dal mio patio fissavo un semplice muro di stucco sormontato da mattoni rossi. Un guizzo d'ali mi catturò l'occhio, un piccolo uccello che deviava verso un foro di drenaggio vicino alla linea del tetto e svaniva. Un'altra testa apparve da un foro diverso, cinguettando. Cinque fori di drenaggio, cinque nidi. Le grondaie erano fatte per far scorrere l'acqua, non per ospitare famiglie, eppure gli uccelli avevano trovato riparo, copertura e facile accesso. Non me n'ero mai accorto perché non mi ero mai preso la briga di guardare.
La nostra infrastruttura digitale trasporta più di quanto sia stata progettata per memorizzare. I record TXT del DNS accettano testo arbitrario entro le specifiche. I messaggi retained di MQTT persistono i dati sul broker. I pacchetti ICMP echo trasportano un campo payload. Le API dei social media accettano testo strutturato libero. Ognuno di questi protocolli definisce campi destinati a metadati, discovery o diagnostica. Quei campi possono trasportare byte tanto quanto i casi d'uso previsti dai loro progettisti.
picard web apre una dashboard nel browser all'indirizzo http://localhost:8471.
Superficie di archiviazione per categoria, stato degli adapter e dettagli di crittografia a colpo d'occhio.
259 adapter consultabili per categoria, con parametri richiesti e aggiunta con un 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 /
Dal sorgente:
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
Profili di scatter: quiet, resilient, speed, paranoid
| Comando | Descrizione |
|---|---|
picard put <file> --as <path> | Memorizza un file |
picard get <path> -o <file> | Recupera un file |
picard ls [path] | Elenca i file |
picard rm <path> | Elimina |
picard cp / mv | Copia / rinomina |
picard tree / | Albero delle directory |
picard verify <path> | Verifica dell'integrità dei chunk |