امنیت لایه انتقال: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Persia (بحث | مشارکت‌ها)
Persia (بحث | مشارکت‌ها)
خط ۱:
{{پشته پروتکل اینترنت}}
'''پروتکل امنیتی لایهٔ انتقال''' (Transport Layer Security) ، بر پایه [[لایهٔ سوکت‌های امن]](Secure Sockets Layer) که یکی از پروتکل‌های [[رمزنگاری]] است و برای تامینتأمین امنیت ارتباطات از طریق اینترنت بنا شده‌است. برای اطمینان از هویت طرف مقابل و تبادل کلید متقارن از گواهی X.509 و [[رمزنگاری نامتقارن]] استفاده می کندمی‌کند. این پروتکل امنیت انتقال داده‌ها را در اینترنت برای مقاصدی چون کار کردن با پایگاه‌های وب، [[پست الکترونیکی]]، نمابرهای اینتزنتی و پیام‌های فوری اینترنتی به کار می‌رود. اگرچه TLS و SSL با هم تفاوت‌های اندکی دارند ولی قسمت عمده‌ای از این پروتکل کم و بیش یکسان مانده‌است.
TLS و SSL درمدل TCP/IP عمل رمزنگاری را در لایه هایلایه‌های پایینی [[لایه کاربرد]] انجام می دهندمی‌دهند ولی در مدل OSI در لایه جلسه مقداردهی شده و در لایه نمایش کار می کنندمی‌کنند: ابتدا لایه جلسه با استفاده از رمزنگاری نامتقارن تنظیمات لازم برای رمزنگاری را انجام می دهدمی‌دهد و سپس لایه نمایش عمل رمزگذاری ارتباط را انجام می دهدمی‌دهد. در هر دو مدل TLS و SSL به نمایندگی از لایه انتقال کار می کنندمی‌کنند.
 
لایهٔ سوکت‌های امن (Secure Sockets Layer) یا '''اس‌اس‌ال''' (SSL) پروتکلی است که توسط شرکت Netscape برای ردّ و بدل کردن سندهای خصوصی از طریق اینترنت توسعه یافته‌است. SSL از یک [[کلید خصوصی]] برای به رمز درآوردن اطلاعاتی که بر روی یک ارتباط SSL منتقل می‌شوند استفاده می‌نماید. هر دو مرورگر Netscape Navigator و Internet Explorer (و امروزه تمام مرورگرهای مدرن) از این پروتکل پشتیبانی می‌نمایند. هم‌چنین بسیاری از وب‌سایت‌ها برای فراهم کردن بستری مناسب جهت حفظ کردن اطلاعات محرمانهٔ کاربران (مانند شمارهٔ کارت اعتباری) از این پروتکل استفاده می‌نمایند. طبق آن‌چهآنچه در استاندارد آمده‌است. URLهایی که نیاز به یک ارتباط از نوع SSL دارند با:https به جای:http شروع می‌شوند.
SSL یک پروتکل مستقل از لایه برنامه‌است (Application Independent). بنابراین، پروتکل‌هایی مانند [[FTP]]،, [[HTTP]] و [[شبکه راه دور]] قابلیت استفاده از آن را دارند. با این وجود SSL برای پروتکل‌های [[FTP]]،, [[HTTP]] و [[آی‌پی‌سک]] بهینه شده‌است. درssl ازدوکلیدعمومی وخصوصی استفاده میشودهمچنین درssl ازدوحالت متقارن ونامتقارن نیز می توانمی‌توان نام بردکه می تواندمی‌تواند همان بحث [[کلید عمومی]] واختصاصی باشد به اینصورت که دررمزنگاری متقارن ازدو کلیدعمومی توسط serverوclient استفاده میشودمی‌شود که در این صورت مطالب رمزنگاری شده ازامنیت برخوردارنخواهدشدزیراکلید مشترک مابین (سرورومشتری) توسط شخص ثالث میتواندمی‌تواند [[استراق سمع]] یاهک شودبنابراین ازحالت نامتقارن استفاده می شوددر رمزنگاری نامتقارن ازدوکلیدBوAاستفاده میشودیعنی اگر مطالب باکلیدA رمزنگاری شوددیگر باهمان کلیدرمزگشایی نخواهد شدفقط باکلیدB که متناظرباکلیدA می باشدرمزگشایی خواهدشد.
 
== تعریف ==
پروتکل TLS به برنامه‌های Client/Server اجازه می‌دهد که در شبکه از طریقی که از eavesdropping(شنود)، message forgery(جعل پیام) جلوگیری می‌کند با یکدیگر ارتباط برقرار کنند. authentication TLS(احراز هویت) و communications confidentiality(ارتباط مطمئن) در اینترنت را از طریق استفاده از cryptography(رمز نگاری) فراهم می‌کند.
 
Client باید برای Server مشخص کند که آیا می خواهدمی‌خواهد یک اتصال TLS داشته باشد با نه.
دو راه برای رسیدن به این هدف وجود دارد: یک راه این است که از شماره پورت متفاوتی برای اتصال TLS استفاده شود (برای مثال پورت 443۴۴۳ [[پروتکل امن انتقال ابرمتن]]) و دیگر اینکه اختصاص یک پورت مشخص از طریق سرور به کلاینت، که کلاینت آن را درخواست کرده باشد با استفاده از یک مکانیسم پروتکل خاص (برای مثال [[STARTTLS]]).{{سخ}}
زمانی که کلاینت و سرور تصمیم گرفتند از اتصال TLS استفاده کنند، به مذاکره با استفاده از روش [[handshaking]] می پردازندمی‌پردازند.
سپس سرور و کلاینت بر روی پارامترهای مختلفی که برای ایجاد امنیت اتصال استفاده می شودمی‌شود به توافق می رسندمی‌رسند:
# کلاینت اطلاعاتی را که سرور برای برقراری ارتباط با استفاده از SSL به ان نیاز دارد را ارسال می کندمی‌کند. مانند:شماره نسخه SSL کلاینت، تنطیمات رمزگذاری و سایر اطلاعاتی که سرور ممکن است به آن نیاز داشته باشد.
# سرور اطلاعاتی را که کلاینت برای برقراری ارتباط با استفاده از SSL به ان نیاز دارد را برایش ارسال می کندمی‌کند. مانند:شماره نسخه SSL سرور، تنطیمات رمزگذاری و سایر اطلاعاتی که کلاینت به آن نیاز دارد. سرور همچنین گواهینامه خود را برای کلاینت ارسال می کندمی‌کند و اگر کلاینت درخواست منبعی از سرور داشته باشد، کلاینت باید [[احراز هویت]] شود و باید گواهینامه کلاینت برای سرور ارسال شود.
# با اطلاعات دریافتی از سرور ،سرور، کلاینت می تواندمی‌تواند سرور را احرازهویت کند. اگر سرور تصدیق نشود، به کاربر هشدار داده می شودمی‌شود که عمل رمزگذاری و تصدیق نمی‌تواند انجام گیرد. اگر سرور به درستی تصدیق شد کلاینت به مرحله بعد می رودمی‌رود.
# با استفاده از اطلاعات به دست آمده، کلاینت یک pre-master secret ایجاد کرده و آن را ب سرور ارسال می کندمی‌کند.
# اگر سرور از کلاینت بخواهد هویتش را ثابت کند، کلاینت کلیه اطلاعات لازم و گواهی خود را برای سرور ارسال می کندمی‌کند.
# اگر کلاینت تصدیق نشود، ارتباط قطع می شودمی‌شود اما اگر به درستی تصدیق شود، سرور از کلید خصوصی خود برای یاز کردن pre-master secret استفاده می کندمی‌کند.
# کلاینت و سرور از master secret برای تولید کلید جلسات استفاده می کنندکه یک کلید متقارن است و برای رمزگذاری و رمزگشایی اطلاعات مبادله شده استفاده می شودمی‌شود.
# وقتی کلاینت پیغامی برای سرور ارسال می کندمی‌کند با استفاده از کلید جلسه آن را رمز می کندمی‌کند.
# وقتی سرور پیغامی برای کلاینت ارسال می کندمی‌کند با استفاده از کلید جلسه آن را رمز می کندمی‌کند.{{سخ}}
اکنون SSL handshake کامل است و ارتباط شروع می شودمی‌شود. کلاینت و سرور از کلید جلسه برای رمزگذاری و رمزگشایی اطلاعاتی که برای هم می فرستندمی‌فرستند استفاده می کنندمی‌کنند.{{سخ}}
اگر یکی از قدم هایقدم‌های بالا با شکست مواجه شود TLS دچار شکست شده و ارتباط برقرار نمی‌شود.{{سخ}}
در قدم سوم مشتری باید گواهی سرور را به درستی چک کند تا باعث بروز مشکل نشود.
 
== تاریخچه ==
=== [[برنامه نویسیبرنامه‌نویسی]] امن ===
تلاش هایتلاش‌های تحقیقاتی در اوایل نسبت به امنیت در لایه انتقال شامل برنامه نویسیبرنامه‌نویسی شبکه ای امن و [[رابط برنامه نویسیبرنامه‌نویسی کاربردی]] بود. در سال 1993۱۹۹۳ به بررسی رویکرد داشتن یک لایه انتقال امن، به منظور تسهیل مقاوم سازی برنامهمقاوم‌سازی هایبرنامه‌های کاربردی موجود در شبکه با اقدامات امنیتی پرداخته شد.
 
=== 3.0۳٫۰، ، 2.0،۲٫۰، 1.0 SSL ===
پروتکل SSL در اصل توسط Netscape توسعه داده شد. نسخه 1.0۱٫۰ آن برای استفاده عمومی نبود. نسخه 2.0۲٫۰ آن در سال 1995۱۹۹۵ منتشر شد که تعدادی نقص هاینقص‌های امنیتی داشت و منجر به تولید نسخه 3.0۳٫۰ شد. SSL 3.0 که در سال 1996۱۹۹۶ منتشر شد یک طراحی مجدد کامل از پروتکل هایپروتکل‌های تولید شده بود.
 
=== TLS 1.0 ===
این پروتکل در سال 1999۱۹۹۹ به عنوان ارتقا یافته ییافتهٔ نسخه SSL 3.0 تعریف شد. تفاوت چشمگیری بین این پروتکل و SSL 3.0 وجود ندارد و می توانمی‌توان گفت این پروتکل SSL 3.0 را کامل کرده استکرده‌است.
 
=== TLS 1.1 ===
این پروتکل در سال 2006۲۰۰۶ تعریف شد و توسعه یافته TLS 1.0 بود.{{سخ}}
تفاوت هایتفاوت‌های قابل توجهی که در این نسخه وجود دارد:
* حفاظت دربرابر حملات (Cipher block chaining (CBC اضافه شده استشده‌است.
* IV implicit با IV explicit جایگزین شده استشده‌است.
 
=== TLS 1.2 ===
در سال 2008۲۰۰۸ تولید شد. مشخصات TLS 1.1 را دارد. تفاوتی که این پروتکل دارد این است که MD5-SHA-1 با SHA-256 جایگزین شده استشده‌است.
 
== برنامه هایبرنامه‌های کاربردی ==
در طراحی برنامه هایبرنامه‌های کاربردی، TLS معمولاً در بالای تمامی پروتکل هایپروتکل‌های لایه انتقال پیادهپیاده‌سازی سازی می شودمی‌شود و پروتکل های برنامهپروتکل‌های هایبرنامه‌های کاربردی مانند HTTP،HTTP, FTP،FTP, SMTP،SMTP, NNTP،NNTP, XMPP، را کپسوله می کندمی‌کند. با استفاده از پروتکل هایپروتکل‌های انتقال داده گرام مانند UDP و پروتکل [[کنترل ازدحام]] داده(DCCP)استفاده می شودمی‌شود.
=== وب سایت ها ===
 
یک استفاده برجسته از TLS این است که برای امن کردن ترافیک بین [[وب سایت]] ها و مرورگرها استفاده می شود.
=== تبادلوب کلیدسایت‌ها ===
یک استفاده برجسته از TLS این است که برای امن کردن ترافیک بین [[وب سایت]] ها‌ها و مرورگرها استفاده می شودمی‌شود.
در پیاده‌سازی‌های نخستین لایهٔ سوکت‌های امن، به علّت محدودیت‌های اعمال شده بر روی صادرات تکنولوژی رمزنگاری از طرف دولت [[ایالات متحده]]، از کلیدهای متقارن با طول ۴۰ استفاده می‌شد. قبل از اینکه کلاینت و سرور به تبادل اطلاعات حفاظت شده توسط TLS بپردازند باید بر روی یک کلید رمزگذاری و یک روش رمزگذاری توافق کنندتا مبادله ی امنی داشته باشند.{{سخ}}
 
متدهایی که برای مبادله کلید استفاده می شود:{{سخ}}
=== تبادل کلید ===
تولید کلیدهای عمومی خصوصی باRSA، Diffie-Hellman، ephemeral Diffie-Hellman، ECDH، ephemeral Elliptic Curve Diffie-Hellman، anonymous Diffie-Hellman و PSK.{{سخ}}
در پیاده‌سازی‌های نخستین لایهٔ سوکت‌های امن، به علّت محدودیت‌های اعمال شده بر روی صادرات تکنولوژی رمزنگاری از طرف دولت [[ایالات متحده]]، از کلیدهای متقارن با طول ۴۰ استفاده می‌شد. قبل از اینکه کلاینت و سرور به تبادل اطلاعات حفاظت شده توسط TLS بپردازند باید بر روی یک کلید رمزگذاری و یک روش رمزگذاری توافق کنندتا مبادله یمبادلهٔ امنی داشته باشند.{{سخ}}
روش توافق کلید TLS_DH_anon سرور و کلاینت را احراز هویت نمی‌کند به همین دلیل به ندرت استفاده می شود.
متدهایی که برای مبادله کلید استفاده می شودمی‌شود:{{سخ}}
== SSL ==
تولید کلیدهای عمومی خصوصی باRSA،باRSA, Diffie-Hellman،Hellman, ephemeral Diffie-Hellman،Hellman, ECDH،ECDH, ephemeral Elliptic Curve Diffie-Hellman،Hellman, anonymous Diffie-Hellman و PSK.{{سخ}}
لایه سوکت امن (SSL) توسط Netscape طراحی شد و نسخه 3 آن به صورت استاندارد اینترنت درآمد. معماری SSL به صورت دولایه ای است که روی TCP قرار گرفته است. لایه اول بالای [[لایه حمل]] قرار گرفته است و لایه دوم در لایه کاربرد است. قسمتی از SSL که در لایه دوم قرار می گیرد مربوط به سرویس های مدیریتی است و شامل پروتکل دست دادن، پروتکل تغییر مشخصات رمزکننده و پروتکل هشدار است. SSL اجازه می دهد که بین کلاینت و سرور یک جلسه ایجاد شود و از آن طریق هر تعداد اتصال امن امکان پذیر باشد. از نظر تئوری بین یک کلاینت و یک سرور می تواند بیش از یک جلسه وجود داشته باشد و در عمل فقط یک جلسه به وجود می آید.{{سخ}}
روش توافق کلید TLS_DH_anon سرور و کلاینت را احراز هویت نمی‌کند به همین دلیل به ندرت استفاده می شودمی‌شود.
یک جلسه توسط پروتکل دست دادن ایجاد می شود و مجموعه ای از پارامترهای امنیتی را تعریف می کند که به صورت اشتراکی در اتصالات مربوط به آن جلسه استفاده می شوند. برای هر جلسه و هر اتصال به یک سری پارامترها نیاز است.
 
== SSL ==
لایه سوکت امن (SSL) توسط Netscape طراحی شد و نسخه 3۳ آن به صورت استاندارد اینترنت درآمد. معماری SSL به صورت دولایه ای است که روی TCP قرار گرفته استگرفته‌است. لایه اول بالای [[لایه حمل]] قرار گرفته استگرفته‌است و لایه دوم در لایه کاربرد است. قسمتی از SSL که در لایه دوم قرار می گیردمی‌گیرد مربوط به سرویس هایسرویس‌های مدیریتی است و شامل پروتکل دست دادن، پروتکل تغییر مشخصات رمزکننده و پروتکل هشدار است. SSL اجازه می دهدمی‌دهد که بین کلاینت و سرور یک جلسه ایجاد شود و از آن طریق هر تعداد اتصال امن امکان پذیرامکان‌پذیر باشد. از نظر تئوری بین یک کلاینت و یک سرور می تواندمی‌تواند بیش از یک جلسه وجود داشته باشد و در عمل فقط یک جلسه به وجود می آیدمی‌آید.{{سخ}}
یک جلسه توسط پروتکل دست دادن ایجاد می شودمی‌شود و مجموعه ای از پارامترهای امنیتی را تعریف می کندمی‌کند که به صورت اشتراکی در اتصالات مربوط به آن جلسه استفاده می شوندمی‌شوند. برای هر جلسه و هر اتصال به یک سری پارامترها نیاز است.
 
=== پروتکل رکورد در SSL ===
این پروتکل مربوط به لایه اول SSL است که دو سرویس محرمانگی و احرازهویت را بواسطه یبواسطهٔ کلیدهایی که در پروتکل دست دادن ساخته می شوندمی‌شوند فراهم می کندو در این پروتکل محرمانگی توسط الگوریتم رمز متقارن و احرازاصالت توسط MAC فراهم میمی‌شود. شود.این پروتکل شامل مراحل زیر است:
* قطعه قطعه کردن: داده کاربر تقسیم بندی میتقسیم‌بندی شودمی‌شود.
* فشرده سازی: SSL دارای یک الگوریتم فشرده سازیست که در نسخه 3.0۳٫۰ اختیاری است.
* کد احرازاصالت پیام
* رمزگذاری: قطعه فشرده شده به همراه MAC رمز می شوندمی‌شوند.
* سرآیند: سرآیند به ابتدای قطعه رمزشده می چسپد.
 
=== پروتکل تغییر مشخصات رمز در SSL ===
این پروتکل ساده ترینساده‌ترین پروتکل مربوط به لایه دوم است که تنها یک بایت با مقدار یک دارد. هدف از این پیام یک بایتی تغییر اطلاعات رمزگذاری مربوط به ارتباط موجود است که در واقع وضعیت معلق را به وضعیت جاری کپی می کندمی‌کند.
 
=== پروتکل هشدار در SSL ===
این پروتکل به منظور اعلام هشدارهای SSL به طرفین اتصال استفاده می شودمی‌شود. مربوط به لایه دوم است و از 2۲ بایت تشکیل شدهشده‌است. است.این 2۲ بایت عبارتنداز:
# نوع خطا که می تواندمی‌تواند Warning یا Fatal باشد.
# کد خطا مانند پیغام غیرمنتظره ،غیرمنتظره، خطا در بازگشایی، خطا در گواهی و ...
اگر خطا ز نوع Fatal باشد، اتصال مذکور فوراً قطع می شودمی‌شود و اجازه ایجاد اتصال جدید در جلسه [[فوق داده]] نمی‌شود، اما ارتباطات دیگر موجود در این جلسه می توانندمی‌توانند ادامه پیدا کنند.
 
=== پروتکل دست دادن در SSL ===
این عمل به منظور احرازاصالت دوطرف و توافق روی الگوریتم هاالگوریتم‌ها و کلیدهای رمزگذاری است و به لایه دوم مربوط است و قبل از هر انتقال داده بین دو طرف این پروتکل صورت میمی‌گیرد. گیرد.این پروتکل پیچیده ترینپیچیده‌ترین پروتکل SSL است که یکسری پیام دارد که بین دوطرف ارتباط مبادله می شودمی‌شود. هر پیام شامل نوع پیام، طول پیام به بایت و محتوای پیام است. این پروتکل دارای 4۴ مرحله است.
 
==== مرحله 1: برقراری قابلیت های امنیتی ====
==== مرحله ۱: برقراری قابلیت‌های امنیتی ====
این مرحله به منظور آغاز یک اتصال منطقی برای معین کردن قابلیت هایقابلیت‌های امنیتی مربوط به آن اتصال است.
 
==== مرحله 2۲: احراز اصالت و تبادل کلید سرور ====
در این مرحله حداکثر 4۴ پیام از طرف سرور به کلاینت ارسال می شودمی‌شود که 3۳ تا از آنها اختیاری است. پیام اول شامل گواهی سرور است. پیام دوم مربوط به تبادل کلید از طرف سرور است. پیام سوم در صورتی که سرور مخفی نباشد ممکن است از سرور به کلاینت ارسال می شودمی‌شود. پیام چهارم که حتماً باید ارسال شود پارامتری ندارد و بیان کننده پایان ارسال پیام مرحله دوم است.
==== مرحله 3: احرازاصالت و تبادل کلید کلاینت ====
 
در این مرحله 3 پیام از کلاینت به سرور ارسال می شودکه فقط یکی از آنها اجباری است.
==== مرحله 4۳: پایاناحرازاصالت و تبادل کلید کلاینت ====
در این مرحله 3۳ پیام از کلاینت به سرور ارسال می شودکه فقط یکی از آنها اجباری است.
در این مرحله طرفین با ارسال مشخصات رمزکننده وضعیت جدید رمز خود را اطلاع می دهند و سپس با ارسال پیام پایانی، پروتکل دست دادن را پایان میدهند.
 
==== مرحله ۴: پایان ====
در این مرحله طرفین با ارسال مشخصات رمزکننده وضعیت جدید رمز خود را اطلاع می دهندمی‌دهند و سپس با ارسال پیام پایانی، پروتکل دست دادن را پایان میدهندمی‌دهند.
 
== امنیت ==
برای بهره‌مندی از این پروتکل، سرویس‌دهنده و سرویس‌گیرنده با یکدیگر یک قرارداد تبادلی اطلاعات را مذاکره می‌کنند. در این مذاکرات، سرویس‌دهنده و سرویس‌گیرنده بر سر پارامترهای مختلفی که برای برقراری امنیت مورد نیاز است، به توافق می‌رسند.