چکیده
یک لایه سوکت امن (SSL)، یک پروتکل است که توسط Netscape برای انتقال اسناد خصوصی به صورت ایمن بر روی اینترنت توسعه یافته است. SSL را می توان به طور موثر برای محافظت از داده ها در انتقال مورد استفاده قرار داد. پروتکل SSL در بین پروتکل لایه کاربرد (به عنوان مثال، HTTPS ها (انتقال بیش از حد متن پروتکل امن)) و پروتکل لایه حمل و نقل می آید. واسط های نرم افزار HTTP با SSL تقریبا در همان روشی قرار می گیرد که با TCP در غیاب امنیت است. تا آنجا به TCP مربوط می شود، SSL فقط یک پروتکل نرم افزار با استفاده از خدمات آن است. SSL از دو زیر پروتکل، پروتکل دست دهی و پروتکل رکورد تشکیل شده است. قدرت SSL و از این رو عملکرد ارائه شده توسط ارتباط امن با انتخاب مجموعه رمز تعیین می شود. مجموعه رمز به خودی خود به چهار اجزا رسیده است و آنها روشی برای تبادل کلید، احراز هویت، رمزنگاری و روشی برای محاسبه مخلوط هضم پیام هستند. روش های مختلف برای همه آنچه در روش بالا گفته شده است در دسترس است و ما نیاز به انتخاب یک مجموعه رمزنگاری داریم که کاملا با عملکرد ، محدودیت سرعت و حافظه مورد نیاز ما مطابقت خواهد کرد. موارد ساخته شده مختلف در کتابخانه ها برای توسعه دهندگان به منظور استفاده وجود دارد. این مقاله مقایسه و شرح مختصری در مورد پیاده سازی SSL معمولا بیشتر استفاده شده مانند OpenSSL ها، CyaSSL و MatrixSSL را فراهم می کند.
I. مقدمه
اینترنت از TCP / IP برای انتقال داده ها استفاده می کند و پروتکل TCP / IP یک مکانیزم امنیتی / حفاظت ذاتی ندارد. بنابراین داده ها در انتقال ممکن است توسط حملات فعال مانند جعل پیام و تغییر پیام [1] تحت تاثیر قرار گیرند. به منظور حفاظت از داده ها در انتقال، Netscape مفهوم پروتکل SSL را در سال 1994 معرفی کرد و بعد از آن شرکت های دیگر مانند مایکروسافت شروع به توسعه پروتکل های امنیتی خود نمودند. سپس نیروی ضربت مهندسی اینترنت (IETF) در تعریف یک استاندارد برای یک پروتکل رمزنگاری-لایه مداخله نمود. با ورودی از فروشندگان متعدد، IETF لایه حمل و نقل استاندارد را ایجاد نمود. نسخه های قبلی از SSL SSL 2.0 و: SSL 3.0.Transport لایه امنیتی (TLS) پروتکل مبتنی بر SSL 3.0 و TLS 1.0 همان SSL TLS 3.1.Eventhough است و پروتکل SSL کمی در اجرای آنها متفاوت است، توسعه دهنده نرم افزار و کاربر نمی تواند هر گونه تفاوت را [2] تشخیص دهد.
هر شبکه ای است که نیاز به انتقال داده ها بر روی یک شبکه نا امن مانند اینترنت دارد می تواند از این پروتکل SSL برای اطمینان از امنیت استفاده نماید. امروزه SSL به طور گسترده ای در معاملات بانکداری آنلاین (که در آن ما نیاز به حفاظت از اعتبار کاربر ارزشمند مانند رمز عبور، شماره PIN و غیره داریم)، مقاصد نظامی، سیستم های جاسازی شده و غیره استفاده می شود که ارتباطات امن بین کلاینت و سرور را فراهم می کند. در اینجا، مشتری مرورگر و سرور ما، سرور وب است که با ما در حال برقراری ارتباط [3] است. یک ارتباط در صورتی امن نامیده می شود که محرمانه بودن، احراز هویت و تمامیت پیام را تضمین نماید [4]. محرمانه مورد استفاده قرار گیرد تا اطمینان حاصل شود که تنها افراد مجاز در حال خواندن پیام هستند. توسط ویژگی یکپارچگی، این معنی را دارد که پیام در انتقال تغییر نمی کند. احراز هویت با استفاده از گواهینامه های دیجیتال به دست می آید و از آن استفاده شده است تا اطمینان حاصل شود که ما در حال برقراری ارتباط با کاربران واقعی هستیم و نه هر مزاحمی. در این مقاله شرح مفصلی از پروتکل SSL داده شده است. شروع با ساختار SSL، جایگاه آن در معماری شبکه، تهدیدات امنیتی در SSL و بخش بعدی از این مقاله، پیاده سازی مختلف های SSL مانند MatrixSSL، OpenSSL، و CysSSL و مطالعه تطبیقی آنها را پوشش می دهد.
II. ساختار SSL
SSL در بین لایه کاربرد HTTP و TCP می آید. شکل 1 موقعیت SSL در معماری شبکه را نشان می دهد. SSL نیاز به چند تغییر برای پروتکل های بالا و پایین آن دارد [5]. واسطه های نرم افزار HTTP با SSL تقریبا در همان روشی عمل می کنند که TCP در فقدان امنیت عمل می کنند. تا آنجا به عنوان TCP مربوط می شود، SSL فقط یکی دیگر از نرم افزار است که از خدمات آن استفاده می کند. SSL از دو زیر پروتکل تشکیل شده است، پروتکل دست دهی و پروتکل رکورد.
A. پروتکل دست دهی
دلیل نام نهادن پروتکل دست دهی اینست که عملیات دست دهی اولیه از قبیل گواهینامه های تبادل، کلید تبادل مواد، و تصدیق هویت را انجام می دهد. گام های مختلف درگیر در پروتکل دست دهی به شرح زیر [6] ارائه می شوند،
• مشتری یک پیام ClientHello را به یک سرور برای درخواست اتصال به SSL می فرستد. این پیام ClientHello بالاترین نسخه از SSL که از آن پشتیبانی می کنند، یک عدد تصادفی، یک لیست از درخواست های رمزنگاری پیشنهادی و یک روش فشرده سازی که مشتری می تواند از ان حمایت کند را مشخص می کند.
• سرور با یک پیام ServerHello، حاوی نسخه انتخاب پروتکل، یک عدد تصادفی، مجموعه رمزنگاری، و استفاده از روش فشرده سازی از گزینه های ارائه شده توسط مشتری پاسخ می دهد. سرور نیز ممکن است یک ID جلسه را به عنوان بخشی از این پیام برای انجام دست دهی ارسال کند.
• سرور پیام گواهی آن را (بسته به مجموعه رمز انتخاب شده، این ممکن است توسط سرور حذف شود) می فرستد.
• سرور یک پیام ServerHelloDone را می فرستد، که نشان می دهد که مذاکره دست دهی کامل شده است.
• پاسخ مشتری با یک پیام ClientKeyExchange است، که ممکن است شامل یک راز پیش اصلی، کلید عمومی، و یا هیچ چیزی باشد. (این مورد به رمز انتخاب شده بستگی دارد.)
• مشتری و سرور از اعداد تصادفی و راز پیش اصلی برای محاسبه یک راز مشترک، به نام "راز اصلی" استفاده می کند، و سپس هر دو طرف با استفاده از راز اصلی برای محاسبه یک کلید بلوک استفاده می کنند. تمام اطلاعات کلیدی دیگر برای این اتصال از این کلید بلوک (کلاینت و سرور تولید اعداد تصادفی) است، که از طریق یک تابع با دقت طراحی شده " شبه تصادفی" منتقل شده است. اطلاعات کلیدی شامل دو کلید های جلسه می شود: client_write_key و server_write_key
• مشتری در حال حاضر یک رکورد ChangeCipherSpec، اساسا برای گفتن به سرور، "همه چیزی که من به شما می گویم از حالا به بعد رمزگذاری خواهد شد" را می فرستد." ChangeCipherSpec به خودی خود یک پروتکل در سطح رکورد است.
• در نهایت، مشتری یک پیام نهایی را که حاوی یک رشته hash و MACK روی پیام های دست دهی قبلی است تولید می کند و کدگذاری با استفاده از client_write_key قبل از ارسال آن صورت می گیرد.
• سرور برای رمزگشایی پیام پایان یافته مشتری توسط client_write_key تلاش می کند و hash و MACK را بررسی می کند. اگر رمزگشایی و یا تایید خراب شود، دست دهی شکست خورده در نظر گرفته می شود و این اتصال باید پاره شود.
• در نهایت، سرور یک ChangeCipherSpec ، پیام رمزگذاری شده آن را می فرستد و مشتری رمزگشایی و تایید را انجام می دهد. در این نقطه، "دست دهی" کامل است و پروتکل نرم افزار فعال شده است. برنامه پیام های رد و بدل شده بین کلاینت و سرور رمزگذاری خواهد شد.
B. پروتکل رکورد
در پروتکل رکورد از کلید جلسه تولید شده در پروتکل دست دهی برای محفظه ای نمودن داده هایی که باید رد و بدل شود استفاده می شود. بسته بندی نمودن برای داده ها می تواند محرمانه بودن و تمامیت داده ها را ارائه کند.
C. درخواست های رمز
قبل از ارسال داده ها، فرستنده و گیرنده باید به یک نتیجه گیری در مورد اجزای مجموعه رمز انتخاب شده برسد [7]. چهار جزء از مجموعه رمزنگاری، الگوریتم تبادل کلید هستند؛ روش احراز هویت، روش های رمزنگاری و الگوریتم برای محاسبه پیام هضم هش. الگوریتم تبادل کلیدی مشخص می کند که چگونه همتایان بر یک کلید متقارن مشترک که می تواند برای به رمز در آوردن پیام پس از handshaking مورد استفاده قرار گیرد به توافق می رسند. دو الگوریتم تبادل کلید مشترک DHE (الگوریتم Diffie-HellmanKeyExchange) و RSA (Rivest، Shamir-Adelman). الگوریتم احراز هویت نشان می دهد که چگونه مشتری و سرور، هویت های خود را به یکدیگر ثابت می کنند. گزینه های احراز هویت عبارتند از: RSA (Rivest، Shamir و Adelman)، DSA (الگوریتم امضای دیجیتال)، منحنی بیضوی DSA، کلید از قبل مشترک (PSH) و ناشناس (زمانی که هیچ مکانیزم احراز هویت استفاده می شود). s\s، جزء رمزگذاری نشان می دهد که کدام الگوریتم متقارن می تواند برای به رمز در آوردن داده ها قبل از انتقال مورد استفاده قرار گیرد. .RC4 (4 RivestCipher)، DES (استاندارد رمزگذاری داده ها)، 3DES (DES سه گانه)، AES (استاندارد رمزگذاری پیشرفته) هستند که معمولا استفاده می شوند. الگوریتم RC4 سریعترین و کوچکترین الگوریتم رمزنگاری است، و بنابراین برای پردازنده های جاسازی شده ایده آل است. و در نهایت اجزای مخلوط هضم مورد استفاده قرار می گیرند تا اطمینان حاصل شود که گیرنده آنچه را فرستنده منتقل نموده دریافت می کند، یعنی پیام در انتقال تغییر نمی یابد. SHA-1، الگوریتم کنترلی اغلب مورد استفاده برای تایید یکپارچگی داده های رد و بدل شده است.
III. تهدید به SSL پروتکل
پروتکل SSL مستعد در ابتلا به برخی از حملات یا تهدیدات امنیتی است. حمله عقبگرد ، نسخه های عقبگرد حمله، تبادل الگوریتم عقبگرد حمله و رها کردن تغییر تنظیمات رمز حمله محبوب تر هستند. بخش بعدی، شرح مختصری از چنین حملات ها و اقدامات ضد احتمالی است.
A. مجموعه رمز حمله عقبگرد
این نوع حمله اغلب در پروتکل SSL 2.0 ارز اتفاق می افتد که در آن مهاجم با پیام سلام مشتری برخورد می کند و لیست سوئیت رمزنگاری را که در یک متن ذخیره می شود تغییر می دهد. هنگامی که سوئیت های رمز تغییر یابند، در حال حاضر مهاجم می تواند در واقع کاربر را وادار به استفاده از رمزگذاری صادر شده ضعیف نماید، حتی اگر هر دوی سرور و مشتریان الگوریتم درجه قوی تر را ترجیح دهند و از آن پشتیبانی نمایند. ما می توانیم این مشکل را با استفاده از نسخه بالاتر از SSL (SSL 3.0) و از جمله مقادیر هش برای همه پیام ها در طول پروتکل SSL دست دهی و تصدیق آن را در پیام به پایان رسیده با تایید ارزش هش و پیام کاهش دهیم. قرار نیست هر دو سرور و مشتری داده های کاربردی را تا زمانی که پیام به پایان رسیده از هر دو طرف تایید شود قبول نمایند [7].
Abstract
Secure Socket Layer (SSL), is the protocol developed by Netscape for transmitting private documents securely over the Internet. SSL can be effectively used to protect the data in transmission. SSL protocol comes in between the application layer protocol (e.g., HTTPS (Hyper Text Transfer Protocol Secure)) and the Transport layer protocol. The http application interfaces with SSL nearly in the same way as it would with TCP in the absence of security. As far as TCP is concerned, SSL is just another application protocol using its services.SSL consist of two sub-protocols, the Hand-shake protocol and Record protocol. The strength of the SSL and hence the performance offered by the secure communication is determined by the selection of the cipher suite. The cipher suite itself has got four components and they are technique for key exchange, authentication, encryption and the method to compute the message digest hash. Different methods are available for all the above said technique and we need to select a cipher suite that will perfectly match our performance requirements, speed and memory constraint. Different built in libraries are there for the developers to use. This paper provides a brief comparison and description regarding the most commonly used SSL implementations such as OpenSSL, CyaSSL and MatrixSSL.
I. INTRODUCTION
The internet uses TCP/IP for data transfer and the TCP/IP protocol does not have an inherent security/protection mechanism. So the data in transition may get affected by active attacks such as message forgery and message alteration [1]. In order to protect the data in transmit, Netscape introduced the concept of SSL protocol in 1994 and later other companies such as Microsoft began to develop their own security protocols. Then Internet Engineering Task Force (IETF) intervened to define a standard for an encryption-layer protocol. With the input from multiple vendors, the IETF created Transport Layer Security standard. Previous versions of SSL are SSL 2.0 and SSL 3.0.Transport Layer Security (TLS) is a protocol based on SSL 3.0 and TLS 1.0 is the same as SSL 3.1.Eventhough TLS and SSL protocols differ slightly in their implementation, the application developer and user cannot detect any differences at all [2].
Any network that needs to transmit data over an unsecured network such as Internet can make use of this SSL protocol to ensure security. Today SSL is widely used in online banking transactions (where we need to protect the valuable user credentials such as password, PIN number etc), military purposes, embedded systems etc. It provides secure communication between the client and server .Here, the Client is our browser and server is the web server with which we are communicating [3]. A communication is said to be secure if it ensures confidentiality, authentication and integrity of the message [4]. Confidentiality is used to ensure that only authorized persons are reading the message. By integrity property, it means that the message is not modified in transmit. Authentication is achieved by using digital certificates and it is used to ensure that we are communicating with the real users and not to any imposter. In this paper we have given a detailed description of SSL protocol. Begin with the structure of SSL, its position in the network architecture, security threats on SSL and the later portion of this paper covers the various SSL implementations such as MatrixSSL, OpenSSL, and CysSSL and a comparative study of them.
II. SSL STRUCTURE
SSL comes in between the http application layer and TCP. Figure 1 shows the position of SSL in Network Architecture. SSL requires few changes to the protocols above and below it [5]. The http application interfaces with SSL nearly in the same way it would with TCP in the absence of security. As far as TCP is concerned, SSL is just another application using its services. SSL is composed of two sub-protocols, the Hand-shake protocol and the Record protocol.
A. Hand-shake protocol
Hand-shake protocol is called so because it performs the initial handshaking operations such as certificates exchanging, key materials exchanging, and identity authentication. The various step involved in the hand-shake protocol are given below [6],
A client sends a ClientHello message to a server to ask for a SSL connection. This ClientHello message specifies the highest version of SSL it supports, a random number, a list of suggested cipher suits and a compression method the client can support.
The Server responds with a ServerHello message, containing the chosen protocol version, a random number, cipher suite, and compression method from the choices offered by the client. The server may also send a session ID as part of the message to perform a resumed handshake.
The Server sends its Certificate message (depending on the selected cipher suite, this may be omitted by the Server).
The Server sends a ServerHelloDone message, to indicate that handshake negotiation is completed.
The Client responds with a ClientKeyExchange message, which may contain a pre-master secret, public key, or nothing. (It depends on the selected cipher.)
The Client and Server use the random numbers and Pre-Master Secret to compute a common secret, called the "master secret", and then the both parties use the master secret to compute a key-block. All other key data for this connection is derived from this key-block (the client and server-generated random numbers), which is passed through a carefully designed "pseudorandom function". The key data includes two session keys: client_write_key and server_write_key.
The Client now sends a ChangeCipherSpec record, essentially telling the Server, "Everything I tell you from now on will be encrypted." The ChangeCipherSpec is itself a record-level protocol.
Finally, the Client generates a finished message containing a hash and MAC over the previous handshake messages, and encrypts it using the client_write_key before sending it.
The Server will attempt to decrypt the Client's finished message by the client_write_key, and verify the hash and MAC. If the decryption or verification fails, the handshake is considered to have failed and the connection should be torn down.
Finally, the Server sends a ChangeCipherSpec and its encrypted finished message, and the Client performs the same decryption and verification.At this point, the "handshake" is complete and the application protocol is enabled. Application messages exchanged between Client and Server will be encrypted.
B. Record protocol
The record protocol uses the session keys produced in hand-shake protocol to encapsulate the data to be exchanged. The encapsulation can provide confidentiality and integrity for data.
C. Cipher suites
Before sending data, the sender and receiver must reach at a conclusion regarding the components of the selected cipher suite [7]. The four components of the cipher suite are key exchange algorithm; authentication technique, encryption method and the algorithm to compute the message digest hash. The key exchange algorithm specifies how the peers agree upon a common symmetric key that can be used to encrypt the message after the handshaking is done. The two common key exchange algorithms are DHE (DiffieHellmanKeyExchange) and RSA (Rivest-Shamir-Adelman).The authentication algorithm indicates how the Client and Server will prove their identities to each other. Authentication options include RSA (Rivest-ShamirAdelman),DSA(Digital signature algorithm), Elliptic curve DSA, PreShared Key(PSH) and anonymous(when no authentication mechanism is used) .Next, the encryption component indicates which symmetric algorithm is to be used to encrypt the data before transmission.RC4(RivestCipher 4),DES(Data Encryption Standard),3des(triple des),AES (Advanced Encryption Standard) are the commonly used ones. The RC4 algorithm is the fastest and smallest of the cipher algorithms, and therefore is ideal for embedded processors. And finally the digest hash component is used to ensure that the receiver receives what the sender has transmitted, i.e. the message is not modified in transmission. SHA-1 is the most commonly used checksum algorithm to confirm the integrity of the exchanged data.
III. THREATS TO SSL PROTOCOL SSL
protocol is prone to some attacks or security threats .Cipher suite rollback attack, version rollback attack, exchange algorithm rollback attack and dropping change cipher spec attack are more popular. The subsequent sections give a brief description of such at tacks and possible counter measures.
A. Cipher suite rollback attack
This type of attack mostly happens in SSL 2.0 exchange protocol where the attacker intercepts the client's Hello message and modifies the list of cipher suites which is stored in a plaintext. When the cipher suites are modified, now the attacker can actually force the user to use the export-weakened encryption, even if both the server and clients preferred and supports stronger grade algorithm. We can mitigate this problem by using a higher version of SSL (SSL 3.0) and by including hash values for all the messages during SSL handshake protocol and authenticating it in the finished messages by verifying the hash value and the messages. Both the server and the client are not supposed to accept the application data until the finished message is verified from both sides [7].
چکیده
I. مقدمه
II. ساختار SSL
A. پروتکل دست دهی
B. پروتکل رکورد
C. درخواست های رمز
III. تهدید به SSL پروتکل
A. مجموعه رمز حمله عقبگرد
B. حمله عقبگرد نسخه
C. تبادل الگوریتم عقبگرد
D. حذف تغییر رمز تنظیمات حمله
IV. کتابخانه های رایج SSL
A. OpenSSL
B. CyaSSL
C. MatrixSSL
V. مقایسه کتابخانه های SSL / TLS
A. پشتیبانی از پروتکل
Abstract
I. INTRODUCTION
II. SSL STRUCTURE
A. Hand-shake protocol
B. Record protocol
C. Cipher suites
III. THREATS TO SSL PROTOCOL
A. Cipher suite rollback attack
B. Version rollback attack
C. Exchange algorithm rollback
D. Dropping change cipher spec attack
IV. COMMON SSL LIBRARIES
A. OpenSSL
B. CyaSSL
C. MatrixSSL
V. COMPARISON OF SSL/TLS LIBRARIES
A. protocol support
REFERENCES