OpenSSL 3.0.0 ծածկագրային գրադարանի թողարկում

Երեք տարվա մշակումից և 19 թեստային թողարկումներից հետո OpenSSL 3.0.0 գրադարանը թողարկվեց SSL/TLS արձանագրությունների և գաղտնագրման տարբեր ալգորիթմների ներդրմամբ: Նոր մասնաճյուղը ներառում է փոփոխություններ, որոնք խախտում են հետընթաց համատեղելիությունը API-ի և ABI-ի մակարդակներում, սակայն փոփոխությունները չեն ազդի այն հավելվածների մեծ մասի աշխատանքի վրա, որոնք պահանջում են վերակառուցում OpenSSL 1.1.1-ից տեղափոխելու համար: OpenSSL 1.1.1-ի նախորդ մասնաճյուղը կաջակցվի մինչև 2023 թվականի սեպտեմբեր:

Տարբերակի համարի զգալի փոփոխությունը պայմանավորված է ավանդական «Major.Minor.Patch» համարակալման անցումով: Այսուհետ տարբերակի համարի առաջին նիշը (Major) կփոխվի միայն այն դեպքում, եթե համատեղելիությունը խախտվի API/ABI մակարդակում, իսկ երկրորդը (Minor) կփոխվի, երբ ֆունկցիոնալությունը մեծացվի առանց API/ABI-ն փոխելու: Ուղղիչ թարմացումները կառաքվեն երրորդ թվանշանի փոփոխությամբ (Patch): 3.0.0 համարն ընտրվել է 1.1.1-ից անմիջապես հետո՝ խուսափելու համընկնումներից OpenSSL-ի համար ներկայումս մշակվող FIPS մոդուլի հետ, որի համար օգտագործվել է 2.x համարակալումը:

Ծրագրի համար երկրորդ կարևոր փոփոխությունը երկակի լիցենզիայից (OpenSSL և SSLeay) անցումն էր Apache 2.0 լիցենզիային: Նախորդ սեփականատիրական OpenSSL լիցենզիան հիմնված էր ժառանգական Apache 1.0 լիցենզիայի տեքստի վրա և պահանջում էր OpenSSL-ի հստակ նշում մարքեթինգային նյութերում՝ OpenSSL գրադարաններից օգտվելիս, ինչպես նաև հատուկ ծանուցում, եթե OpenSSL-ը տրամադրվում էր որպես արտադրանքի մաս: Այս պահանջները դարձրեցին հին լիցենզիան անհամատեղելի GPL-ի հետ՝ դժվարացնելով OpenSSL-ի օգտագործումը GPL-ով արտոնագրված նախագծերում: Այս անհամատեղելիությունը շրջանցելու համար GPL նախագծերը ստիպված եղան օգտագործել հատուկ լիցենզային պայմանագրեր, որոնցում GPL-ի հիմնական տեքստը լրացվում էր կետով, որը բացահայտորեն թույլ էր տալիս հավելվածը կապել OpenSSL գրադարանի հետ և նշում էր, որ GPL-ի պահանջները չեն համապատասխանում: դիմել OpenSSL-ի հետ կապելու համար:

Համեմատած OpenSSL 1.1.1 մասնաճյուղի հետ՝ OpenSSL 3.0.0-ն ավելացրել է ավելի քան 7500 փոփոխություն, որոնք ներդրվել են 350 մշակողների կողմից: OpenSSL 3.0.0-ի հիմնական նորամուծությունները.

  • Առաջարկվել է FIPS նոր մոդուլ, ներառյալ գաղտնագրային ալգորիթմների ներդրումը, որոնք համապատասխանում են FIPS 140-2 անվտանգության ստանդարտին (մոդուլի հավաստագրման գործընթացը նախատեսվում է սկսել այս ամիս, իսկ FIPS 140-2 հավաստագրումը սպասվում է հաջորդ տարի): Նոր մոդուլը շատ ավելի հեշտ է օգտագործել, և այն միացնելը շատ հավելվածներին ավելի դժվար չի լինի, քան կազմաձևման ֆայլը փոխելը: Լռելյայնորեն, FIPS մոդուլն անջատված է և պահանջում է միացնել enable-fips տարբերակը:
  • libcrypto-ն իրականացնում է pluggable պրովայդերների հայեցակարգը, որը փոխարինել է շարժիչների հայեցակարգին (ENGINE API-ն հնացել է): Պրովայդերների օգնությամբ դուք կարող եք ավելացնել ալգորիթմների ձեր սեփական իրականացումները այնպիսի գործողությունների համար, ինչպիսիք են գաղտնագրումը, վերծանումը, բանալիների ստեղծումը, MAC-ի հաշվարկը, թվային ստորագրությունների ստեղծումը և ստուգումը: Հնարավոր է և՛ միացնել նորերը, և՛ ստեղծել արդեն աջակցվող ալգորիթմների այլընտրանքային իրականացումներ (ըստ լռելյայն, OpenSSL-ում ներկառուցված մատակարարն այժմ օգտագործվում է յուրաքանչյուր ալգորիթմի համար):
  • Ավելացվել է վկայականների կառավարման արձանագրության (RFC 4210) աջակցություն, որը կարող է օգտագործվել CA սերվերից վկայագրեր պահանջելու, վկայագրերը թարմացնելու և վկայականները չեղյալ հայտարարելու համար: CMP-ի հետ աշխատելն իրականացվում է օգտագործելով նոր openssl-cmp կոմունալ ծրագիրը, որն աջակցում է նաև CRMF ձևաչափին (RFC 4211) և հարցումների ուղարկմանը HTTP/HTTPS (RFC 6712) միջոցով:
  • Իրականացվել է HTTP և HTTPS արձանագրությունների լիարժեք հաճախորդ, որն աջակցում է GET և POST մեթոդներին, հարցումների վերահղում, աշխատում է վստահված անձի միջոցով, ASN.1 կոդավորումը և ժամանակի ավարտը:
  • Ավելացվել է նոր EVP_MAC (Message Authentication Code API)՝ կեղծ ներդիրների նոր իրականացումներն ավելի հեշտացնելու համար:
  • Առաջարկվում է բանալիների գեներացման նոր ծրագրային ինտերֆեյս՝ EVP_KDF (Key Derivation Function API), որը հեշտացնում է KDF-ի և PRF-ի նոր ներդրումների ավելացումը: Հին EVP_PKEY API-ն, որի միջոցով հասանելի էին scrypt, TLS1 PRF և HKDF ալգորիթմները, վերանախագծվել է շերտի տեսքով, որն իրականացվել է EVP_KDF և EVP_MAC API-ների վերևում:
  • TLS արձանագրության իրականացումը հնարավորություն է տալիս օգտագործելու TLS հաճախորդը և սերվերը, որը ներկառուցված է Linux միջուկում՝ արագացնելու գործողությունները: Linux միջուկի կողմից տրամադրված TLS-ի իրականացումը միացնելու համար դուք պետք է միացնեք «SSL_OP_ENABLE_KTLS» տարբերակը կամ «enable-ktls» պարամետրը:
  • Ավելացված աջակցություն նոր ալգորիթմների համար.
    • Հիմնական առաջացման ալգորիթմներն են (KDF) «SINGLE STEP» և «SSH»:
    • Մոդելավորման ալգորիթմները (MAC) են «GMAC» և «KMAC»:
    • RSA Key Encapsulation ալգորիթմ (KEM) «RSASVE»:
    • Կոդավորման ալգորիթմ «AES-SIV» (RFC-8452):
    • EVP API-ին ավելացվել են զանգեր, որոնք աջակցում են հակադարձ ծածկագրերը, օգտագործելով AES ալգորիթմը ստեղները գաղտնագրելու համար (Key Wrap). ” , «AES-128-WRAP-PAD-INV», «AES-192-WRAP-PAD-INV» և «AES-256-WRAP-PAD-INV»:
    • EVP API-ին ավելացվել է գաղտնագրային տեքստի փոխառության (CTS) ալգորիթմների աջակցություն՝ «AES-128-CBC-CTS», «AES-192-CBC-CTS», «AES-256-CBC-CTS», «CAMELLIA-128-CBC»: -CTS», «CAMELLIA-192-CBC-CTS» և «CAMELLIA-256-CBC-CTS»:
    • Ավելացվել է CAdES-BES թվային ստորագրությունների աջակցություն (RFC 5126):
    • AES_GCM-ն իրականացնում է AuthEnvelopedData (RFC 5083) պարամետրը, որպեսզի հնարավորություն ընձեռի AES GCM ռեժիմի միջոցով վավերացված և գաղտնագրված հաղորդագրությունների կոդավորումը և վերծանումը:
  • PKCS7_get_octet_string և PKCS7_type_is_other ֆունկցիաները ավելացվել են հանրային API-ին:
  • PKCS#12 API-ն փոխարինում է PKCS12_create() ֆունկցիայի մեջ օգտագործվող լռելյայն ալգորիթմները PBKDF2-ով և AES-ով և օգտագործում SHA-256 ալգորիթմը՝ MAC-ը հաշվարկելու համար: Անցյալի վարքագիծը վերականգնելու համար տրամադրվում է «-legacy» տարբերակը: Ավելացրել է մեծ թվով նոր ընդլայնված զանգեր PKCS12_*_ex, PKCS5_*_ex և PKCS8_*_ex, ինչպիսիք են PKCS12_add_key_ex().PKCS12_create_ex() և PKCS12_decrypt_skey_ex():
  • Windows պլատֆորմի համար ավելացվել է SRWLock մեխանիզմի միջոցով թելերի համաժամացման աջակցություն:
  • Ավելացվեց նոր հետագծման API, որը միացված է enable-trace պարամետրի միջոցով:
  • EVP_PKEY_public_check() և EVP_PKEY_param_check() գործառույթներում աջակցվող ստեղների շրջանակն ընդլայնվել է՝ RSA, DSA, ED25519, X25519, ED448 և X448:
  • RAND_DRBG ենթահամակարգը հեռացվել է, այն փոխարինվել է EVP_RAND API-ով: FIPS_mode() և FIPS_mode_set() ֆունկցիաները հեռացվել են:
  • API-ի զգալի մասը դարձել է հնացած. նախագծի կոդում հնացած զանգերի օգտագործումը կհանգեցնի նախազգուշացումների կոմպիլյացիայի ժամանակ: Ներառյալ ցածր մակարդակի API-ները, որոնք կապված են ալգորիթմների որոշակի ներդրման հետ (օրինակ՝ AES_set_encrypt_key և AES_encrypt), պաշտոնապես հայտարարվել են հնացած: OpenSSL 3.0.0-ի պաշտոնական աջակցությունն այժմ տրամադրվում է միայն բարձր մակարդակի EVP API-ների համար, որոնք վերացված են առանձին ալգորիթմի տեսակներից (այս API-ն ներառում է, օրինակ, EVP_EncryptInit_ex, EVP_EncryptUpdate և EVP_EncryptFinal գործառույթները): Հնացած API-ները կհեռացվեն հաջորդ հիմնական թողարկումներից մեկում: EVP API-ի միջոցով հասանելի ժառանգական ալգորիթմների, ինչպիսիք են MD2-ը և DES-ը, տեղափոխվել են առանձին «ժառանգություն» մոդուլ, որը լռելյայն անջատված է:
  • Փաստաթղթերը և թեստային փաթեթը զգալիորեն ընդլայնվել են: 1.1.1 ճյուղի համեմատ՝ փաստաթղթերի ծավալն աճել է 94%-ով, իսկ թեստային փաթեթի կոդի չափը՝ 54%-ով:

Source: opennet.ru

Добавить комментарий