موضوع مقاله: امنیت لایه انتقال | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # امنیت لایه انتقال | مقدمه: برای اطمینان از هویت طرف مقابل و تبادل کلید متقارن از گواهی X.509 و رمزنگاری نامتقارن استفاده می‌کند. | ## بخش 1: امنیت لایه انتقال | این پروتکل امنیت انتقال داده‌ها را در اینترنت برای مقاصدی چون کار کردن با پایگاه‌های وب، پست الکترونیکی، نمابرهای اینترنتی و پیام‌های فوری اینترنتی به کار می‌رود. اگرچه TLS و SSL با هم تفاوت‌های اندکی دارند ولی قسمت عمده‌ای از این پروتکل کم و بیش یکسان مانده است. TLS و SSL درمدل TCP/IP عمل رمزنگاری را در لایه‌های پایینی لایه کاربرد انجام می‌دهند ولی در مدل OSI در لایه جلسه مقداردهی را شده و در لایه نمایش کار می‌کنند: ابتدا لایه جلسه با استفاده از رمزنگاری نامتقارن تنظیمات لازم برای رمزنگاری را انجام می‌دهد و سپس لایه نمایش عمل رمزگذاری ارتباط را انجام می‌دهد. SSL از یک کلید خصوصی برای به رمز درآوردن اطلاعاتی که بر روی یک ارتباط SSL منتقل می‌شوند استفاده می‌نماید. همچنین بسیاری از وب‌سایت‌ها برای فراهم کردن بستری مناسب جهت حفظ کردن اطلاعات محرمانهٔ کاربران (مانند شمارهٔ کارت اعتباری) از این پروتکل استفاده می‌نمایند. همچنین در ssl از دو حالت متقارن و نامتقارن نیز می‌توان نام برد که می‌تواند همان بحث کلید عمومی و اختصاصی باشد به این صورت که در رمزنگاری متقارن از دو کلیدعمومی توسط سرور و کلاینت استفاده می‌شود که در این صورت مطالب رمزنگاری شده از امنیت برخوردار نخواهد شد زیرا کلید مشترک مابین (سرور و مشتری) توسط شخص ثالث می‌تواند استراق سمع یا هک شود؛ بنابراین از حالت نامتقارن استفاده می‌شود. در رمزنگاری نامتقارن از دو کلید B و A استفاده می‌شود؛ یعنی اگر مطالب با کلید A رمزنگاری شود، دیگر با همان کلید رمزگشایی نخواهد شد و فقط با کلیدB که متناظر با کلید A است، رمزگشایی خواهدشد. دو راه برای رسیدن به این هدف وجود دارد: یک راه این است که از شماره پورت متفاوتی برای اتصال TLS استفاده شود (برای مثال پورت ۴۴۳ پروتکل امن انتقال ابرمتن) و دیگر اینکه اختصاص یک پورت مشخص از طریق سرور به کلاینت، که کلاینت آن را درخواست کرده باشد با استفاده از یک مکانیسم پروتکل خاص (برای مثال STARTTLS). سپس سرور و کلاینت بر روی پارامترهای مختلفی که برای ایجاد امنیت اتصال استفاده می‌شود به توافق می‌رسند: کلاینت اطلاعاتی را که سرور برای برقراری ارتباط با استفاده از SSL به ان نیاز دارد را ارسال می‌کند. مانند:شماره نسخه SSL کلاینت، تنظیمات رمزگذاری و سایر اطلاعاتی که سرور ممکن است به آن نیاز داشته باشد. سرور اطلاعاتی را که کلاینت برای برقراری ارتباط با استفاده از SSL به ان نیاز دارد را برایش ارسال می‌کند. مانند:شماره نسخه SSL سرور، تنظیمات رمزگذاری و سایر اطلاعاتی که کلاینت به آن نیاز دارد. سرور همچنین گواهینامه خود را برای کلاینت ارسال می‌کند و اگر کلاینت درخواست منبعی از سرور داشته باشد، کلاینت باید احراز هویت شود و باید گواهینامه کلاینت برای سرور ارسال شود. اگر سرور تصدیق نشود، به کاربر هشدار داده می‌شود که عمل رمزگذاری و تصدیق نمی‌تواند انجام گیرد. اگر سرور از کلاینت بخواهد هویتش را ثابت کند، کلاینت کلیه اطلاعات لازم و گواهی خود را برای سرور ارسال می‌کند. کلاینت و سرور از master secret برای تولید کلید جلسات استفاده می‌کنندکه یک کلید متقارن است و برای رمزگذاری و رمزگشایی اطلاعات مبادله شده استفاده می‌شود. وقتی کلاینت پیغامی برای سرور ارسال می‌کند با استفاده از کلید جلسه آن را رمز می‌کند. وقتی سرور پیغامی برای کلاینت ارسال می‌کند با استفاده از کلید جلسه آن را رمز می‌کند. کلاینت و سرور از کلید جلسه برای رمزگذاری و رمزگشایی اطلاعاتی که برای هم می‌فرستند استفاده می‌کنند. اگر یکی از قدم‌های بالا با شکست مواجه شود TLS دچار شکست شده و ارتباط برقرار نمی‌شود. تاریخچه برنامه‌نویسی امن تلاش‌های تحقیقاتی در اوایل نسبت به امنیت در لایه انتقال شامل برنامه‌نویسی شبکه‌ای امن و رابط برنامه‌نویسی کاربردی بود. | ## بخش 2: امنیت لایه انتقال | در سال ۱۹۹۳ به بررسی رویکرد داشتن یک لایه انتقال امن، به منظور تسهیل مقاوم‌سازی برنامه‌های کاربردی موجود در شبکه با اقدامات امنیتی پرداخته شد. نسخه ۲٫۰ آن در سال ۱۹۹۵ منتشر شد که تعدادی نقص‌های امنیتی داشت و منجر به تولید نسخه ۳٫۰ شد. تفاوت چشمگیری بین این پروتکل و SSL 3.0 وجود ندارد و می‌توان گفت این پروتکل SSL 3.0 را کامل کرده است. تفاوت‌های عمدهٔ آن با TLS 1.2 عبارت‌اند از: جدا کردن الگوریتم‌های توافق کلید و احراز هویت از مجموعه‌رمزها حذف پشتیبانی از منحنی‌های بیضوی ضعیف و کم‌کاربرد حذف پشتیبانی از توابع هش رمزنگاری MD5 و SHA-224 الزام به استفاده از امضاهای دیجیتال حتی زمانی که از یک پیکربندی قبلی استفاده می‌شود یکپارچه‌سازی HKDF و پیشنهاد دیفی-هلمن نیمه‌گذرا جایگزین کردن ازسرگیری نشست با PSK و بلیت‌ها پشتیبانی از دست‌دهی‌های ۱-RTT و پشتیبانی اولیه از ۰-RTT الزامی‌کردن محرمانگی پیشرو کامل، از طریق استفاده از کلیدهای گذرا در طول توافق کلید (EC)DH حذف پشتیبانی از بسیاری از قابلیت‌های ناامن یا منسوخ، از جمله فشرده‌سازی، مذاکرهٔ مجدد، مجموعه‌رمزهای غیر AEAD، رمزهای تهی، تبادل کلید بدون PFS (از جمله تبادل کلید RSA ایستا و DH ایستا)، گروه‌های سفارشی DHE، مذاکرهٔ قالب نقطهٔ EC، پروتکل Change Cipher Spec، زمان یونیکسی پیام Hello، و فیلد طول ورودی دادهٔ اضافی برای رمزهای AEAD ممنوع‌کردن مذاکرهٔ SSL یا RC4 به‌منظور سازگاری با گذشته یکپارچه‌سازی استفاده از هش نشست منسوخ‌کردن استفاده از شمارهٔ نسخهٔ لایهٔ رکورد و ثابت نگه‌داشتن آن برای بهبود سازگاری با نسخه‌های پیشین انتقال برخی جزئیات الگوریتمیِ مرتبط با امنیت از یک پیوست به متن اصلی مشخصات و منتقل‌کردن ClientKeyShare به یک پیوست افزودن رمز جریانی ChaCha20 همراه با کد اصالت‌سنجی پیام Poly1305 افزودن الگوریتم‌های امضای دیجیتال Ed25519 و Ed448 افزودن پروتکل‌های تبادل کلید x25519 و x448 افزودن پشتیبانی از ارسال چندین پاسخ OCSP رمزنگاری همهٔ پیام‌های دست‌دهی پس از ServerHello، از جمله گواهی کلید عمومی خدمات امنیت شبکه (NSS)، کتابخانهٔ رمزنگاری توسعه‌یافته توسط موزیلا و مورد استفاده در مرورگر وب فایرفاکس، در فوریهٔ ۲۰۱۷ TLS 1.3 را به‌طور پیش‌فرض فعال کرد. سپس پشتیبانی از TLS 1.3 به Firefox 52.0 که در مارس ۲۰۱۷ منتشر شد افزوده شد، اما به‌دلیل مشکلات سازگاری برای شمار اندکی از کاربران، به‌طور خودکار فعال نشد. سپس به‌دلیل ناسازگاری میان‌افزارهای میانی مانند پروکسی‌های وب بلو کوت، این تنظیم پیش‌فرض را برداشت. ناسازگاری با نسخهٔ جدید TLS نمونه‌ای از استخوانی‌شدن پروتکل بود؛ میان‌افزارهای میانی روی پارامتر نسخهٔ پروتکل «استخوانی» شده بودند. این تغییر بسیار دیر در فرایند طراحی رخ داد و تنها هنگام استقرار در مرورگرها کشف شد. کشف این ناسازگاری همچنین باعث شد راهبرد پیشین مذاکرهٔ نسخه، که در آن بالاترین نسخهٔ سازگار انتخاب می‌شد، به‌دلیل سطح غیرعملیِ استخوانی‌شدن کنار گذاشته شود. روش «گریس‌کردن» یک نقطهٔ توسعه، که در آن یکی از طرفین پروتکل ادعا می‌کند از افزونه‌های ناموجود پشتیبانی می‌کند تا اطمینان حاصل شود افزونه‌های ناشناخته اما واقعاً موجود تحمل می‌شوند و در نتیجه در برابر استخوانی‌شدن مقاومت ایجاد شود، در اصل برای TLS طراحی شده بود اما بعدها در جاهای دیگر نیز به کار رفت. در طول هکاتون ۱۰۰ام IETF که در سال ۲۰۱۷ در سنگاپور برگزار شد، گروه TLS روی سازگار کردن برنامه‌های متن‌باز برای استفاده از TLS 1.3 کار کرد. wolfSSL 3.11.1 به‌عنوان نخستین پیاده‌سازی تجاری TLS 1.3، از پیش‌نویس ۱۸ پشتیبانی می‌کرد و اکنون از پیش‌نویس ۲۸، یعنی نسخهٔ نهایی، و نیز بسیاری از نسخه‌های قدیمی‌تر پشتیبانی می‌کند. در سپتامبر ۲۰۱۸، پروژهٔ پرکاربرد OpenSSL نسخهٔ ۱٫۱٫۱ کتابخانهٔ خود را منتشر کرد که در آن، پشتیبانی از TLS 1.3 «مهم‌ترین قابلیت جدید» بود. این پروتکل برای استفادهٔ کامل درون شبکه‌های اختصاصی مانند سامانه‌های بانکی در نظر گرفته شده است. ETS از محرمانگی پیشرو پشتیبانی نمی‌کند تا به سازمان‌های ثالث متصل به شبکه‌های اختصاصی امکان دهد با استفاده از کلید خصوصی خود، ترافیک شبکه را برای شناسایی بدافزار پایش کنند و انجام ممیزی‌ها نیز آسان‌تر شود. با وجود مزایای ادعاشده، بنیاد مرز الکترونیکی هشدار داد که از دست رفتن محرمانگی پیشرو می‌تواند افشای داده‌ها را آسان‌تر کند و نیز تأکید کرد که راه‌های بهتری برای تحلیل ترافیک وجود دارد. با استفاده از پروتکل‌های انتقال داده گرام مانند UDP و پروتکل کنترل ازدحام داده(DCCP)استفاده می‌شود. وب سایت‌ها یک استفاده برجسته از TLS این است که برای امن کردن ترافیک بین وب سایت‌ها و مرورگرها استفاده می‌شود. تبادل کلید در پیاده‌سازی‌های نخستین لایهٔ سوکت‌های امن، به علّت محدودیت‌های اعمال شده بر روی صادرات تکنولوژی رمزنگاری از طرف دولت ایالات متحده، از کلیدهای متقارن با طول ۴۰ استفاده می‌شد. قبل از اینکه کلاینت و سرور به تبادل اطلاعات حفاظت شده توسط TLS بپردازند باید بر روی یک کلید رمزگذاری و یک روش رمزگذاری توافق کنندتا مبادلهٔ امنی داشته باشند. قسمتی از SSL که در لایه دوم قرار می‌گیرد مربوط به سرویس‌های مدیریتی است و شامل پروتکل دست دادن، پروتکل تغییر مشخصات رمز کننده و پروتکل هشدار است. | ## بخش 3: امنیت لایه انتقال | SSL اجازه می‌دهد که بین کلاینت و سرور یک جلسه ایجاد شود و از آن طریق هر تعداد اتصال امن امکان‌پذیر باشد. از نظر تئوری بین یک کلاینت و یک سرور می‌تواند بیش از یک جلسه وجود داشته باشد و در عمل فقط یک جلسه به وجود می‌آید. یک جلسه توسط پروتکل دست دادن ایجاد می‌شود و مجموعه‌ای از پارامترهای امنیتی را تعریف می‌کند که به صورت اشتراکی در اتصالات مربوط به آن جلسه استفاده می‌شوند. پروتکل رکورد در SSL این پروتکل مربوط به لایه اول SSL است که دو سرویس محرمانگی و احراز هویت را به‌واسطهٔ کلیدهایی که در پروتکل دست دادن ساخته می‌شوند فراهم می‌کندو در این پروتکل محرمانگی توسط الگوریتم رمز متقارن و احراز اصالت توسط MAC فراهم می‌شود. پروتکل تغییر مشخصات رمز در SSL این پروتکل ساده‌ترین پروتکل مربوط به لایه دوم است که تنها یک بایت با مقدار یک دارد. هدف از این پیام یک بایتی تغییر اطلاعات رمزگذاری مربوط به ارتباط موجود است که در واقع وضعیت معلق را به وضعیت جاری کپی می‌کند. پروتکل هشدار در SSL این پروتکل به منظور اعلام هشدارهای SSL به طرفین اتصال استفاده می‌شود. کد خطا مانند پیغام غیرمنتظره، خطا در بازگشایی، خطا در گواهی و … اگر خطا ز نوع Fatal باشد، اتصال مذکور فوراً قطع می‌شود و اجازه ایجاد اتصال جدید در جلسه فوق داده نمی‌شود، اما ارتباطات دیگر موجود در این جلسه می‌توانند ادامه پیدا کنند. پروتکل دست دادن در SSL این عمل به منظور احراز اصالت دوطرف و توافق روی الگوریتم‌ها و کلیدهای رمزگذاری است و به لایه دوم مربوط است و قبل از هر انتقال داده بین دو طرف این پروتکل صورت می‌گیرد. این پروتکل پیچیده‌ترین پروتکل SSL است که یکسری پیام دارد که بین دوطرف ارتباط مبادله می‌شود. مرحله ۱: برقراری قابلیت‌های امنیتی این مرحله به منظور آغاز یک اتصال منطقی برای معین کردن قابلیت‌های امنیتی مربوط به آن اتصال است. مرحله ۲: احراز اصالت و تبادل کلید سرور در این مرحله حداکثر ۴ پیام از طرف سرور به کلاینت ارسال می‌شود که ۳ تا از آن‌ها اختیاری است. پیام چهارم که حتماً باید ارسال شود پارامتری ندارد و بیان‌کننده پایان ارسال پیام مرحله دوم است. مرحله ۳: احراز اصالت و تبادل کلید کلاینت در این مرحله ۳ پیام از کلاینت به سرور ارسال می‌شود که فقط یکی از آن‌ها اجباری است. مرحله ۴: پایان در این مرحله طرفین با ارسال مشخصات رمز کننده وضعیت جدید رمز خود را اطلاع می‌دهند و سپس با ارسال پیام پایانی، پروتکل دست دادن را پایان می‌دهند. این قالب‌ها معمولاً شامل اطلاعاتی همچون کلید عمومی، کلید خصوصی، زنجیرهٔ گواهی و امضای دیجیتال هستند. هر قالب کاربرد ویژه‌ای دارد و برخی برای تبادل امن طراحی شده‌اند، در حالی که برخی دیگر در سرورهای وب یا سامانه‌های مبتنی بر جاوا استفاده می‌شوند. قالب DER قالب DER نسخهٔ باینری گواهی‌های دیجیتال است و بیشتر در سیستم‌عامل ویندوز و محیط‌های مبتنی بر جاوا استفاده می‌شود. این فایل شامل کلید عمومی و اطلاعات مالک دامنه است و کلید خصوصی را دربر نمی‌گیرد. امنیت برای بهره‌مندی از این پروتکل، سرویس‌دهنده و سرویس‌گیرنده با یکدیگر یک قرارداد تبادلی اطلاعات را مذاکره می‌کنند. | ## جمع‌بندی | در این مذاکرات، سرویس‌دهنده و سرویس‌گیرنده بر سر پارامترهای مختلفی که برای برقراری امنیت مورد نیاز است، به توافق می‌رسند.