
محوّل الأجزاء المُستكشِف للبروتوكول من أجل بيانات مرنة
محوّل الأجزاء فاحص البروتوكول للتخزين المرن (Protocol-Introspecting Chunk Adapter for Resilient Data)
للمتعلّمين ذاتيًا، ولغير التقليديين، ولكل من قيل له يومًا أن يلزم حدوده. واصل البناء، واصل الاستكشاف.
يقوم PICARD بتشفير بياناتك، وتقطيعها إلى أجزاء، ثم نثر تلك الأجزاء عبر أي نقاط نهاية بروتوكول تقوم بتكوينها: سجلات DNS TXT، وواجهات برمجة تطبيقات وسائل التواصل الاجتماعي، وسطاء MQTT، حزم S3، إعلانات Bluetooth، أو كل ما سبق في آنٍ واحد. استرجعها فيعيد تجميعها. مع النثر متعدد المحوّلات، لا تحتفظ أي نقطة نهاية واحدة بما يكفي من النص المشفّر لإعادة بناء أي شيء. لا خادم مركزي. لا رسوم تخزين شهرية. يُثبَّت كتظام ملفات عادي.
ليس فعّالًا. لكنه محايد تجاه البروتوكول.
[!IMPORTANT] مشروع بحثي. PICARD تجربة علم حاسوب عاملة، وليس نظام تخزين إنتاجيًا. اقرأ إشعار البحث والجوانب القانونية قبل المتابعة.
[!WARNING] تجريبي: استخدمه على مسؤوليتك الخاصة. تستخدم هذه المحوّلات ثغرات العتاد كأساسيات للتخزين. النتائج خاصة بالعتاد، وغير حتمية بين الأجهزة المختلفة، وغير قابلة للعكس في حالة انقلاب بتات DRAM. استخدمه فقط على عتاد تملكه وتتحكم به. التشغيل ضد بنية تحتية مشتركة أو سحابية يُعدّ وصولًا غير مصرّح به في معظم الولايات القضائية.
يمكن لـ PICARD الآن تخزين الأجزاء في حالات بتات DRAM وإقامة ذاكرة CPU المؤقتة (cache) -- خارج نطاق رؤية نظام التشغيل بالكامل.
| المحوّل | ما يفعله |
|---|---|
rowhammer | يكتب البتات عبر طَرْق صفوف DRAM المجاورة حتى تؤدي تسريبات الشحنة إلى قلب البتات المستهدفة. يقرأ عبر فحص الصف الضحية مباشرة. محلي، عابر، DDR3/4 غير مزوّد بـ ECC. |
halfdouble | نسخة ثنائية القفز. تتجاوز نسبة المهاجم القريب/البعيد آلية DDR4 Target Row Refresh (TRR). تصل إلى عتاد لم يعد rowhammer الكلاسيكي يؤثر فيه. |
throwhammer | يطرق DRAM لخادم بعيد عبر RDMA. لا تشارك CPU البعيدة إطلاقًا -- إذ تقرأ بطاقة الشبكة (NIC) مباشرة إلى DRAM عبر DMA. يتطلب بنية RDMA. |
cpu-cache | يخزّن البتات في ذاكرة CPU L3 SRAM عبر Flush+Reload. ترميز تصويت الأغلبية N_REPS=5 عبر خانات معزولة بالصفحات. معدل خطأ البتات (BER) أقل من 5e-4 على i7-12700KF. بين العمليات على نفس المضيف؛ وبين الأجهزة الافتراضية حيث تكون إزالة تكرار الصفحات نشطة. |
جميع المحوّلات الأربعة عابرة (دورة الطاقة تمحوها). راجع 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 عشوائيين خاصين بها. وتتوزع الكتل بنمط round-robin أو عبر ملفات تعريف RAID. لا يرى أي محوّل النص الصريح؛ ولا يرى أي محوّل ما يكفي من النص المشفّر لإعادة بناء أي شيء.
يُخزّن الفهرس المحلي (قاعدة بيانات SQLite مشفّرة بـ AES-256-GCM) المسارات إلى مواقع الكتل. إذا فقدت عبارة المرور، فقدت البيانات.
كان صباحًا باردًا في برلين. من شرفتي حدّقت في جدار جصّي عادي يعلوه طوب أحمر. لفت انتباهي ضبابية من أجنحة، طائر صغير ينحرف نحو فتحة تصريف قرب خط السقف ويختفي. ظهر رأس آخر من فتحة مختلفة، يزقزق. خمس فتحات تصريف، خمسة أعشاش. كانت المزاريب مصممة لنقل الماء، لا لاستضافة عائلات، ومع ذلك وجدت الطيور مأوى وغطاءً ووصولًا سهلًا. لم ألاحظ ذلك قط لأنني لم أكلّف نفسي عناء النظر.
تحمل بنيتنا التحتية الرقمية أكثر مما صُممت لتخزينه. تقبل سجلات DNS TXT نصًا اعتباطيًا ضمن المواصفات. تُبقي رسائل MQTT المحتفظ بها البيانات على الوسيط (broker). تحمل حزم ICMP echo حقل payload. تقبل واجهات برمجة تطبيقات وسائل التواصل الاجتماعي نصًا منظمًا حر الشكل. يحدد كل من هذه البروتوكولات حقولًا مخصصة للبيانات الوصفية أو الاكتشاف أو التشخيص. ويمكن لتلك الحقول أن تحمل بايتات تمامًا كما تحمل حالات الاستخدام المقصودة لمصمميها.
يفتح 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
ملفات تعريف التوزيع: 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> | فحص سلامة الأجزاء (chunks) |
| الأمر | الوصف |
|---|---|
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 | سرد المحوّلات وملفات تعريف التوزيع |
picard recover | استرداد السجل بعد الأعطال |
picard tor-check / tor-serve / tor-peer / tor-mount | عمليات Tor |
picard init | إنشاء picard.toml الافتراضي |
تقبل معظم الأوامر الخيار --json للحصول على مخرجات قابلة للقراءة آليًا.