
Adaptador de Chunk com Introspecção de Protocolo para Dados Resilientes
Adaptador de Fragmentos com Introspecção de Protocolo para Dados Resilientes
Para os autodidatas, os não convencionais e todos aqueles a quem alguma vez disseram para ficar no seu lugar. Continuem a construir, continuem a explorar.
O PICARD encripta os seus dados, divide-os em fragmentos e dispersa esses fragmentos por quaisquer endpoints de protocolo que configurar: registos DNS TXT, APIs de redes sociais, brokers MQTT, buckets S3, anúncios Bluetooth, ou todos os anteriores ao mesmo tempo. Recupere-os e ele volta a montá-los. Com a dispersão multi-adaptador, nenhum endpoint isolado detém ciphertext suficiente para reconstruir o que quer que seja. Sem servidor central. Sem custos mensais de armazenamento. É montado como um sistema de ficheiros normal.
Não é eficiente. É agnóstico ao protocolo.
[!IMPORTANT] Projeto de investigação. O PICARD é uma experiência funcional de ciência da computação, não um sistema de armazenamento de produção. Leia o aviso de investigação e legal antes de prosseguir.
[!WARNING] Experimental: Utilize por sua conta e risco. Estes adaptadores utilizam vulnerabilidades de hardware como primitivas de armazenamento. Os resultados são específicos do hardware, não determinísticos entre máquinas e irreversíveis no caso de bit flips em DRAM. Utilize apenas em hardware que possui e controla. A execução contra infraestrutura partilhada ou na cloud constitui acesso não autorizado na maioria das jurisdições.
O PICARD pode agora armazenar fragmentos em estados de bits da DRAM e residência na cache da CPU -- inteiramente fora da visão do sistema operativo.
| Adaptador | O que faz |
|---|---|
rowhammer | Escreve bits martelando linhas de DRAM adjacentes até a fuga de carga inverter os bits alvo. Lê examinando diretamente a linha vítima. Local, efémero, DDR3/4 sem ECC. |
halfdouble | Variante de dois saltos. A razão entre agressores próximos/distantes contorna o Target Row Refresh (TRR) do DDR4. Alcança hardware que o rowhammer clássico já não afeta. |
throwhammer | Martela a DRAM de um host remoto através de RDMA. A CPU remota não está envolvida de todo -- a NIC faz DMA-read diretamente para a DRAM. Requer uma malha RDMA. |
cpu-cache | Armazena bits na SRAM L3 da CPU via Flush+Reload. Codificação por voto maioritário com N_REPS=5 em slots isolados por página. BER abaixo de 5e-4 num i7-12700KF. Entre processos no mesmo host; entre VMs onde a deduplicação de páginas está ativa. |
Todos os quatro são efémeros (o ciclo de energia apaga-os). Consulte docs/adapters.md para os requisitos de hardware e o modelo de ameaças.
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 bloco é criptografado de forma independente com seu próprio salt e nonce aleatórios. Os chunks são distribuídos em round-robin ou por meio de perfis RAID. Nenhum adaptador vê texto simples; nenhum adaptador vê ciphertext suficiente para reconstruir qualquer coisa.
O índice local (um banco de dados SQLite criptografado com AES-256-GCM) mapeia caminhos para localizações de chunks. Perca a passphrase, perca os dados.
Era uma manhã fresca em Berlim. Do meu pátio, eu encarava um muro de estuque liso encimado por tijolos vermelhos. Um borrão de asas chamou minha atenção, um pequeno pássaro desviando para um buraco de drenagem perto da linha do telhado e desaparecendo. Outra cabeça apareceu de um buraco diferente, chilreando. Cinco buracos de drenagem, cinco ninhos. As calhas deveriam mover água, não abrigar famílias, mas os pássaros haviam encontrado abrigo, cobertura e acesso fácil. Eu nunca tinha notado porque nunca tinha me dado ao trabalho de olhar.
Nossa infraestrutura digital carrega mais do que foi projetada para armazenar. Registros TXT de DNS aceitam texto arbitrário dentro da especificação. Mensagens retidas de MQTT persistem dados no broker. Pacotes ICMP echo carregam um campo de payload. APIs de redes sociais aceitam texto estruturado de formato livre. Cada um desses protocolos define campos destinados a metadados, descoberta ou diagnóstico. Esses campos podem carregar bytes tão bem quanto os casos de uso pretendidos por seus projetistas.
picard web abre um painel no navegador em http://localhost:8471.
Superfície de armazenamento por categoria, integridade dos adaptadores e detalhes de criptografia em um relance.
259 adaptadores navegáveis por categoria, com parâmetros obrigatórios e adição com um clique.
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 /
Da fonte:
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
Perfis de dispersão: quiet, resilient, speed, paranoid
| Comando | Descrição |
|---|---|
picard put <file> --as <path> | Armazena um arquivo |
picard get <path> -o <file> | Recupera um arquivo |
picard ls [path] | Lista arquivos |
picard rm <path> | Exclui |
picard cp / mv | Copia / renomeia |
picard tree / | Árvore de diretórios |
picard verify <path> | Verificação de integridade dos chunks |