เปิดตัว OpenSSL 3.0.0 Cryptographic Library

หลังจากสามปีของการพัฒนาและการทดสอบ 19 ครั้ง ไลบรารี OpenSSL 3.0.0 ก็ได้เปิดตัวพร้อมกับการใช้งานโปรโตคอล SSL/TLS และอัลกอริธึมการเข้ารหัสต่างๆ สาขาใหม่ประกอบด้วยการเปลี่ยนแปลงที่ทำลายความเข้ากันได้แบบย้อนหลังในระดับ API และ ABI แต่การเปลี่ยนแปลงจะไม่ส่งผลกระทบต่อการทำงานของแอปพลิเคชันส่วนใหญ่ที่ต้องมีการสร้างใหม่เพื่อโยกย้ายจาก OpenSSL 1.1.1 OpenSSL 1.1.1 สาขาก่อนหน้าจะได้รับการสนับสนุนจนถึงเดือนกันยายน 2023

การเปลี่ยนแปลงที่สำคัญในหมายเลขเวอร์ชันเกิดจากการเปลี่ยนไปใช้การกำหนดหมายเลข "Major.Minor.Patch" แบบเดิม จากนี้ไป ตัวเลขหลักแรก (หลัก) ในหมายเลขเวอร์ชันจะเปลี่ยนเฉพาะในกรณีที่ความเข้ากันได้เสียหายที่ระดับ API/ABI และหลักที่สอง (หลัก) จะเปลี่ยนเมื่อมีการเพิ่มฟังก์ชันการทำงานโดยไม่เปลี่ยน API/ABI การอัปเดตแก้ไขจะถูกส่งพร้อมกับการเปลี่ยนแปลงหลักที่สาม (แพทช์) หมายเลข 3.0.0 ทันทีหลังจาก 1.1.1 ถูกเลือกเพื่อหลีกเลี่ยงการทับซ้อนกับโมดูล FIPS ที่กำลังพัฒนาสำหรับ OpenSSL ซึ่งใช้การกำหนดหมายเลข 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 ใช้แนวคิดของผู้ให้บริการแบบเสียบได้ ซึ่งแทนที่แนวคิดของเอ็นจิ้น (ENGINE API เลิกใช้แล้ว) ด้วยความช่วยเหลือของผู้ให้บริการ คุณสามารถเพิ่มการใช้งานอัลกอริธึมของคุณเองสำหรับการดำเนินการต่างๆ เช่น การเข้ารหัส การถอดรหัส การสร้างคีย์ การคำนวณ MAC การสร้างและการตรวจสอบลายเซ็นดิจิทัล เป็นไปได้ที่จะเชื่อมต่ออันใหม่และสร้างการใช้งานทางเลือกของอัลกอริธึมที่ได้รับการสนับสนุนอยู่แล้ว (ตามค่าเริ่มต้น ตอนนี้ผู้ให้บริการที่สร้างใน OpenSSL จะถูกนำมาใช้สำหรับแต่ละอัลกอริธึม)
  • เพิ่มการรองรับสำหรับ Certificate Management Protocol (RFC 4210) ซึ่งสามารถใช้เพื่อขอใบรับรองจากเซิร์ฟเวอร์ CA อัปเดตใบรับรอง และเพิกถอนใบรับรอง การทำงานกับ CMP ดำเนินการโดยใช้ยูทิลิตี้ openssl-cmp ใหม่ ซึ่งรองรับรูปแบบ CRMF (RFC 4211) และการส่งคำขอผ่าน HTTP/HTTPS (RFC 6712)
  • มีการใช้งานไคลเอนต์เต็มรูปแบบสำหรับโปรโตคอล HTTP และ HTTPS ซึ่งรองรับวิธี GET และ POST คำขอเปลี่ยนเส้นทาง ทำงานผ่านพร็อกซี การเข้ารหัส ASN.1 และการประมวลผลการหมดเวลา
  • มีการเพิ่ม EVP_MAC ใหม่ (API รหัสการตรวจสอบข้อความ) เพื่อให้ง่ายต่อการเพิ่มการใช้งานใหม่ของการแทรกจำลอง
  • มีการเสนออินเทอร์เฟซซอฟต์แวร์ใหม่สำหรับการสร้างคีย์ - EVP_KDF (Key Derivation Function API) ซึ่งช่วยให้การเพิ่มการใช้งานใหม่ของ KDF และ PRF ง่ายขึ้น EVP_PKEY API แบบเก่าซึ่งมีอัลกอริทึมการเข้ารหัส TLS1 PRF และ HKDF ได้รับการออกแบบใหม่ในรูปแบบของเลเยอร์ที่ใช้งานบน EVP_KDF และ EVP_MAC API
  • การใช้โปรโตคอล TLS ช่วยให้สามารถใช้ไคลเอ็นต์และเซิร์ฟเวอร์ TLS ที่สร้างไว้ในเคอร์เนล Linux เพื่อเร่งความเร็วในการทำงาน หากต้องการเปิดใช้งานการใช้งาน TLS ที่เคอร์เนล Linux มอบให้ คุณต้องเปิดใช้งานตัวเลือก "SSL_OP_ENABLE_KTLS" หรือการตั้งค่า "enable-ktls"
  • เพิ่มการรองรับอัลกอริธึมใหม่:
    • อัลกอริธึมการสร้างคีย์ (KDF) คือ "ขั้นตอนเดียว" และ "SSH"
    • อัลกอริธึมการแทรกจำลอง (MAC) คือ "GMAC" และ "KMAC"
    • อัลกอริทึมการห่อหุ้มคีย์ RSA (KEM) "RSASVE"
    • อัลกอริธึมการเข้ารหัส "AES-SIV" (RFC-8452)
    • เพิ่มการเรียกไปยัง EVP API พร้อมรองรับการเข้ารหัสแบบผกผันโดยใช้อัลกอริธึม AES เพื่อเข้ารหัสคีย์ (Key Wrap): “AES-128-WRAP-INV”, “AES-192-WRAP-INV”, “AES-256-WRAP- INV” , "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" และ "AES-256-WRAP-PAD-INV"
    • เพิ่มการรองรับอัลกอริธึมการยืมข้อความไซเฟอร์เท็กซ์ (CTS) ให้กับ EVP API: “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 การติดตามใหม่ ซึ่งเปิดใช้งานผ่านพารามิเตอร์เปิดใช้งานการติดตาม
  • ช่วงของคีย์ที่รองรับในฟังก์ชัน 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 ที่เลิกใช้งานจะถูกลบออกในหนึ่งในรุ่นหลักถัดไป การใช้งานอัลกอริธึมแบบดั้งเดิม เช่น MD2 และ DES ซึ่งมีให้ใช้งานผ่าน EVP API ได้ถูกย้ายไปยังโมดูล "ดั้งเดิม" แยกต่างหาก ซึ่งจะถูกปิดใช้งานตามค่าเริ่มต้น
  • เอกสารและชุดการทดสอบได้รับการขยายอย่างมาก เมื่อเทียบกับสาขา 1.1.1 ปริมาณเอกสารเพิ่มขึ้น 94% และขนาดของรหัสชุดทดสอบเพิ่มขึ้น 54%

ที่มา: opennet.ru

เพิ่มความคิดเห็น