پروتکل SingLink اکنون متنباز است

Contents
امروز SingLinkLabs، تیمی که SingLinkVPN را میسازد، کد منبع کامل پروتکل SingLink را با مجوز Apache-2.0 در GitHub منتشر کرد. اکنون هر کسی میتواند مشخصات فنی را بخواند، کد را اجرا کند، امنیت آن را بررسی کند و بر پایهاش چیزی بسازد.
وقتی برنامهٔ متنباز SingLinkVPN را اعلام کردیم، گفتیم که یک پروتکل VPN و یک کلاینت VPN مرحلهبهمرحله منتشر خواهند شد. این همان گام است. پروتکل همراه با نمونهٔ اولیهٔ نسل اول اپلیکیشن SingLinkVPN منتشر میشود که روی همین پروتکل کار میکند — ببینید: نمونهٔ اولیهٔ اپلیکیشن SingLinkVPN اکنون متنباز است.
مخزن: SingLinkLabs / singlink-protocol · نسخه: 1.0.0-draft (نام روی سیم
SingLink/1، پیشنویس مشخصات 2) · مجوز: Apache-2.0 · زبان: Go، فقط با کتابخانهٔ استاندارد
چه چیزهایی منتشر میشود
- مشخصات فنی. SPEC.md قالب داده روی سیم را بایتبهبایت شرح میدهد تا بتوان پروتکل را بهطور مستقل پیادهسازی کرد.
- کتابخانهٔ پروتکل به زبان Go. فقط از رمزنگاری موجود در کتابخانهٔ استاندارد Go استفاده میکند و هیچ وابستگی شخص ثالثی ندارد.
- یک ابزار خط فرمان برای ساختن کلید، صدور مجوز دسترسی، ایجاد لینک اتصال، اجرای یک نود و یک کلاینت، و راهاندازی یک دموی تکدستگاهی.
- یک پراکسی محلی برای اپلیکیشنها (SOCKS5 و HTTP) و یک رابط کتابخانهای C (
libsinglink)، تا اپلیکیشنها روی هر پلتفرمی بتوانند پروتکل را در خود جای دهند. - نمونههای استقرار: یک پیکربندی نمونه برای نود و یک فایل سرویس systemd مقاومسازیشده.
- بازبینی امنیتی داخلی، همراه با همهٔ یافتهها و اصلاحات: SECURITY-AUDIT.md.
SingLink 2.0 و پروتکل باز SingLink دو پروتکل متفاوتاند
اپلیکیشنهای رسمی SingLinkVPN روی پروتکلهای عملیاتی ما، از جمله SingLink 2.0، کار میکنند. کد منبع اصلی SingLink 2.0 بخشی از این انتشار نیست و همچنان بسته میماند.
پروتکل SingLink که امروز منتشر شد — یا پروتکل باز SingLink، هر جا که لازم باشد از SingLink 2.0 متمایز شود — پروتکلی جداگانه است که SingLinkLabs آن را از صفر برای توسعهٔ باز طراحی کرده است. اپلیکیشنهای رسمی در حال حاضر از آن استفاده نمیکنند. برای کاربران فعلی هیچ چیز تغییر نمیکند: همان اپلیکیشنها، همان حساب و همان اتصالها.
چرا آن را متنباز میکنیم
- ادعاهای امنیتی باید قابل بررسی باشند. ادعای تبادل کلید پساکوانتومی، اتصال به دستگاه و مقاومت در برابر کاوش آسان است. با عمومی بودن کد و مشخصات، هر کسی میتواند آنها را راستیآزمایی کند.
- چشمهای بیشتر، مشکلات را زودتر پیدا میکنند. پژوهشگران و مهندسان بیرونی مشکلاتی را میبینند که از چشم تیم داخلی پنهان میماند.
- دیگران میتوانند بر پایهٔ آن بسازند. توسعهدهندگان میتوانند آن را آزمایش کنند، در پروژههای خودشان به کار ببرند و بهبودهایی پیشنهاد دهند.
- به برنامهمان عمل میکنیم. انتشار یک پروتکل یکی از مرحلههایی بود که وعده داده بودیم.
چطور کار میکند، به زبان ساده
ایده در یک جمله: از بیرون، کاربر فقط در حال بازدید از یک وبسایت HTTPS معمولی است. درون آن یک درخواست دسترسی رمزگذاریشده پنهان است و سرور فقط ترافیک کسی را رد و بدل میکند که مجوز معتبر داشته باشد.
این طراحی از سه کلید استفاده میکند. سیستم امنیتی یک ساختمان اداری را تصور کنید:
- کلید نود، قفل در. هر سرور کلید مخصوص خودش را دارد. فقط همان سرور میتواند درخواست کاربر را باز کند، و این ثابت میکند کاربر به سرور واقعی رسیده است.
- کلید صادرکننده، مُهر واحد منابع انسانی. این کلید نزد سامانهٔ پشتیبان حسابها میماند که هر مجوز دسترسی را با طرح اشتراک، تاریخ انقضا، محدودیت سرعت و محدودیت تعداد دستگاه مُهر میزند.
- کلید دستگاه، اثر انگشت کاربر. روی گوشی یا رایانهٔ کاربر میماند و هر اتصال را امضا میکند تا ثابت شود مجوز را صاحب واقعیاش به کار میبرد.
سرور فقط کافی است بداند مُهر چه شکلی دارد تا خودش مجوز را بررسی کند. به همین دلیل نودها هیچ پایگاه دادهٔ کاربری ندارند و هیچ دادهٔ کاربری ذخیره نمیکنند.
در طول یک اتصال چه اتفاقی میافتد
- اپلیکیشن اتصالی را باز میکند که شبیه یک اتصال HTTPS معمولی به یک وبسایت است.
- نخستین بستهٔ آن یک کلید یکبارمصرف برای همین اتصال، یک متن رمزشدهٔ پساکوانتومی و یک بخش مُهرومومشده را حمل میکند که شامل مقصد، مجوز دسترسی، حداکثر 8 KB نخست از دادهٔ واقعی و امضای دستگاه روی کل درخواست است. به رفتوبرگشت اضافه نیازی نیست.
- سرور همه چیز را بررسی میکند: اینکه میتواند درخواست را رمزگشایی کند، اینکه مُهر اصل است، اینکه امضای دستگاه مطابقت دارد، اینکه زمان درست است، و اینکه درخواست تکراری نیست و منقضی یا لغوشده هم نیست.
- فقط اگر همهٔ بررسیها موفق باشند، سرور پاسخ میدهد و رد و بدل کردن ترافیک را آغاز میکند. اگر حتی یک بررسی ناموفق باشد، اتصال دستنخورده به یک وبسایت واقعی سپرده میشود. کسی که سرور را کاوش میکند همیشه فقط یک وبسایت معمولی میبیند، بدون هیچ تفاوتی در زمانبندی.
- دو طرف کلیدهای یکبارمصرف خود را ترکیب میکنند تا کلیدهای نشست این اتصال ساخته شود. دادهها در قطعههایی رمزگذاری میشوند، به قطعههای نخست لایهگذاری (padding) افزوده میشود و کلیدها پس از میزان مشخصی از استفاده بهطور خودکار جایگزین میشوند.
ویژگیهای امنیتی
- دو لایه رمزگذاری. HTTPS در بیرون و لایهٔ AES-256-GCM خود پروتکل در درون، بنابراین حتی یک CDN که HTTPS را خاتمه میدهد نمیتواند محتوا را ببیند.
- محافظت پساکوانتومی. تبادل کلید، X25519 کلاسیک را با ML-KEM-768 (FIPS 203) ترکیب میکند. مهاجم باید هر دو را بشکند.
- محرمانگی پیشرو. هر اتصال از کلیدهای یکبارمصرف استفاده میکند، بنابراین سروری که بعدها نفوذ شود نمیتواند ترافیک گذشته را رمزگشایی کند. استثنا نخستین بسته است (محدودیتهای پایین را ببینید).
- اتصال به دستگاه. مجوز دسترسیای که از جایی کپی شده باشد بدون کلید دستگاهی که برایش صادر شده بیفایده است.
- محافظت در برابر بازپخش. ارسال دوبارهٔ یک بستهٔ شنودشده کار نمیکند، حتی پس از راهاندازی دوبارهٔ سرور.
- مقاومت در برابر کاوش. درخواستهای منقضی، لغوشده، تکراری یا جعلی همه یکسان برخورد میشوند: به وبسایت واقعی سپرده میشوند.
- کنترل متمرکز. وقتی یک حساب یا دستگاه لغو شود، اتصالهای فعال آن روی همهٔ سرورها در حدود 10 ثانیه بسته میشوند.
- سرورهای مقاومسازیشده. محدودیت اتصال برای هر سرور و هر IP، بودجهٔ CPU برای دستدهیها، و فهرست مسدودسازی کامل برای نشانیهای خصوصی و نشانیهای ویژه.
ایدهها از کجا آمدهاند
پروتکل SingLink از طراحیهای جاافتاده درس گرفته است: اتصال تکدرخواستی از VLESS و Trojan، سپردن اتصالهای ناموفق به یک وبسایت واقعی از Trojan و obfs4، الگوی دستدهی Noise NK، استخراج کلید و مدیریت 0-RTT از TLS 1.3، تبادل کلید پساکوانتومی ترکیبی از پیشنویس استاندارد X-Wing، رمزگذاری قطعهای از Shadowsocks AEAD، توکنهای امضاشده از JWT و PASETO، توکنهای وابسته به دستگاه از OAuth DPoP، HAProxy PROXY protocol، و محافظت در برابر بازپخش و فشار بار از WireGuard.
اینها فقط ایدههای طراحیاند. تمام کد از صفر نوشته شده است. هیچ کدی از Xray، V2Ray، sing-box یا WireGuard در آن به کار نرفته است.
وضعیت فعلی و محدودیتهای شناختهشده
- هنوز پیشنویس است. نسخه 1.0.0-draft است و قالب داده روی سیم ممکن است هنوز تغییر کند.
- تا اینجا فقط بازبینی امنیتی داخلی. دو بازبین، طراحی رمزنگاری و پیادهسازی را جداگانه بررسی کردند و 31 یافته ثبت کردند: 2 مورد با شدت بالا، 14 مورد متوسط و بقیه کم یا اطلاعاتی. هیچکدام محرمانگی یا احراز هویت ترافیک کاربران را نشکست. همهٔ یافتههای بالا و متوسط اصلاح یا کاهش داده شدهاند، هرکدام با یک آزمون رگرسیون، و همهٔ تجزیهگرها با آزمونهای fuzz پوشش داده شدهاند.
- هنوز ممیزی شخص ثالث انجام نشده است. توصیه میکنیم تا زمانی که پروتکل ممیزی مستقل نشده است، برای کاربردهای پرخطر به آن تکیه نکنید؛ این ممیزی را پیش از پایدار اعلام کردن آن برنامهریزی کردهایم.
- نخستین بسته محرمانگی پیشرو ندارد. این بسته با کلید بلندمدت سرور محافظت میشود، پس کلیدهای سرور باید بهطور منظم چرخانده شوند. چرخش کلید پشتیبانی میشود.
- در سرزمین اصلی چین در عمل آزموده نشده است. اثر انگشت TLS و اندازهٔ نخستین بستهٔ آن هنوز قابل تشخیص است. برای کاربران سرزمین اصلی چین، اپلیکیشنهای رسمی SingLinkVPN همچنان از پروتکلهای عملیاتی فعلی ما استفاده میکنند.
- هر سرور به دامنهٔ مخصوص خودش نیاز دارد، به گواهیای که مرورگرها بپذیرند، و به یک وبسایت واقعی در پشت آن.
امتحانش کنید و مشارکت کنید
با Go 1.24 یا جدیدتر، make test مجموعهٔ آزمونها را اجرا میکند، make cli ابزار خط فرمان را میسازد و singlink demo یک سرور و کلاینت محلی را روی یک دستگاه راهاندازی میکند. فایل README در مخزن توضیح میدهد چگونه یک سرور اجرا کنید.
پرسشها، گزارش باگها و Pull Requestها در GitHub پذیرفته میشوند. لطفاً آسیبپذیریهای امنیتی را بهصورت خصوصی گزارش دهید، نه در یک Issue عمومی — روند کار در SECURITY.md آمده است.
مجوز و علائم تجاری
کد با مجوز Apache-2.0 منتشر شده است: میتوانید آن را طبق شرایط مجوز، از جمله برای مقاصد تجاری، استفاده، تغییر و بازتوزیع کنید. نامهای "SingLink" و "SingLinkVPN" و لوگو علائم تجاری SingLinkLabs هستند و این مجوز اجازهٔ استفاده از آنها را جز برای بیان منشأ اثر نمیدهد. نسخههای تغییریافته و فورکها باید با نام و آیکون خودشان منتشر شوند.
مطالعهٔ بیشتر
- نمونهٔ اولیهٔ اپلیکیشن SingLinkVPN اکنون متنباز است — و کد آن در GitHub
- پروژههای متنباز SingLinkLabs
- وایتپیپر فنی SingLink 2.0، پروتکل عملیاتی اپلیکیشنهای رسمی

