
내결함성 데이터를 위한 프로토콜 자기분석 청크 어댑터
복원력 있는 데이터를 위한 프로토콜 탐색형 청크 어댑터
독학한 사람, 비관습적인 사람, 그리고 언젠가 자기 분야에나 머물라는 말을 들었던 모든 사람을 위해. 계속 만들고, 계속 탐구하세요.
PICARD는 데이터를 암호화하고, 청크로 잘라내고, 그 청크들을 설정한 프로토콜 엔드포인트 어디에든 흩뿌립니다: DNS TXT 레코드, 소셜 미디어 API, MQTT 브로커, S3 버킷, 블루투스 광고, 또는 이 모든 곳에 동시에. 다시 가져오면 재조립됩니다. 멀티 어댑터 분산 방식을 쓰면 어떤 단일 엔드포인트도 무언가를 재구성하기에 충분한 암호문을 보유하지 않습니다. 중앙 서버도 없습니다. 월별 저장 비용도 없습니다. 일반 파일시스템으로 마운트됩니다.
효율적이지 않습니다. 프로토콜에 구애받지 않습니다.
[!IMPORTANT] 연구 프로젝트. PICARD는 작동하는 컴퓨터 과학 실험이며, 프로덕션 스토리지 시스템이 아닙니다. 진행하기 전에 연구 및 법적 고지를 읽어 보세요.
[!WARNING] 실험적: 자기 책임하에 실행하세요. 이 어댑터들은 하드웨어 취약점을 스토리지 기본 요소로 사용합니다. 결과는 하드웨어에 따라 다르고, 머신 간에 비결정적이며, DRAM 비트 플립의 경우 되돌릴 수 없습니다. 소유하고 통제하는 하드웨어에서만 사용하세요. 공유 또는 클라우드 인프라에 대해 실행하는 것은 대부분의 관할권에서 무단 접근입니다.
이제 PICARD는 청크를 DRAM 비트 상태와 CPU 캐시 상주에 저장할 수 있습니다 -- 완전히 운영체제의 시야 밖에 있습니다.
| 어댑터 | 하는 일 |
|---|---|
rowhammer | 인접한 DRAM 행을 해머링하여 전하 누설이 대상 비트를 뒤집을 때까지 비트를 씁니다. 희생자 행을 직접 검사하여 읽습니다. 로컬, 휘발성, 비-ECC DDR3/4. |
halfdouble | 2홉 변형. 근거리/원거리 공격자 비율이 DDR4 TRR(Target Row Refresh)을 우회합니다. 고전적 rowhammer가 더 이상 영향을 주지 않는 하드웨어에 도달합니다. |
throwhammer | RDMA를 통해 원격 호스트의 DRAM을 해머링합니다. 원격 CPU는 전혀 관여하지 않습니다 -- NIC가 DRAM으로 직접 DMA 읽기를 합니다. RDMA 패브릭이 필요합니다. |
cpu-cache | Flush+Reload를 통해 CPU L3 SRAM에 비트를 저장합니다. 페이지 격리 슬롯에 걸쳐 N_REPS=5 다수결 인코딩. i7-12700KF에서 BER 5e-4 미만. 동일 호스트의 프로세스 간; 페이지 중복 제거가 활성화된 크로스 VM. |
네 가지 모두 휘발성입니다(전원 사이클 시 소거). 하드웨어 요구 사항과 위협 모델은 docs/adapters.md를 참조하세요.
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
각 블록은 자체적인 무작위 salt와 nonce로 독립적으로 암호화됩니다. 청크는 라운드 로빈 방식이나 RAID 프로필을 통해 분산됩니다. 어떤 어댑터도 평문을 보지 못하며, 어떤 어댑터도 무언가를 재구성하기에 충분한 암호문을 보지 못합니다.
로컬 인덱스(AES-256-GCM으로 암호화된 SQLite 데이터베이스)는 경로를 청크 위치에 매핑합니다. 암호구를 잃으면 데이터도 잃습니다.
쌀쌀한 베를린의 아침이었다. 나는 테라스에서 붉은 벽돌로 마감된 평범한 회반죽 벽을 바라보고 있었다. 날갯짓이 흐릿하게 스쳐 지나갔고, 작은 새 한 마리가 지붕선 근처의 배수 구멍으로 방향을 틀어 사라졌다. 다른 구멍에서 또 다른 머리가 나타나 지저귀었다. 다섯 개의 배수 구멍, 다섯 개의 둥지. 홈통은 물을 흘려보내기 위한 것이지 가족을 품기 위한 것이 아니었지만, 새들은 피난처와 은신처, 그리고 손쉬운 접근성을 찾아낸 것이었다. 나는 한 번도 주의 깊게 보지 않았기에 미처 알아차리지 못했던 것이다.
우리의 디지털 인프라는 저장하도록 설계된 것보다 더 많은 것을 담고 있다. DNS TXT 레코드는 규격 내에서 임의의 텍스트를 허용한다. MQTT 보존 메시지는 브로커에 데이터를 지속시킨다. ICMP 에코 패킷은 페이로드 필드를 지닌다. 소셜 미디어 API는 자유 형식의 구조화된 텍스트를 받아들인다. 이들 프로토콜 각각은 메타데이터, 검색, 또는 진단을 위해 의도된 필드를 정의한다. 그 필드들은 설계자들이 의도한 용도만큼이나 바이트를 실어 나를 수 있다.
picard web은 http://localhost:8471에서 브라우저 대시보드를 엽니다.
카테고리별 스토리지 표면, 어댑터 상태, 암호화 세부 정보를 한눈에 확인.
카테고리별로 탐색 가능한 259개의 어댑터, 필수 매개변수와 원클릭 추가 기능 포함.
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 /
출처:
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
Scatter 프로필: quiet, resilient, speed, paranoid
| 명령어 | 설명 |
|---|---|
picard put <file> --as <path> | 파일 저장 |
picard get <path> -o <file> | 파일 검색 |
picard ls [path] | 파일 목록 조회 |
picard rm <path> | 삭제 |
picard cp / mv | 복사 / 이름 변경 |
picard tree / | 디렉터리 트리 |
picard verify <path> | 청크 무결성 검사 |
| 명령어 | 설명 |
|---|---|
picard mkdir / ln / head / tail / touch / log / stat / find | 표준 파일시스템 작업 |
picard fsck | 일관성 검사 및 복구 |
picard mount <mountpoint> | FUSE 마운트 |
picard webdav | WebDAV 서버 (포트 8471) |
| 명령어 | 설명 |
|---|---|
picard web | 웹 대시보드 (다크/라이트, 드래그 앤 드롭) |
picard scatter-report | 스토리지 표면 맵 |
picard adapters / profiles | 어댑터 및 scatter 프로필 목록 |
picard recover | 저널 크래시 복구 |
picard tor-check / tor-serve / tor-peer / tor-mount | Tor 작업 |
picard init | 기본 picard.toml 생성 |
대부분의 명령어는 기계 판독 가능한 출력을 위해 --json을 지원합니다.
picard mount는 FUSE를 통해 가상 파일시스템을 노출합니다. 표준 셸 도구가 작동합니다: cp, ls, mv, rm, mkdir, cat, chmod, ln -s, df 모두 예상대로 동작합니다.
플랫폼 요구사항:
| 플랫폼 | 요구사항 |
|---|---|
| Linux | sudo apt install libfuse-dev (또는 배포판에 해당하는 명령) |
| macOS | brew install --cask macfuse |
| Windows | WinFSP, 또는 Explorer의 네트워크 드라이브 연결로 picard webdav 사용 |
알려진 제한사항: 하드 링크 없음, 파일 잠금(flock/fcntl) 없음. 쓰기는 전체 파일을 RAM에 버퍼링하고 닫을 때 플러시합니다. 마운트 내부에서 SQLite WAL 모드나 Git 오브젝트 저장소를 직접 실행하지 마십시오.
picard webdav는 드라이버가 필요 없는 대안입니다. 이를 시작하고 Explorer, Finder 또는 Nautilus를 http://localhost:8471로 지정한 뒤 파일을 드래그하십시오.
PICARD는 Claude 및 기타 MCP 호환 에이전트를 위한 MCP 서버로 스토리지 도구를 노출합니다:
{
"mcpServers": {
"picard-store": {
"command": "picard-mcp",
"env": { "PICARD_PASSPHRASE": "your-passphrase" }
}
}
}
사용 가능한 도구와 설정 세부 사항은 docs/mcp.md를 참조하세요.
권한 부여 요구 사항에 따라 네 개의 계층으로 나뉜 264개의 어댑터. 전체 목록: docs/adapters.md.
제3자 권한 부여가 필요하지 않습니다. 이것이 주요 사용 사례입니다.
| 카테고리 | 예시 |
|---|---|
| 로컬 / 데이터베이스 | Filesystem, Redis, PostgreSQL, S3, SQLite, etcd, CouchDB, Cassandra |
| 자체 호스팅 서비스 | WebDAV, Matrix (자체 홈서버), MQTT (자체 브로커), XMPP, IRC |
| 메일 / 캘린더 | SMTP/IMAP, CalDAV, CardDAV |
| P2P / 탈중앙화 | IPFS, BitTorrent DHT, Nostr, Ethereum (자체 지갑), Tor 히든 서비스 |
| 스테가노그래피 | 이미지 LSB, 오디오 WAV LSB, EXIF, XLSX 숨겨진 셀, ZIP 주석 |
해당 플랫폼에서 유효한 계정과 API 권한 부여가 필요합니다. 각 어댑터의 소스에는 플랫폼별 서비스 약관 고지가 포함되어 있습니다.