| TANG(8) | TANG(8) |
نام (NAME)
tang - سرور مقیدسازی رمزنگاری مبتنی بر شبکه
نمای کلی (OVERVIEW)
تانگ (Tang) سرویسی برای مقیدسازی کلیدهای رمزنگاری به حضور در شبکه است. این ابزار جایگزینی امن، بدون وضعیت (stateless) و ناشناس برای سرویسهای امانتداری کلید (key escrow) ارائه میدهد.
پروژه تانگ به عنوان ابزاری برای کمک به خودکارسازی فرآیند رمزگشایی پدید آمد. سازوکارهای موجود عمدتاً از سیستمهای امانتداری کلید بهره میبرند که در آن کلاینت دادهها را با یک کلید متقارن رمزگذاری کرده و کلید متقارن را برای بازیابیهای بعدی در یک سرور راه دور ذخیره مینماید. هدف این ساختار آن است که کلاینت بتواند هنگام برقراری ارتباط با سرور امانتداری و واکشی کلید، دادهها را به طور خودکار رمزگشایی کند.
با این حال، سرورهای امانتداری نیازمندیهای اضافی بسیاری دارند؛ از جمله احراز هویت (تا کلاینتها نتوانند کلیدهایی را که نباید داشته باشند دریافت کنند) و رمزنگاری لایه انتقال (تا مهاجمانی که ترافیک شبکه را شنود میکنند نتوانند کلیدهای در حال عبور را بربایند).
تانگ از این پیچیدگیها دوری میکند. کلاینت به جای ذخیره کلید متقارن از راه دور، یک تبادل کلید نامتقارن با سرور تانگ انجام میدهد. از آنجا که سرور تانگ هیچ کلید متقارنی را ذخیره نکرده و انتقال نمیدهد، نه نیازی به احراز هویت است و نه نیازی به رمزنگاری انتقال وجود دارد. از این رو، تانگ کاملاً بدون وضعیت و با پیکربندی صفر (zero-configuration) کار میکند. علاوه بر این، کلاینتها میتوانند کاملاً ناشناس باقی بمانند.
تانگ خود کلاینتی ارائه نمیدهد، اما یک REST API ساده ارائه میدهد و منحصراً اشیای استاندارد JSON Object Signing and Encryption (JOSE) را منتقل میکند؛ این امر به شما امکان میدهد کلاینتهای اختصاصی خود را با استفاده از مولفههای آماده بسازید. برای دسترسی به یک چارچوب رمزگذاری خودکار آماده با پشتیبانی از تانگ، پروژه Clevis را مشاهده کنید. برای دریافت تمام جزئیات فنی پروتکل تانگ، به وبسایت رسمی پروژه تانگ مراجعه فرمایید.
شروع به کار (GETTING STARTED)
راهاندازی و اجرای سرور تانگ بسیار ساده است:
$ sudo systemctl enable tangd.socket --now
همین و بس. سرور اکنون با مجموعهای تازه از کلیدهای رمزنگاری در حال اجراست و با راهاندازی مجدد سیستم نیز به صورت خودکار شروع به کار خواهد کرد.
پیکربندی (CONFIGURATION)
تانگ به گونهای طراحی شده است که یک سرویس شبکه کمینه باشد و در نتیجه هیچ پیکربندی خاصی ندارد. برای تنظیم پارامترهای شبکه، میتوانید با استفاده از سازوکارهای استاندارد systemd، فایل واحد tangd.socket را بازنویسی کنید. برای اطلاعات بیشتر به systemd.unit(5) و systemd.socket(5) مراجعه کنید.
مستقل یا از طریق SYSTEMD (STANDALONE OR VIA SYSTEMD)
سرور تانگ میتواند از طریق فعالسازی سوکت systemd یا با ارسال گزینه -l به صورت مستقل (standalone) اجرا شود. پورت پیشفرض مورد استفاده 9090 است که میتوان آن را با گزینه -p تغییر داد.
tang -l -p 9090
نقطه پایانی (ENDPOINT)
میتوان برای سرور تانگ یک نقطه پایانی (endpoint) تعیین کرد. این نقطه پایانی به عنوان پیشوند برای نشانی وب (URL) قابل دسترسی توسط کلاینت عمل خواهد کرد. این نقطه پایانی را میتوان با گزینه -e مشخص کرد.
tang -l -p 9090 -e this/is/an/endpoint
هنگامی که نقطه پایانی تعیین شود، این نقطه پایانی به ابتدای URL معمولی adv/rec اضافه خواهد شد. اگر هیچ نقطه پایانی مشخص نشود و با فرض استفاده از پورت 9090، سرور تانگ روی نشانیهای وب زیر گوش فرا خواهد داد:
http://localhost:9090/adv (GET) http://localhost:9090/rec (POST)
اگر نقطه پایانی تعیین شود و با فرض اینکه این نقطه پایانی /this/is/an/endpoint/ باشد و همچنین با فرض استفاده از پورت 9090، سرور تانگ روی نشانیهای وب زیر گوش خواهد داد:
http://localhost:9090/this/is/an/endpoint/adv (GET) http://localhost:9090/this/is/an/endpoint/rec (POST)
چرخش کلید (KEY ROTATION)
به منظور حفظ امنیت سیستم در بلندمدت، لازم است کلیدهای خود را به صورت دورهای بچرخانید (rotate کنید). بازه زمانی دقیق برای چرخش کلید به کاربرد، اندازه کلیدها و خطمشیهای سازمانی شما بستگی دارد. برای توصیههای متداول به این پیوند مراجعه کنید: https://www.keylength.com
یک اسکریپت کاربردی برای مدیریت این موضوع وجود دارد. برای اطلاعات بیشتر به tangd-rotate-keys(1) مراجعه کنید. این فرآیند همچنین میتواند مطابق توضیحات زیر به صورت دستی انجام پذیرد.
برای چرخش کلیدها، ابتدا باید کلیدهای جدیدی در دایرکتوری پایگاه داده کلید ایجاد کنیم. این مسیر معمولاً /var/db/tang است. به عنوان مثال، میتوانید کلیدهای امضا و تبادل جدید را با دستورات زیر بسازید:
# DB=/var/db/tang
# jose jwk gen -i '{"alg":"ES512"}' -o $DB/new_sig.jwk
# jose jwk gen -i '{"alg":"ECMR"}' -o $DB/new_exc.jwk
سپس، نام کلیدهای قدیمی را تغییر دهید تا با یک . آغاز شوند و از تبلیغ و اعلان عمومی پنهان بمانند:
# mv $DB/old_sig.jwk $DB/.old_sig.jwk # mv $DB/old_exc.jwk $DB/.old_exc.jwk
تانگ بلافاصله تمامی تغییرات را اعمال خواهد کرد. نیازی به راهاندازی مجدد نیست.
در این مرحله، مقیدسازیهای کلاینتهای جدید کلیدهای تازه را به کار خواهند گرفت و کلاینتهای قدیمی نیز میتوانند به استفاده از کلیدهای پیشین ادامه دهند. هنگامی که اطمینان یافتید همه کلاینتهای قدیمی به استفاده از کلیدهای جدید مهاجرت کردهاند، میتوانید کلیدهای قدیمی را حذف کنید. به یاد داشته باشید که حذف کلیدهای قدیمی در حالی که کلاینتها هنوز در حال استفاده از آنها هستند میتواند منجر به از دست رفتن دادهها شود؛ این هشدار را جدی بگیرید.
کارایی بالا (HIGH PERFORMANCE)
پروتکل تانگ به شدت سریع است. با این حال، در راهاندازی پیشفرض از فعالسازی سوکت systemd برای اجرای یک فرایند به ازای هر اتصال استفاده میشود. این کار سرباری بر کارایی تحمیل میکند. برای اغلب استقرارها، با توجه به اینکه تانگ بسیار سبکوزن است، این روش احتمالاً به اندازه کافی سریع است؛ اما برای استقرارهای بزرگتر، میتوان به کارایی بالاتری دست یافت.
توصیه ما برای دستیابی به توان عملیاتی بالاتر این است که ترافیک به سمت تانگ را با استفاده از یک استخر اتصال (connection pool) از طریق سرویسهای وب موجود خود پراکسی کنید. از آنجا که به ازای هر اتصال یک فرایند مجزا وجود دارد، باز نگه داشتن تعدادی اتصال در این حالت، به دلیل نبود قفلهای داخلی در تانگ، همزمانی و موازیسازی موثری را به همراه خواهد داشت.
در وبسرور آپاچی، این کار با استفاده از دستورالعمل ProxyPass در ماژول mod_proxy میسر است.
دسترسپذیری بالا (HIGH AVAILABILITY)
تانگ دو روش برای راهاندازی یک محیط با دسترسپذیری بالا فراهم میکند.
اگرچه به اشتراک گذاشتن کلیدها میان چندین سرور تانگ ممکن است وسوسهانگیز باشد، اما باید از این روش پرهیز کرد. اشتراکگذاری کلید خطر افشای کلید را افزایش میدهد و نیازمند زیرساخت خودکارسازی اضافه است.
در عوض، کلاینتها باید به گونهای توسعه یابند که امکان مقیدسازی به چندین سرور تانگ را داشته باشند. در این حالت، هر سرور تانگ کلیدهای ویژه خود را دارد و کلاینتها با برقراری ارتباط با زیرمجموعهای از این سرورها قادر به رمزگشایی خواهند بود.
ابزار Clevis پیشاپیش از طریق افزونه sss خود از این شیوه کاری پشتیبانی میکند.
با این همه، اگر هنوز بر این باورید که اشتراکگذاری کلید استراتژی مناسبی برای استقرار شماست، تانگ مانعی سر راهتان قرار نمیدهد. تنها کافی است تمام محتویات دایرکتوری پایگاه داده را (با رعایت کامل امنیت!) به تمامی سرورهای خود انتقال دهید. دقت کنید که کلیدهای اعلاننشده (مخفی) را جا نیندازید! سپس توزیع بار DNS round-robin را تنظیم کنید تا کلاینتها میان سرورهای شما متعادل شوند.
دستورات (COMMANDS)
سرور تانگ هیچ دستور عمومی ارائه نمیکند.
نویسنده (AUTHOR)
Nathaniel McCallum <npmccallum@redhat.com>
همچنین ببینید (SEE ALSO)
systemd.unit(5), systemd.socket(5), jose-jwk-gen(1), tang-show-keys(1), tangd-rotate-keys(1)
مطالعه بیشتر (FURTHER READING)
| 02/14/2026 |