کلود (Claude) آنتروپیک (Anthropic) کاری را انجام داد که دههها تلاش متخصصان نتوانسته بودند: تأیید رسمی (formal verification) در سطح اسمبلی بر روی ۱۲۳ کتابخانه تولیدی، که باگهایی را فاش کرد که تريلیونها اجرای تست از آنها غافل مانده بودند. این همکاری با تئورم (Theorem) نخستین کاربرد مقیاسبزرگ مدلهای زبانی بزرگ (Large Language Model / LLM) برای اثبات ویژگیهای امنیتی مستقیماً بر روی کد ماشین کامپایلشده است.
تأیید رسمی از زمانها وعده تضمینهای ریاضی میدهد که کد از باگهای مشخصی خلوص دارد. با این حال، هزینه مانعالموانع بود: میکروکرنل seL4 برای تأیید در برابر دو سالشخص پیادهسازی، بیست سالشخص تأیید رسمی نیاز داشت — سربار ۱۰ برابری. این موضوع تأیید را به سیستمهای حیاتیماموریت مانند ایونیکهای ایرباس (Airbus) محصور کرد. در میان، حتی کرنل لینوکس (Linux kernel) — یکی از پرتستترین کدپایههای جهان که روی میلیاردها دستگاه استقرار یافته — اخیراً بیش از ۱۰۰۰ آسیبپذیری فاش کرد. با اینکه مدلهای مرزی (frontier models) بهتدریج در زنجیره کردن باگهای بیضرر به استغلالهای حیاتی ماهرتر میشوند، نیاز به تضمینهای قابلاثبات فوری شده است.
زمینه: شکاف تأیید
- میکروکرنل seL4: ۲ سالشخص برای پیادهسازی، ۲۰ سالشخص برای تأیید رسمی — سربار تأیید ۱۰ برابری.
- کرنل لینوکس: بیش از ۱۰۰۰ آسیبپذیری اخیراً فاش شده، با اینکه یکی از خوبیترین کدپایههای تستشده جهان است.
- ایونیکهای ایرباس: یکی از معدود حوزههایی که تأیید رسمی در آنها عملی بوده، به دلیل الزامات حیاتیماموریت.
- مدلهای مرزی: بهروزرسانی مداوم در قابلیت زنجیره کردن باگهای ظاهریاً بیضرر به استغلالهای حیاتی، که شرطهای تضمینهای قابلاثبات را بالا برده است.
همانطور که در تحلیل قبلی ما دربارهی شکاف تأیید و تست فازیینگ اشاره کردیم، فاصله بین «تست شده» و «اثبات شده» همچنان چالش اصلی امنیت نرمافزار است. آنتروپیک و تئورم این مشکل را با تبدیل تستهای فازیینگ موجود به مشخصههای رسمی هدف قرار دادند. گوگل (Google) پروژه OSS-Fuzz هزاران نقطه ورودی توسعهدهندهنوشته فراهم میکند که از طریق AddressSanitizer (ASan) — ابزاری که برنامههای C و C++ را ابزارسازی میکند تا هنگام دسترسی نامناسب به حافظه وقفه دهند، عاملی پیشرو در آسیبپذیریهای نرمافزار — روی نقض ایمنی حافظه وقفه میکنند. تیم این تستها را به باینریهای RISC-V کامپایل کرد، سپس از معناشناسی رسمی (formal semantics) تئورم برای مجموعه دستورالعمل (instruction set) و پردازشهای لینوکس (Linux) استفاده کرد تا یک مشخصه تولید کند: تست فازیینگ برای هیچ ورودیای زیر ۶۴ مگابایت وقفه نمییابد. کلود (Claude) سپس اثبات را در روک (Rocq) نوشت، که هسته روک (Rocq kernel) بهصورت مکانیکی بررسی میکند.
در عرض چند هفته، کلود (Claude) ۲۳۹ نقطه ورودی در ۱۲۳ کتابخانه OSS-Fuzz را اثبات کرد. اثباتها بهجمع تقریباً ۱۸۰ میلیون خط کد روک (Rocq) میرسند، با یک اثبات معمولی در حد ۶۰۰ هزار خط برای باینریهایی با میانگین ۱۸ هزار دستور RISC-V. این اثباتها تکرشتهای (single-threaded)، باینریهای استاتیک (static binaries) با بودجه حافظه ثابت، در حال اجرا روی RISC-V با musl libc را فرض میکنند. پایه محاسبه قابل اعتماد (trusted computing base) تنها به معناشناسی RISC-V و سیستمعامل، جملات تئورم، و خودِ چکر روک (Rocq checker) محدود میشود.

جزئیات: مقیاس و ساختار اثبات
- ۱۲۳ کتابخانه از مبادره OSS-Fuzz گوگل
- ۲۳۹ نقطه ورودی اثباتشده بیوقفه برای تمام ورودیهای زیر ۶۴ مگابایت
- ۱۸۰ میلیون خط کد اثبات روک (Rocq) در مجموع
- حدود ۶۰۰ هزار خط برای هر اثبات معمولی
- ۱۸ هزار دستور RISC-V میانگین طول باینری
- مولفههای قابل اعتماد: معناشناسی RISC-V، معناشناسی پردازش لینوکس، جملات تئورم، چکر اثبات روک
- فرضیات: تکرشتهای، باینری استاتیک، بودجه حافظه ثابت، پردازنده RISC-V، سیستمعامل لینوکس، musl libc
فرآیند تأیید خود صدها باگ را کشف کرد. بسیاری از اینها هرگز در فازیینگ استاندارد ظاهر نمیشوند، که معمولاً ورودیها را در ۱ مگابایت سقف میکند و به راهنمایی پوشش (coverage guidance) متکی است. کلود (Claude) یک زیرشمارش (counter underflow) در یک فكکننده (decompressor) را یافت که فقط روی ورودیهای ۲۰ مگابایتی با چیدمان نادر یک نوشتن خارج از محدوده (out-of-bounds write) را تحریک میکرد. یک خواندن خارج از محدوده (out-of-bounds read) در یک رمزگشای تصویر (image decoder) نیازمند ورودی ۶۴ مگابایتی و بیش از ۲ گیگابایت حافظه بود. باگ سوم یک توالی خاص فراخوانی در دو هندل (handle) به یک فایل واحد میخواست. کلود (Claude) همچنین CVE-2026-56132 در libexpat را بازشناخت، که با ورودیهای عمیق تو در تو فعال میشد.
جزئیات: باگهای کشفشده در طول تأیید
- زیرشمارش در فكکننده: نوشتن خارج از محدوده، فقط روی ورودیهای ~۲۰ مگابایتی با چیدمان نادر خاص
- خواندن خارج از محدوده در رمزگشای تصویر: نیازمند ورودی ۶۴ مگابایتی و >۲ گیگابایت حافظه
- خواندن خارج از محدوده در کتابخانه دیگر: نیازمند توالی خاص فراخوانی در دو هندل به فایل واحد
- CVE-2026-56132 در libexpat: بازشناخته شد، با ورودی عمیق تو در تو فعال میشود
- باگ منطقی در ویژگی محدودسازی فایل: بهصورت مداوم اعمال نمیشد، هرگز وقفه نمیداد اما سیاست امنیتی را نقض میکرد
- خواندۀ PDF: در یک هفته تعداد باگهای امنیتی یافت شده برابر با گزارشهای معمول یک سال، شامل باگ منطقی نهفته بیش از یک دهه
فراتر از وقفهها، کلود (Claude) باگهای منطقی را هم كشف کرد که هرگز وقفه نمیدهند. در اثبات ایمنی حافظه برای یک کتابخانه، متوجه شد ویژگی محدودسازی فایل بهصورت مداوم اعمال نمیشود. در یک خواندۀ PDF (PDF reader)، تیم در یک هفته تعداد باگهای امنیتی یافت شده را برابر با گزارشهای معمول یک سال یافت، شامل یک باگ منطقی که بیش از یک دهه نهفته بود.
اثبات اینکه یک تست فازیینگ هرگز وقفه نمییابد، اغلب ویژگیهای کارکردی سطح بالا را هم اثبات میکند. بسیاری از تستهای OSS-Fuzz داوران رمزگذاری-رمزگشایی دور به دور (encode-decode round-tripping)، مکیدیت (idempotence)، قوانین جبری (algebraic laws)، تست تفاضلی (differential testing)، خودسازگاری (self-consistency)، یا برابری با پیادهسازیهای مرجع را بررسی میکنند. برای فشردهسازی LZO، تست ادعا میکند که فك فشردهسازی یک ورودی فشرده، اصل را بازمیگرداند — اثبات عدم وقفه، این ویژگی را اثبات میکند. برای cpp-httplib، کلود (Claude) باید اثبات میکرد که توازن مجدد درخت قرمز-سیاه (red-black tree) در libc++ عمق را لگاریتمی نگه میدارد، از سرریز پشته (stack overflow) در مخرب (destructor) std::set جلوگیری میکند — همه در سطح کد ماشین.
جزئیات: ویژگیهای سطح بالا اثباتشده از طریق مشخصههای عدم وقفه
- رمزگذاری-رمزگشایی دور به دور: فشردهسازی LZO — decompress(compress(x)) = x
- مکیدیت: اعمال عمل دو بار همان نتیجه یک بار را میدهد
- قوانین جبری: خواص انضمانی، جابجایی، توزیعی
- تست تفاضلی: خروجی با پیادهسازی مرجع مطابقت دارد
- خودسازگاری: انتواریهای داخلی در تمام اجراها برقرار است
- مورد cpp-httplib: اثبات توازن مجدد درخت قرمز-سیاه libc++ عمق را لگاریتمی نگه میدارد، از سرریز پشته در مخرب std::set جلوگیری میکند
تیم این رویکرد را به صحت از ابتدا تا آخر (end-to-end correctness) گسترش داد. کلود (Claude) یک مشخصه رسمی از RFC 1950 (فرمت zlib) نوشت و پیادهسازی zlib کرنل لینوکس (Linux kernel) را در سطح باینری x86 با آن مطابقت داد، با استفاده از معناشناسی x86 تولیدشده توسط کلود (Claude). باگهای کوچک گوشهکیس (corner-case) یافت و به آپاستریم (upstream) گزارش داده شدند. در آزمایش دیگر، کلود (Claude) یک مفسر پایتون (Python interpreter) در رست (Rust) ساخت و با استفاده از وراس (Verus) اثبات کرد که به معناشناسی CPython پایبند است. تست تجربی روی ۱.۷ میلیون برنامه تصادفی ۹۹.۹۵٪ تطابق رفتاری نشان داد.
جزئیات: مطالعات موردی اضافی تأیید رسمی
- zlib/RFC 1950: مشخصه رسمی RFC 1950 توسط کلود (Claude) نوشته شده؛ اثبات شد پیادهسازی zlib کرنل لینوکس در سطح باینری x86 با آن مطابقت دارد با استفاده از معناشناسی ISA x86 تولیدشده توسط کلود (Claude)؛ برای نیمدستگاه کتابخانههای پرکاربرد دیگر تکرار شد؛ باگهای کوچک غیرقابلاستغلال گوشهکیس یافت و به آپاستریم گزارش داده شدند
- مفسر پایتون در رست: زیرمجموعه بزرگی از پایتون پیادهسازی شد؛ پایبندی به معناشناسی CPython از مقاله آکادمیک با وراس (Verus) — ابزار تأیید رست — اثبات شد؛ اعتبارسنجی تجربی روی ۱.۷ میلیون برنامه پایتون تصادفی؛ ۹۹.۹۵٪ رفتار یکسان با CPython؛ تفاوتهای باقیمانده موارد گوشهکیس شناختهشدهاند
- تأیید خواندۀ PDF: یک هفته تأیید، تعداد باگهای امنیتی برابر با گزارشهای معمول یک سال یافت؛ شامل باگ منطقی نهفته بیش از یک دهه
کارایی به سرعت بهبود مییابد. در ۳۶ وظیفه تأیید OSS-Fuzz واقعی، اپاس ۵.۵ (Opus 5.5) نیمی را با حدود ۴۰٪ توکن (token) کمتر از اپاس ۵ (Opus 5) کامل کرد. بازیابی اثبات (proof reuse) این سود را مرکب میکند. وقتی عاملها (agents) فضای کار مشترک داشتند و اثباتهای یکدیگر را کپی میکردند، ۱۷٪ توکن کمتر از عاملهای انفرادی نیاز داشتند، و برخی تنها پس از دسترسی به کار مشترک موفق شدند. در مقیاس، تیمهای کلود (Claude) اثباتهای تمامشده را برای برنامههای جدید تطبیق دادند، بخشهای مشترک بزرگ را تقریباً بدون کد جدید حفظ کردند.
این قابلیت بازیابی، رشد متلب (Mathlib) در لین (Lean) را بازتاب میدهد: هر اثبات جدید بر پایه مشترک ساخته میشود. تلاش OSS-Fuzz یک بدنه مشابه اثباتهای قابل بازیابی را انباشت، که اکنون بخشی از آن منتشر شده است. چون وابستگیها از قانون توان (power law) پیروی میکنند، تأیید یک مجموعه کوچک کتابخانههای مشترک مانند glibc، OpenSSL، و cURL، طیف وسیعی از نرمافزار را قابل اثبات میسازد. تئورم (Theorem) نقشه راه تأیید کل اکوسیستم نیکس (Nix) را منتشر میکند.
جزئیات: بهبودهای کارایی و بازیابی اثبات
- اپاس ۵.۵ در برابر اپاس ۵: ۳۶ وظیفه تأیید از کد واقعی OSS-Fuzz؛ اپاس ۵.۵ نیمی را با ~۴۰٪ توکن کمتر اثبات میکند
- آزمایش فضای کار مشترک: عاملهای کپیکننده اثباتهای یکدیگر ۱۷٪ توکن کمتر از عاملهای انفرادی نیاز داشتند
- ۳۰ از ۳۴ اثبات کاملشده ارزانتر با فضای کار مشترک در برابر انفرادی؛ ۲ اثبات تنها با دسترسی مشترک کامل شدند
- ساختار اثبات: اکثر کد اثبات مربوط به راهاندازی زمان اجرا C و AddressSanitizer است — مشترک در برنامهها
- الگوی تطبیق: تیمها اثبات تمامشده را کپی میکنند، برای برنامه جدید تطبیق میدهند؛ بخشهای مشترک تقریباً کد جدیدی نمیگیرند
- تشبیه متلب: متلب (Mathlib) لین (Lean) به ~۳۰۰ هزار تئورم از ۷۰۰+ مشارکتکننده با همان اصل بازیابی رسید
- نقشه راه اکوسیستم نیکس: تئورم (Theorem) برنامه تأیید glibc، OpenSSL، cURL و کل بستههای نیکس (Nix) را منتشر میکند
محدودیتها باقیماندهاند. اثباتها باینریهای استاتیک (static) تکرشتهای RISC-V پیوندخورده به musl libc را پوشش میدهند — اکثر استقرارهای تولیدی از x86 یا ARM با پیوند دینامیک (dynamic) glibc استفاده میکنند. AddressSanitizer تمام باگهای ایمنی حافظه را نمیگیرد. نه تمام نقاط ورودی برای هر کتابخانه تأیید شدهاند، و کد مرده (dead code) همچنان تأییدنشده باقی میماند. فراخوانندگان (callers) ممکن است کتابخانهها را بهصورت نادرست استفاده کنند و خرابی خارج از محدوده تأیید ایجاد کنند. بستن این شکافها نیازمند مدلهای سیستمی غنیتر و مشخصههای سمت فراخواننده است.
جزئیات: محدودیتها و شکافهای فعلی
- عدم تطابق معماری: اثباتها برای باینریهای استاتیک RISC-V با musl libc؛ تولید از x86/ARM با glibc دینامیک استفاده میکند
- ناقص بودن ASan: AddressSanitizer تمام باگهای ایمنی حافظه را شناسایی نمیکند
- پوشش نقطه ورودی: نه تمام نقاط ورودی فازیینگ برای هر کتابخانه تأیید شده
- کد مرده: کدهای غیرقابلدسترس حتی اگر تمام نقاط ورودی اثبات شده باشند، تأییدنشده میمانند
- سوءاستفاده سمت فراخواننده: کتابخانه تأییدشده همچنان میتواند توسط فراخواننده باگی که پیششرطها را نقض میکند، خراب شود
- باگهای مولفههای قابل اعتماد: روک (Rocq)، معناشناسی RISC-V، معناشناسی لینوکس میتوانند باگ داشته باشند — اما این سطح کوچکی و ثابت است
مسیر روشن است: تأیید رسمی از هنر دستاندرکارانه متخصصان به ابزاری عملی شبیه فازیینگ برای نرمافزار تولیدی در حال تبدیل است. با بالا رفتن قابلیت مدلها و رشد کتابخانههای اثبات، هزینه هر خط تأییدشده کاهش خواهد یافت. آنتروپیک (Anthropic) توسعهدهندگان را تشویق میکند که اکنون آزمایش کنند — بهویژه کسانی که قبلاً با مدلهای پیشین تأیید رسمی را غیرعملی یافتهاند.
انتشار معناشناسی x86 و چندرشتهای (multi-threaded) را رصد کنید که شکاف استقرار را میبندند. توسعهدهندگان میتوانند امروز با مهارت کلود (Claude skill) منتشرشده تئورم (Theorem) و اثباتهای روک (Rocq) باز آغاز کنند. مرز بعدی ادغام تأیید در خط لوله CI استاندارد است، تا تضمینهای امنیتی اثباتشده را بهمرور تستهای عبور شده روتین کند.
زمینه: انتشار و گامهای بعدی
- مصنوعات منتشرشده: زیرمجموعهای از اثباتها (به جز آنهایی که باگهای بدون پچ را فاش میکنند)، معناشناسی RISC-V و سیستمعامل، جملات تئورم، مشخصهها برای تستهای فازیینگ اثباتنشده
- ارائههای تئورم: خط لوله برای پروژههای متنباز دیگر؛ مهارت کلود (Claude skill) برای توسعهدهندگان تا کد خود را تأیید کنند
- تأیید مستقل خوشآمد: تمام مولفههای قابل اعتماد برای بازبینی جامعه منتشر شدهاند
- کارهای آینده: معناشناسی x86، معناشناسی چندرشتهای، مدلهای سیستمعامل غنیتر، مشخصههای سمت فراخواننده
- هدف ادغام CI: تأیید بهمرور تستهای عبور شده در گردشهای کار توسعه استاندارد روتین شود
گام بعدی شما
- مخزن اثباتهای روک (Rocq) منتشرشده تئورم (Theorem) را کلون کنید و یک کتابخانه کوچک OSS-Fuzz را برای درک گردش کار (workflow) تأیید کنید.
- مهارت کلود (Claude skill) تئورم (Theorem) را برای پروژههای شخصیتان امتحان کنید — مستندات و مثالهای راهنما در دسترس است.
- نقشه راه نیکس (Nix) را دنبال کنید: تأیید glibc و OpenSSL میتواند طیف وسیعی از وابستگیهای شما را پوشش دهد.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای بلکول (Blackwell) مراجعه کنید.




گفتگو