SSL

**SSL** ( – պաշտպանված սոկետների մակարդակ), գաղտնագրային արձանագրություն, որը հնարավորություն է տալիս անվտանգ կապ հաստատել օգտվողի և սերվերի միջև։ SSL արձանագրությունը ի սկզբանե ստեղծվել է Netscape Communications-ի կողմից։ Այնուհետև SSL 3.0 արձանագրության վրա մշակվեց RFC ստանդարտը, որը ստացավ TLS անունը։
Արձանագրությունը ապահովում տվյալների փոխանցման գաղտնիությունը օգտվողի և սերվերի միջև, օգտագործելով TCP/IP, սակայն գաղտնագրման համար օգտագործվում է բաց բանալիով ասիմետրիկ ալգորիթմ։ Բաց բանալիով գաղտնագրման ժամանակ օգտագործվում է երկու բանալի, ըստ որում նրանցից յուրաքանչյուրը կարող է օգտագործվել հաղորդագրության գաղտնագրման համար։ Այնուամենայնիվ, եթե գաղտնագրման համար օգտագործվում է մեկ բանալի, ապա վերծանման համար համապատասխանաբար պետք է օգտագործել մյուս բանալին։ Այդ դեպքում կարելի է ընդունել պաշտպանված հաղորդագրություններ, հայտարարելով բաց բանալին սակայն գաղտնի բանալին պահելով գաղտնի։

### Նկարագրություն
SSL արձանագրությունը կազմված է երկու ենթաարձանագրություններից՝ գրանցման SSL արձանագրություն և ձեռքսեղմման։ Գրանցման SSL արձանագրությունը որոշում է տվյալների փոխանցման տիպը։ SSL արձանագրությունը միավորում է ձեռքսեղմումը, օգտագործելով գրանցման SSL արձանագրությունը սերվերի և օգտագործողի միջև, առաջին կապի միացման ժամանակ հաղորդագրությունների հերթական փոխման համար։ SSL-ի աշխատանքի համար անհրաժեշտ է, որ սերվերը ունենա SSL հավաստագիր(սերտիֆիկատ)։
SSL-ը իրենից ներկայացնում է կապ, որը ունի 3 հիմնական հատկություններ.
* Աուտենտիֆիկացիա։ Սերվերը միշտ աուտենտիֆիկացվում է, նույն ժամանակ օգտվողը աուտենտիֆիկացվում է ալգորիթմից կախած։
* Ամբողջականություն։ Հաղորդագրությունների փոխանցումը ներառում է ամբողջականության ստուգումը։
* Գաղտնիություն։ Գաղտնագրումը օգտագործվում է կապի հաստատվելուց հետո և օգտագործվում բոլոր հետագա հաղորդագրությունների համար։

SSL արձանագրության մեջ բոլոր տվյալները փոխանցվում են օբյեկտների գրանցման տեսքով, որը կազմված է վերնագրից և փոխանցվող տվյալներից։ Փոխանցումը սկսվում է վերնագրից։ Վերնագիրը պարունակում է 2 կամ 3 բայթ երկարությամբ կոդ։ Ընդ որում, եթե առաջին բայթի ավագ բիթը 1 է, ապա գրանցումը չունի լցում(заполнитель) և վերնագրի ամբողջ երկարությունը 2 բայթ է, հակառակ դեպքում գրանցումը պարունակում է լցում և վերնագրի ամբողջ երկարությունը 3 բայթ է։ Գրանցման երկարության կոդը իր մեջ չի ներառում վերնագրի բայթերի քանակը։ 2-ական բայթային վերնագրի գրանցման երկարությունը՝

RecLength=(byte[0] & 0x7F«8) | byte[1];

Այստեղ byte[0]-ն և byte[1]-ը համապատասխանաբար առաջին և երկրորդ ստացված բայթերն են։ 3x բայթային վերնագրի գրանցման երկարությունը՝

RecLength = (byte[0] & 0x3F«8)|byte[1]; Escape = (byte[0] & 0x40)!=0; Padding = byte[2];

Այստեղ Padding-ը որոշում է սկզբնական տեքստին ուղարկողի կողմից ավելացված բայթերի քանակը, որպեսզի գրանցման երկարությունը դարձնել պատիկ գաղտագրման բլոկի չափսին, բլոկային գաղտնագրություն օգտագործելու ժամանակ։ Այժմ ուղարկողը ավելացնում է լցիչը և գաղտնագրում է դրանք։ Ըստ որում լցիչի պարունակությունը էական դեր չի խաղում։ Քանի որ հայտնի է ուղարկվող տվյալների չափսը, ապա վերնագիրը կազմվում է Padding-ի հաշվառմամբ։ Իր հերթին ստացողը վերծանում է ամբողջ տվյալների դաշտը և ստանում է ամբողջ սկզբնական ինֆորմացիան։ Այնուհետև իրագործվում է RecLength-ի հաշվումը արդեն հայտնի Padding-ով և լցիչը հեռացվում է տվյալների դաշտից։ SSL գրանցման տվյալները կազմված են 3 բաղադրիչներից։
* MAC_Data[Mac_Size] - (Message Authentication Code), հաղորդագրության աուտենտիֆիկացիայի կոդ
* Padding_Data[Padding] - լցիչի տվյալները
* Actual_Data[N] - իրական տվյալներ

Երբ գրանցումները ուղարկվում են բաց տեքստով, բնականաբար գաղտնագրեր չեն օգտագործվում, հետևաբար Padding_Data և MAC_Data երկարությունները հավասար են զրոյի։ Գաղտնագրություն օգտագործելու ժամանակ Padding_Data-ն կախված է գաղտնագրի բլոկի չափսից, իսկ MAC_Data կախված է ագղտնագրի ընտրությունից։ 
MAC_Data-ի հաշվման օրինակ՝

MacData = Hash(Secret, Actual_Data, Padding_Data, Sequence_Number);

Secret-ի արժեքը պայմանավորված է, թե ով է ուղարկում հաղորդագրություն՝ օգտագործող թե սերվեր։ Sequence_Number-ը հաշվիչ է, որը ինկրեմենտացվում է և սերվերի և օգտագործողի հետ։ Այստեղ Sequence_Number-ը իրենից ներկայացնում է 32ական բիթային կոդ, որը փոխանցում է հեշ-ֆունկցիաները 4ական բայթերով, ընդ որում առաջինը փոխանցվում է ավագ բիթը։ MD2-ի և MD5-ի համար MAC_Size-ը 16 բայթ է (128 բիթ)։ 2ական բայթային վերնագրի համար առավելագույն գրանցման երկարությունը 32767 բայթ է, իսկ 3ական բայթային վերնագրի համար՝ 16383 բայթ։

### Պատմությունը և զարգացումը
SSL արձանագրությունը ի սկզբանե ստեղծվել է Netscape ընկերության կողմից։ Առաջին 1.0 տարբերակը հասարակայնորեն չի թողարկվել։ 2.0 տարբերակը թողարկվել է 1995 թվականին, բայց ունեցել է շատ անվտանգության բացթողումներ, որոնք դրդել են, որ ստեղծվի 3.0-ն, որը լույս տեսավ 1996 թվականին։ Այնուհանդերձ SSL 3.0 տարբերակը հիմք հանդիսացավ TLS 1.0-ի ստեղծման համար։ Այն ստանդարտ Ինտերնետ Ճարտարագիտության Աշխատանքային Խմբի (Internet Engineering Task Force (IETF)) արձանագրություն է ճշտված 1999 թվականին։ Visa, Master Card, American Express, eBay, Paypal և այլ կազմակերպություններ, որոնք աշխատում են ինտերնետ դրամների հետ, ունեն SSL արձանագրություններ օգտագործելու լիցենզիա ինտերնետ ցանցում կոմերցիոն օգտագործման համար։
SSL արձանագրությունը աշխատում է մոդուլային մեթոդով։ Դրանով իսկ SSL-ը ընդլայնելի է նախագծին համապատասխան առաջնային և հետադարձ համատեղելիության ապահովման և միացումների միջև հաղորդակցության համար միատարր ցանցերում։

### Օգտագործում
SSL արձանագրության լայնորեն օգտագործման հետևանքով, առաջացավ նոր արձանագրություն HTTPS (Hypertext Transfer Protocol Secure)։ Տվյալները, որոնք փոխանցվում են HTTPS արձանագրությամբ, «փաթեթավորվում» են SSL կամ TLS գաղտնագրային արձանագրության մեջ, դրանով էլ ապահովում այդ տվյալների պաշտպանությունը։ Այդպիսի պաշտպանման միջոցը լայնորեն օգտագործվում է WEB տարածքում և այն ծրագրերում, որտեղ կարևոր է կապի անվտանգությունը. օրինակ՝ վճարային համակարգեր։ HTTPS-ը ապահովվում է բոլոր զննարկիչներում։ Ի տարբերություն HTTP-ի, HTTPS-ը լռելյայն օգտագործում է 443 TCP պորտը։

Ի սկզբանե վիրտուալ մասնավոր ցանցերը (VPN) SSL-ի հիման վրա մշակվել են որպես հավելյալ և այլընտրանքային տեխնոլոգիա հեռակարավարման IPsec VPN հիմքով։ Սակայն, այնպիսի գործոնները ինչպիսիք բավարար վստահելիությունը և մատչելիությունը դարձրեցին այդ տեխնոլոգիան ավելի գրավիչ VPN-ի կազմակերպման համար։ SSL-ը նաև մեծ տարածում գտավ էլեկտրոնային փոստերում։

**SSL**(անգլ. Secure Sockets Layer – պաշտպանված սոկետների մակարդակ) գաղտնագրային արձանագրություն է, որը հնարավորություն է տալիս անվտանգ կապ հաստատել օգտվողի և սերվերի միջև։ SSL արձանագրությունը ի սկզբանե ստեղծվել է Netscape Communications-ի կողմից։ Այնուհետև SSL 3.0 արձանագրության վրա մշակվեց RFC ստանդարտը, որը ստացավ TLS անունը։

Արձանագրությունը ապահովում է տվյալների փոխանցման գաղտնիությունը օգտվողի և սերվերի միջև, օգտագործելով TCP/IP, սակայն գաղտնագրման համար օգտագործվում է բաց բանալիով ասիմետրիկ ալգորիթմ։ Բաց բանալիով գաղտնագրման ժամանակ օգտագործվում է երկու բանալի, ըստ որում նրանցից յուրաքանչյուրը կարող է օգտագործվել հաղորդագրության գաղտնագրման համար։ Այնուամենայնիվ, եթե գաղտնագրման համար օգտագործվում է մեկ բանալի, ապա վերծանման համար համապատասխանաբար պետք է օգտագործել մյուս բանալին։ Այդ դեպքում կարելի է ընդունել պաշտպանված հաղորդագրություններ, հայտարարելով բաց բանալին սակայն գաղտնի բանալին պահելով գաղտնի։

### Նկարագրություն
SSL արձանագրությունը կազմված է երկու ենթաարձանագրություններից՝ գրանցման SSL արձանագրություն և ձեռքսեղման։ Գրանցման SSL արձանագրությունը որոշում է տվյալների փոխանցման տիպը։ SSL արձանագրությունը միավորում է ձեռքսեղմումը, օգտագործելով գրանցման SSL արձանագրությունը սերվերի և օգտագործողի միջև, առաջին կապի միացման ժամանակ հաղորդագրությունների հերթական փոխման համար։ SSL-ի աշխատանքի համար անհրաժեշտ է, որ սերվերը ունենա SSL հավաստագիր(սերտիֆիկատ)։
SSL-ը իրենից ներկայացնում է կապ, որը ունի 3 հիմնական հատկություններ.
* Աուտենտիֆիկացիա։ Սերվերը միշտ աուտենտիֆիկացվում է, նույն ժամանակ օգտվողը աուտենտիֆիկացվում է ալգորիթմից կախած։
* Ամբողջականություն։ Հաղորդագրությունների փոխանցումը ներառում է ամբողջականության ստուգումը։
* Գաղտնիություն։ Գաղտնագրումը օգտագործվում է կապի հաստատվելուց հետո և օգտագործվում բոլոր հետագա հաղորդագրությունների համար։

SSL արձանագրության մեջ բոլոր տվյալները փոխանցվում են օբյեկտների գրանցման տեսքով, որը կազմված է վերնագրից և փոխանցվող տվյալներից։ Փոխանցումը սկսվում է վերնագրից։ Վերնագիրը պարունակում է 2 կամ 3 բայթ երկարությամբ կոդ։ Ընդ որում, եթե առաջին բայթի ավագ բիտը 1 է, ապա գրանցումը չունի լցում(заполнитель) և վերնագրի ամբողջ երկարությունը 2 բայթ է, հակառակ դեպքում գրանցումը պարունակում է լցում և վերնագրի ամբողջ երկարությունը 3 բայթ է։ Գրանցման երկարության կոդը իր մեջ չի ներառում վերնագրի բայթերի քանակը։ 2x բայթային վերնագրի գրանցման երկարությունը՝

RecLength=(byte[0] & 0x7F«8) | byte[1];

Այստեղ byte[0]-ն և byte[1]-ը համապատասխանաբար առաջին և երկրորդ ստացված բայթերն են։ 3x բայթային վերնագրի գրանցման երկարությունը՝

RecLength = (byte[0] & 0x3F«8)|byte[1]; Escape = (byte[0] & 0x40)!=0; Padding = byte[2];

Այստեղ Padding-ը որոշում է սկզբնական տեքստին ուղարկողի կողմից ավելացված բայթերի քանակը, որպեսզի գրանցման երկարությունը դարձնել պատիկ գաղտագրման բլոկի չափսին, բլոկային գաղտնագրություն օգտագործելու ժամանակ։ Այժմ ուղարկողը ավելացնում է լցիչը և գաղտնագրում է դրանք։ Ըստ որում լցիչի պարունակությունը էական դեր չի խաղում։ Քանի որ հայտնի է ուղարկվող տվյալների չափսը, ապա վերնագիրը կազմվում է Padding-ի հաշվառմամբ։ Իր հերթին ստացողը վերծանում է ամբողջ տվյալների դաշտը և ստանում է ամբողջ սկզբնական ինֆորմացիան։ Այնուհետև իրագործվում է RecLength-ի հաշվումը արդեն հայտնի Padding-ով և լցիչը հեռացվում է տվյալների դաշտից։ SSL գրանցման տվյալները կազմված են 3 բաղադրիչներից։
* MAC_Data[Mac_Size] - (Message Authentication Code), հաղորդագրության աուտենտիֆիկացիայի կոդ
* Padding_Data[Padding] - լցիչի տվյալները
* Actual_Data[N] - իրական տվյալներ

Երբ գրանցումները ուղարկվում են բաց տեքստով, բնականաբար ոչ մի գաղտնագրեր չեն օգտագործվում, հետևաբար Padding_Data և MAC_Data երկարությունները հավասար են զրոյի։ Գաղտնագրություն օգտագործելու ժամանակ Padding_Data-ն կախված է գաղտնագրի բլոկի չափսից, իսկ MAC_Data կախված է ագղտնագրի ընտրությունից։ 
MAC_Data-ի հաշվման օրինակ՝

MacData = Hash(Secret, Actual_Data, Padding_Data, Sequence_Number);

Secret-ի արժեքը պայմանավորված է, թե ով է ուղարկում հաղորդագրություն՝ օգտագործող թե սերվեր։ Sequence_Number-ը հաշվիչ է, որը ինկրեմենտացվում է և սերվերի և օգտագործողի հետ։ Այստեղ Sequence_Number-ը իրենից ներկայացնում է 32ական բիթային կոդ, որը փոխանցում է հեշ-ֆունկցիաները 4ական բայթերով, ընդ որում առաջինը փոխանցվում է ավագ բիթը։ MD2-ի և MD5-ի համար MAC_Size-ը 16 բայթ է (128 բիթ)։ 2ական բայթային վերնագրի համար առավելագույն գրանցման երկարությունը 32767 բայթ է, իսկ 3ական բայթային վերնագրի համար՝ 16383 բայթ։

### Պատմությունը և զարգացումը
SSL արձանագրությունը ի սկզբանե ստեղծվել է Netscape ընկերության կողմից։ Առաջին 1.0 տարբերակը հասարակայնորեն չի թողարկվել։ 2.0 տարբերակը թողարկվել է 1995 թվականին, բայց ունեցել է շատ անվտանգության բացթողումներ, որոնք դրդել են, որ ստեղծվի 3.0-ն, որը լույս տեսավ 1996 թվականին։ Այնուհանդերձ SSL 3.0 տարբերակը հիմք հանդիսացավ TLS 1.0-ի ստեղծման համար։ Այն ստանդարտ Ինտերնետ Ճարտարագիտության Աշխատանքային Խմբի (Internet Engineering Task Force (IETF)) արձանագրություն է ճշտված 1999 թվականին։ Visa, Master Card, American Express, eBay, Paypal և այլ կազմակերպություններ, որոնք աշխատում են ինտերնետ դրամների հետ, ունեն SSL արձանագրություններ օգտագործելու լիցենզիա ինտերնետ ցանցում կոմերցիոն օգտագործման համար։
SSL արձանագրությունը աշխատում է մոդուլային մեթոդով։ Դրանով իսկ SSL-ը ընդլայնելի է նախագծին համապատասխան առաջնային և հետադարձ համատեղելիության ապահովման և միացումների միջև հաղորդակցության համար միատարր ցանցերում։

### Արձանագրության հիմնական նպատակը
1.Գաղտնագրային անվտանգություն։ SSL-ը ստեղծում է անվտանգ կապ երկու կողմերի միջև։
2.Համատեղելիություն։ Ծրագրավորողները իրարից անկախ կարող են ստեղծել ծրագրեր օգտագործելով SSL, որոնք դրա հետևանքով հեշտությամբ կարող են փոխանակվել գաղտնագրային պարամետրերով՝ առանց իմանալու միմյանց ծրագրերի կոդերը։
3.Ընդարձակում(Расширяемость)։ SSL-ը ձգտում է ապահովել աշխատանքի տարածությունը, որում նոր բաց բանալիները և գաղտնագրման ծանրակշիռ մեթոդները կարող են օգտագործվել նրանց պիտանելիությանը զուգահեռ։
4.Հարաբերական էֆեկտիվությունը։ SSL հիմքով արձանագրության աշխատանքի համար պետք է ունենալ արագագործ պրոցեսոր(CPU), մասնավորապես բաց բանալիների հետ աշխատելիս։ Այդ պատճառով SSL արձանագրությունը քեշավորման սխեմայի ոչ պարտադիր սեսիայի մեջ է մտնում, որպեսզի նվազեցվի կապերի քանակը, որը պետք է տեղադրել զրոյից։ Բացի այդ, մեծ ուշադրություն է դարձվում ցանցային ակտիվության նվազեցման վրա։

## Աուտենտիֆիկացիա և բանալիների փոխանակում
SSL արձանագրությունը ունի աուտենտիֆիկացիայի 3 տիպ.
* երկու կողմերի աուտենտիֆիկացիա (օգտագործող - սերվեր)
* սերվերի աուտենտիֆիկացիա չաուտենտիֆիկացված օգտագործողից
* բացարձակ անանունություն
Ամեն անգամ, երբ սերվերը աուտենտիֆիկացվում է, վեբ-սերվերի և զննարկիչի միջև տվյալների խլում(перехват) չի կարող տեղի ունենալ, բայց ամբողջությամբ անանուն սեսիան իր էությամբ խոցելի է այդպիսի հարձակման համար։ Անանուն սերվերը չի կարող աուտենտիֆիկացնել օգտագործողին։ Եթե սերվերը աուտենտիֆիկացված է, ապա իր հավաստագրման հաղորդագրությունը պետք է ապահովի ճշտգրիտ հավաստագրման շղթա, տանելով դեպի ընդունելի հավաստագրման կենտրոն։ Պարզ ասած աուտենտիֆիկացված օգտագործողը պետք է ցույց տա թույլատրված հավաստագիրը սերվերին։ Յուրաքանչյուր կողմ պատասխանում է մյուս կողմի հավաստագրի պիտանելիության ավարտի կամ չեղարկման ստուգման համար։ Բանալիների փոխանցման պրոցեսի հիմնական նպատակը օգտագործողի գաղտնիքի ստեղծումն է (pre_master_secret), որը հայտնի է միայն օգտագործողին և սերվերին։ Գաղտնիքը (pre_master_secret) օգտագործվում է ընդհանուր գաղտնիքի ստեղծման համար (master_secret)։ Ընդհանուր գաղտնիքը անհրաժեշտ է հավաստագրի ստուգման, բանալիների գաղտնագրման, MAC (message authentication code) գաղտնիքի և «finished» հաղորդագրության ստեղծման համար։ Երբ ուղարկվում է ճիշտ «finished» հաղորդագրությունը, դրանով կողմերը ապացուցում են, որ գիտեն գաղտնիքը (pre_master_secret)։

### Բանալիների անանուն փոխանակում
Ամբողջությամբ անանուն սեսիան կարող է տեղադրվել երբ օգտագործվում է RSA կամ Դիֆֆի-Հելմանի ալգորիթմը բանալիների փոխանակման համար։ RSA-ի օգտագործման դեպքում օգտագործողը գաղտնագրում է գաղտնիքը (pre_master_secret) անհավաստագրված սերվերի բաց բանալու օգնությամբ։ Բաց բանալին օգտագործողը կիմանա սերվերի բանալիների փոխանակման հաղորդագրությունից։ Արդյունքը փոխանցվում է օգտագործողի բանալիների փոխանակման հաղորդագրության մեջ։ Քանի որ հակառակորդը չգիտի սերվերի փակ բանալին, ապա նա չի կարող վերծանել գաղտնիքը (pre_master_secret)։ Դիֆֆի-Հելմանի ալգորիթմի օգտագործման դեպքում սերվերի բաց պարամետրերը պարունակվում են սերվերի բանալիների փոխանակման հաղորդագրությունում և օգտագործողին ուղարկում են բանալիների փոխանակման հաղորդագրությունը։ Հակառակորդը(перехватчик), որը չգիտի գաղտնի արժեքները, չի կարող գտնել գաղտնիքը (pre_master_secret)։

### Բանալիների փոխանակում օգտագործելով RSA և աուտենտիֆիկացիա
Այս դեպքում սերվերի բանալիների փոխանակումը և աուտենտիֆիկացիան կարող է լինել համակցված։ Բաց բանալին նույնպես կարող է պարունակվել սերվերի հավաստագրում կամ կարող է օգտագործվել ժամանակավոր RSA բանալին, որը ուղարկվում է սերվերից բանալիների փոխանակման հաղորդագրության մեջ։ Երբ օգտագործվում է ժամանակավոր RSA բանալին, փոխանակման հաղորդագրությունը ստորագրում է RSA սերվերը կամ DSS հավաստագիրը։ Ստորագրությունը ընդգրկում է հաղորդագրության ընթացիկ արժեքը Client_Hello.random, դրա հետևանքով հին ստորագրությունները և հին ժամանակավոր բանալիները չեն կարող կրկնվել։ Սերվերը կարող է օգտագործել ժամանակավոր RSA բանալի միայն մեկ անգամ սեսիայի ստեղծման ժամանակ։ Սերվերի հավաստագրի ստուգումից հետո օգտագործողը գաղտնագրում է գաղտնիքը (pre_master_secret) սերվերի բաց բանալու օգնությամբ։ Գաղտնիքի հաջողությամբ վերծանումից հետո (pre_master_secret) ստեղծվում է «finished» հաղորդագրությունը։ Դրանով սերվերը ցույց է տալիս, որ գիտի գաղտնի բանալին, որը համապատասխանում է սերվերի հաավստագրին։
Երբ RSA-ն օգտագործվում է բանալիների փոխանակման համար, օգտագործողի աուտենտիֆիկացիայի համար օգտագործվում է օգտագործողի հավաստագրի ստուգման հաղորդագրությունը։ Օգտագործողը ստորագրում է master_secret-ից և բոլոր առաջիկա ձեռքսեղման արձանագրության հաղորդագրություններից հաշվարկված արժեքով։ Այդ ձեռքսեղման հաղորդագրությունները ներառում են սերվերի հավաստագիրը, որը դրվում է սերվերի ստորագրության համապատասխան, Server_Hello.random հաղորդագրությունը, որը դրվում է ձեռքսեղման ընթացիկ հաղորդագրության ստորագրության համապատասխան։

### Բանալիների փոխանակում օգտագործելով Դիֆֆի-Հելման և աուտենտիֆիկացիա
Այս դեպքում սերվերը նույնպես կարող է ապահովել կոնկրետ պարամետրեր պարունակող Դիֆֆի-Հելմանի ալգորիթմը կամ կարող է օգտագործել սերվերից բանալիների փոխանակման հաղորդագրությունը, ժամանակավոր պարամետրերի ուղարկման համար՝ ստորագրված DSS կամ RSA-ի հավաստագրերի կողմից։ Ստորագրումից առաջ ժաամնակավոր պարամետրերը հեշավորվում են hello.random հաղորդագրությամբ, որպեսզի չարամիտը չկարողանա կրկնել հին պարամետրերի կրկնություն։ Ամեն դեպքում օգտագործողը կարող է ստուգել հավաստագիրը կամ ստորագրությունը, վստահ լինելու համար, թե արդյոք այդ պարամետրերը սերվերին են պատկանում։
Եթե օգտագործողը ունի Դիֆֆի-Հելմանի ալգորիթմի պարամետրեր պարունակող սերտիֆիկատ, ապա սերտիֆիկատը նույնպես պարունակում է նաև բանալիների փոխանակումը վերջացնելու համար նախատեսված տեղեկատվություն։ Նկատենք, որ այդ դեպքում օգտագործողը և սերվերը պետք է գեներացնեն միևնույն Դիֆֆի-Հելման արդյունքները (pre_master_secret), ամեն անգամ երբ նրանք ստեղծում են կապ։ Կոմպյուտերի հիշողությունում շատ ժամանակով գաղտնիքի կանգառը բացառելու նպատակով (pre_master_secret), գաղտնիքը պետք է տեղափոխվի ընդհանուր գաղտնիքի (master_secret) այնքան արագ, ինչքան հնարավոր է։ Օգտագործողի պարամետրերը պետք է համատեղելի լինեն սերվերի ապահոված պարամետրերի հետ, որպեսզի բանալիների փոխանակումը կատարվի։

## Գրման արձանագրություն (Record Layer)
Գրման արձանագրությունը մակարդակային արձանագրություն է։ Հաղորդագրության յուրաքանչյուր մակարդակում միանում են երկարության, նկարագրության և ստուգման դաշտեր։ Գրման արձանագրությունը ընդունում է հաղորդագրությունները, որոնք պետք է փոխանցվեն, մասնատում է տվյալները ղեկավարելի (կառավարելի) բլոկների, խելամտության սահմաններում սեղմում է տվյալները, կիրառելով MAC (message authentication code), կոդավորում է և փոխանցում արդյունքը։
Գոյություն ունեն գրման 4 արձանագրություններ.
* ձեռքսեղմման արձանագրություն (handshake protocol)
* տագնապի արձանագրություն (alert protocol)
* կոդի փոփոխության արձանագրություն (the change cipher spec protocol)
* ծրագրային արձանագրություն (application data protocol)
Եթե SSL իրականացումը ստանում է իրեն անծանոթ գրման տիպը, ապա այդ գրումը պարզապես անտեսվում է։ SSL-ի հետ համատեղ կիրառման համար ստեղծված ցանկացած արձանագրություն պետք է խորապես մտածված լինի, քանի որ այն անընդհատ հարձակումների է ենթարկվելու։ Նկատենք, որ գրման տարատեսակի և երկարության պատճառով՝ արձանագրությունը պաշտպանված չէ կոդավորմամբ։ Անհրաժեշտ է առանձնակի ուշադրություն դարձնել տվյալների տրաֆիկի նվազագույնին հասցնելուն։

### Ձեռքսեղմման արձանագրություն (handshake)
SSL օգտագործողն ու սերվերը պայմանավորվում են միացման հաստատման մասին ձեռքսեղմման գործընթացի միջոցով։ Ձեռքսեղմման ընթացքում հաճախորդն ու սերվերը պայմանավորվում են այն պարամետրերի (ցուցանիշների) վերաբերյալ, որոնք կիրառվելու են միացման անվտանգության ապահովման նպատակով։
* Ձեռքսեղմումը սկսում է այն պահից, երբ օգտագործողը միանում է SSL սերվերին։ Անվտանգ միացման հարցումն իրենից ներկայացնում է մի շարք ընդունելի ծածկագրերի և հեշ-ֆունկցիաների ցանկ։
* Այդ ցանկից սերվերն ընտրում է ամենավստահելի ծածկագիրը և հեշ-ֆունկցիան, որն ինքը ևս ընդունում է և ծանուցում է օգտագործողներին ընդունած որոշման մասին։
* Սերվերն այդ որոշումն ուղարկում է թվային հավաստագրի տեսքով։ Հավաստագիրը, սովորաբար, պարունակում է. Սերվերի անվանումը, Հավաստագրման լիազորված կենտրոնի անվանումը և սերվերի գաղտնագրման բաց բանալին։ Նախքան շարունակելը հաճախորդը կարող է կապվել հավաստագիրը տրամադրած սերվերի հետ (Հավաստագրման լիազորված կենտրոնի, կամ ավելի վերին կենտրոն) և համոզվել, որ հավաստագիրը իրական է, ճիշտ է։
* Սեանսի բանալիների գեներացիայի նպատակով օգտագործվում է անվտանգ միացում։ Օգտագործողը գաղտնագրում է պատահական թիվը սերվերի բաց բանալու միջոցով և ուղարկում է արդյունքը սերվերին։ Այն կարող է վերծանել բացառապես սերվերը՝ փակ բանալու միջոցով, և միայն այս փաստն է հնարավոր դարձնում բանալիները երրորդ կողմից թաքցնելը, քանի որ միայն հաճախորդն ու սերվերը ունեին այդ տվյալներ մուտքի իրավունք։ Օգտագործողը գիտի բաց բանալին և պատահական թիվը, իսկ սերվերը՝ փակ բանալին և (հաճախորդի հաղորդագրության վերծանումից հետո) պատահական թիվը։ Երրորդ կողմը, հնարավոր է, գիտի միայն բաց բանալին, եթե իհարկե փակ բանալին կոտրած չէ։
* Պատահական թվից երկու կողմերը ստեղծում են սկզբնական (ելակետային) տվյալներ գաղտնագրման և վերծանման համար։
Սրանով ձեռքսեղմումն ավարտվում է, և սկսվում է պաշտպանված միացումը, որը գաղտնագրվում և վերծանվում է սկզբնական տվյալների միջոցով։ Վերը թվարկածն գործողություններից յուրաքանչյուրի չհաջողման դեպքում համարվում է, որ SSL ձեռքսեղմումը չի հաջողվել և միացումը չի կատարվում։

### Կոդավորման պարամետրերի փոփոխման արձանագրություն(The Change Cipher Spec Protocol)
Այն գոյություն ունի կոդավորման ռեժիմ փոխանցումը ազդանշելու համար։ Արձանագրությունը պարունակում է միակ հաղորդագրություն, որը կոդավորված է և սեղմված ընթացիկ ստեղծված կապում։ Հաղորդագրությունը կազմված է միայն 1 բիթից՝ 1 արժեքով։

struct { enum { change_cipher_spec(1), (255) } type; } ChangeCipherSpec;

Կոդի փոխման հաղորդագրությունը ուղարկվում է և օգտագործողին, և սերվերին, ստացող կողմի ծանուցման համար, որ հաջորդ գրությունները պաշտպանված են լինելու նոր համաձայնեցված CipherSpec-ով և բանալիներով։ Այդ հաղորդագրության ընդունումը ստիպում է ստացողին տալ հրաման գրանցման մակարդակին անմիջապես պատճենել անցյալ կարդացման վիճակը ընթացիկ կարդացման վիճակում։ Անմիջապես այդ հաղորդագրության ուղարկումից հետո, ուղարկողը տալիս է հրաման գրանցման մակարդակին փոխել անցյալ գրանցման ռեժիմը՝ ինթացիկի։ Կոդի փոխման հաղորդագրությունը ուղարկվում է ձեռքսեռման ժամանակ, պաշտպանության պարամետրերի փոխանցումից հետո, բայց ‘finished’ հաղորդագրությունը ուղարկելուց առաջ։

### Տագնապային արձանագրություն (Alert Protocol)
Տագնապային արձանագրությունը SSL գրանցման արձանագրության մեջ ստուգման տիպերից մեկն է։ Տագնապի հաղորդագրությունը փոխանցում է հաղորդագրության մեջ առաջացած դժվարությունները և տագնապի նկարագրությունը։ Տագնապի հաղորդագրությունը կրիտիկական մակարդակով անմիջապես ընդհատում է միացումը։ Այդ դեպքում համապատասխան սեսիայի մյուս միացումները կարող են շարունակվել, բայց սեսիայի ID-ն պետք է անվավեր ճանաչվի։ Ինչպես և մյուս հաղորդագրությունները, ընթացիկ միացման կարգավիճակը իմանալուն պես, տագնապային հաղորդագրությունը գաղտնագրված է և սեղմված։

### Ծրագրային արձանագրություն (Application Data Protocol)
Ծրագրային տվյալների հաղորդագրությունը աշխատում է գրման մակարդակում։ Այն ֆրագմենտացվում, սեղմվում և կոդավորվում է ընթացիկ միացման վիճակի հիմքում։ Գրման մակարդակի համար հաղորդագրությունները ամարվում են թափանցիկ։

### SSL արձանագրության սխալները
SSL արձանագրության մեջ սխալների մշակումը շատ դյուրին է։ Երբ սխալը գտնվում է, սխալը գտնողը ուղարկում է իր ընկերոջը սխալի մասին հաղորդագրություն։ Չլուծվող սխալները պահանջում են օգտագործողից և սերվերից միացման խզում։ SSL արձանագրությունը որոշում է հետևյալ սխալները.
1.Unsupported_Certificate_Type_Error։ Այսպիսի սխալ առաջանում է, երբ սերվերը կամ օգտագործողը ստանում են հավաստագրի տիպը, որը այլևս չի ապահովվում։ Սխալը վերականգնելի է միայն օգտագործողի աուտենտիֆիկացիա լինելով։
2.No_Cipher_Error։ Սխալը առաջանում է, երբ սերվերը չի կարողանում գտնել բանալու չափսը կամ կոդը, որը ապահովվում է նաև օգտագործողի մոտ։ Սխալը անվերականգնելի է։
3.Bad_Certificate_Error։ Այսպիսի սխալ առաջանում է, երբ ընդունող կողմը համարում է հավաստագիրը վատ։ Դա նշանակում է, որ հավաստագրի ստորագրությունը ստույգ չէ։ Սխալը վերականգնելի է միայն օգտագործողի աուտենտիֆիկացիա լինելով։
4.No_Certificate_Error։ Եթե ուղարկված է Request_Certificate հաղորդագրությունը, ապա այդ սխալը կարող է լինել օգտագործողի մոտ հավաստագրի բացակայության հետևանք։ Սխալը վերականգնելի է։

## Հարձակումներ
Նկարագրենք հարձակումերի մի քանի տեսակ, որոնք կարող են կիրառվել SSL արձանագրության դեմ։ Սակայն, SSL-ը կայուն է այդպիսի հարձակումների դիմաց։

### Գաղտնագրի բացում
Ինչպես հայտնի է, SSL-ը կախված է տարբեր գաղտնագրային պարամետրերից։ Բաց Բանալիով գաղտնագրությունը RSA անհրաժեշտ է բանալիների փոխանակման և սերվեր-օգտագործող աուտենտիֆիկացիայի համար։ Սակայն, գաղտնագրի փոխարեն օգտագործվում են տարբեր գաղտնագրային ալգորիթմներ։ Այսպիսով եթե իրականացնել հաջողված ահրձակում այդ ալգորիթմների վրա, ապա SSL-ը արդեն չի կարող համարվել անվտանգ։ Որոշված կոմունիկացիոն սեսիաների վրա հարձակումը կատարվում են սեսիայի գրանցումով, այնուհետև երկար ժամանակի ընթացքում վերցվում է սեսիայի կամ RSA բանալին։ SSL-ը դարձնում է այդպիսի հարձակումը անօգուտ, քանի որ ծախսվում է մեծ քանակությամբ ժամանակ և ֆինանսներ։

### Չարամիտը մեջտեղում
Հայտնի է ինչպես MitM (Man-in-the-Middle) հարձակում։ Ենթադրում է երեք կողմերի մասնակցություն՝ սերվեր, օգտագործող և չարամիտ, որը գտնվում է նրանց մեջտեղում։ Այս իրադրությունում չարամիտը կարող է ստանալ բոլոր հաղորդագրությունները, որոնք գնում են երկու կողմերից և փոխել դրանք։ Չարամիտ ներկայանում է սերվերի համար օգտագործող և սերվեր՝ օգտագործողի համար։ Դիֆֆի-Հելմանի ալգորիթմի միջոցով բանալիների փոխանակման դեպքում, այդ մեթոդը էֆեկտիվ է, քանի որ ընդունված տեղեկատվության ամբողջականությունը և նրա աղբյուրի ստուգումը անհնար է։ Սակայն այդպիսի հարձակումը անհնար է SSL արձանագրության օգտագործման ընթացքում, քանի որ աղբյուրի ստուգման (սերվեր) համար օգտագործվում են հավաստագրեր, որոնք վավերացվել են հավաստագրերի կենտրոնի կողմից։
Հարձակումը կլինի արդյունավետ, եթե
* Սերվերը չունի ստորագրված հավաստագիր
* Օգտագործողը չի ստուգում սերվերի հավաստագիրը
* Օգտագործողը անտեսում է հավաստագրի ստորագրության բացակայության հաղորդագրությունը, որը տալիս է հավաստագրման կենտրոնը կամ հավաստագրի անհամապատասխանությունը քեշավորվածի հետ։
Նշում։ HTTPS-ֆիլտրի աշխատանքը (որը հաստատում է թունել երկու կողմերի համար և տալիս է իր հավաստագիրը օգտագործողին) MS Forefront TGM-ում, հարձակում չէ, այլ կառավարման և պաշտպանման միջոց։

### Արձագանքման հարձակում
Չարամիտը գրանցում է հաղորդակցության սեսիան սերվերի և օգտագործողի միջև։ Ավելի ուշ նա փորձում է հաստատել կապ սերվերի հետ, ներկայացնելով օգտագործողից գրանցված հաղորդագրությունները։ Բայց SSL-ը չեղարկում է հարձակումը միացման եզակի իդենտիֆիկատորի օգնությամբ։ Իհարկե, թեորիապես երրորդ կողմը ի զորու չէ գուշակել իդենտիֆիկատորը, քանի որ այն հիմնված է պատահական իրադարձության հավաքման վրա։ Այնուամենայնիվ, մեծ ռեսուրսների տեր չարագործը կարող է գրանցել մեծ քանակությամբ սեսիաներ և փորձել ընտրել «իրական» սեսիան, որը հիմնված է nonce կոդի վրա, որն էլ իր հերթին ուղարկել է սերվերը Server_Hello հաղորդագրության մեջ։ Բայց nonce SSL կոդերը ունեն ամենաքիչը 128 բիթ երկարություն, դա նշանակում է, որ չարամտին անհրաժեշտ է գրանցել 264 nonce կոդ, որպեսզի ստանա գուշակելու 50% հավանականություն։ Սակայն 264-ը շատ մեծ թիվ է, որ դարձնի այդ հարձակումները անիմաստ։

### Հարձակում ձեռքսեղման արձանագրության դեմ
Չարագործը կարող է փորձել ազդել ձեռքսեղմման փոխանակման վրա այն պատճառով, որ կողմերը ընտրեն կոդավորման տարբեր ալգորիթմներ և ոչ այն, ինչ նրանք ընտրում են սովորաբար։ Քանի որ շատ իրականացումներ ապահովում են 40 բիթային գաղտնագրություն իսկ որոշնրը նույնիսկ 0-գաղտնագրություն կամ MAC-ալգորիթմ, այդ հարձակումները ներկայացնում են մեծ հետաքրքրություն։
Այդպիսի հարձակման համար չարամտին անհրաժեշտ է շատ արագ փոխել մեկ կամ մի քանի ձեռքսեղմման հաղորդագրություններ։ Եթե դա տեղի է ունենում, ապա սերվերը և օգտագործողը կհաշվեն հեշ հաղորդագրությունների տարբեր արժեքներ։ Արդյունքում կողմերը չեն ընդունի միմյանց Finished հաղորդագրությունը։ Առանց գաղտնիքի իմացության, չարամիտը չի կարող ճշտել Finished հաղորդագրությունը, այդ պատճառով հարձակումը կարող է հայտնաբերվել։

### SSL-ում օգտագործվող ալգորիթմները
* Բանալիների փոխանակման և իրենց իսկության ստուգման համար՝ RSA, Diffie-Hellman, ECDH, SRP, PSK
* Աուտենտիֆիկացիայի համար՝ RSA, DSA. ECDSA
* Սիմետրիկ գաղտնագրման համար՝ RC2, RC4, IDEA, DES, Triple DES կամ AES, Camellia
* Հեշ ֆունկցիաների համար՝ SHA, MD5, MD4 կամ MD2

### Դիտարկիչներ, որոնք ունեն SSL աջակցություն
2013 թվականի դրությամբ դիտարկիչների ցուցակը, որոնք ունեն SSL/TLS աջակցում։

## Լրացումներ
* Google Chrome դիտարկիչը աջակցում է TLS 1.0 և TLS 1.1 տարբերակները սկսած 22-րդ տարբերակից։ TLS 1.2 տարբերակը չի աջակցվում։
* OS X օպերացիոն համակարգուկմ օգտագործվում է TLS տեխնոլոգիան, որը մատուցվում է Network Security Services (NSS) կողմից։ 2013 թվականի մարտի տվյալներով աջակցվում է NSS 3.14.3 տարբերակը և TLS 1.0 ու 1.1, բայց չկա 1.2 տարբերակի աջակցություն։
* Firefox 31.2 տարբերակը աջակցում է TLS 1.0, 1.1 և 1.2, SSL 3.0 տարբերակի աջակցումը լռելյայն կերպով անջատված է։
* IE использует реализацию TLS от операционной системы Microsoft Windows предоставляемых SChannel. TLS 1.1 и 1.2 по умолчанию отключены.
* Opera 10 имеет поддержку TLS 1.2. Предыдущие версии поддерживали TLS 1.0 и 1.1. TLS 1.1 и 1.2 по умолчанию отключены (за исключением версии 9 ).
* Safari использует реализацию операционной системы Mac OS X, Windows (XP, Vista, 7) Safari 5 является последней версией дотупной для Windows.
* Mobile Safari и программное обеспечение сторонних производителей с использованием библиотечных систем UIWebView поддерживают TLS 1.2 как и iOS 5.0.

## Ծանոթագրություններ

Կատեգորիա:Գաղտնագրություն
Կատեգորիա:Ինֆորմատիկա