การแนะนำอัลกอริทึมการเซ็นชื่อ EC และ RSA ใน JWT
เรียนรู้พื้นฐานเกี่ยวกับการเข้ารหัสแบบอสมมาตร และเข้าใจข้อดีและข้อเสียของอัลกอริทึมการเซ็นชื่อ JWT ที่ได้รับความนิยมสองแบบ - EC และ RSA
ภูมิหลัง
ในโลกดิจิทัล การค้นหาความปลอดภัยในการส่งข้อมูลที่ดีขึ้นยังคงมีอยู่อย่างต่อเนื่อง ปัจจุบัน JSON Web Tokens (JWT) ได้รับการยอมรับอย่างกว้างขวางและมีบทบาทสำคัญใน OAuth 2.0 และ OIDC แต่เซิร์ฟเวอร์การอนุญาตตรวจสอบและเชื่อถือโทเค็น JWT ที่ส่งมาจากไคลเอนต์ได้อย่างไร โทเค็นออกและเซ็นชื่อโดยผู้ออกได้อย่างไร ในโพสต์บล็อกนี้ เราจะพูดถึงการเข้ารหัสแบบอสมมาตรและพิจารณาข้อดีและข้อเสียของอัลกอริทึมการเซ็นชื่อที่แตกต่างกันที่ Logto ใช้ในโทเค็น JWT
ความเข้าใจเกี่ยวกับการเข้ารหัสแบบอสมมาตร
การเข้ารหัสแบบอสมมาตร หรือที่เรียกว่า การเข้ารหัสด้วยกุญแจสาธารณะ ซึ่งเป็นแนวคิดพื้นฐานในความปลอดภัยของคอมพิวเตอร์และการเข้ารหัสเกี่ยวข้องกับการใช้คู่ของกุญแจที่เกี่ยวข้องและไม่ซ้ำกัน: กุญแจสาธารณะและกุญแจส่วนตัว บทบาทของกุญแจเหล่านี้อาจดูขัดแย้งกันในตอนแรก แต่พวกเขามีความสำคัญต่อความปลอดภัยของข้อมูล
- กุญแจสาธารณะ: กุญแจสาธารณะ ดั่งชื่อของมันออกแบบมาสำหรับการแบ่งปันแบบเปิด ในบริบทของ JWT และระบบที่คล้ายกัน กุญแจสาธารณะใช้สำหรับการตรวจสอบลายเซ็น ไม่ใช่การเข้ารหัส เมื่อข้อมูลถูกเซ็นด้วยกุญแจส่วนตัวและผู้รับครอบครองกุญแจสาธารณะที่สอดคล้องกัน พวกเขาสามารถตรวจสอบว่าข้อมูลนั้นได้ถูกเซ็นโดยผู้ถือครองกุญแจส่วนตัวจริงและไม่ได้ถูกปรับแต่งระหว่างการส่ง อย่างไรก็ตาม ในการใช้การเข้ารหัสแบบอสมมาตรแบบดั้งเดิม เช่น HTTPS กุญ แจสาธารณะใช้สำหรับการเข้ารหัส และข้อมูลที่เข้ารหัสสามารถถูกถอดรหัสได้โดยเซิร์ฟเวอร์เป้าหมายที่ถือครองกุญแจส่วนตัวที่จับคู่กันเท่านั้น
- กุญแจส่วนตัว: ในทางตรงกันข้าม กุญแจส่วนตัวเป็นความลับที่ถูกเก็บรักษาไว้อย่างแน่นหนาและควรรู้ได้เฉพาะเจ้าของที่ถูกต้อง ในบริบทของ JWT กุญแจส่วนตัวใช้เพื่อสร้างลายเซ็นดิจิทัลที่สามารถยืนยันได้โดยใครก็ตามที่สามารถเข้าถึงกุญแจสาธารณะที่สอดคล้องกันได้ อีกทั้ง ในบริบทของการเข้ารหัสแบบอสมมาตรที่ดั้งเดิมยิ่งกว่า กุญแจส่วนตัวถูกใช้จริงสำหรับการถอดรหัส อนุญาตให้เข้าถึงข้อมูลที่ถูกเข้ารหัสด้วยกุญแจสาธารณะได้อย่างปลอดภัย
การจัดเรียงกุญแจอย่างไม่ซ้ำกันนี้ ที่กุญแจสาธารณะแน่ใจหรือเข้ารหัสข้อมูล และกุญแจส่วนตัวเซ็นหรือถอดรหัสข้อมูล เป็นพื้นฐานของการส่งข้อมูลอย่า งปลอดภัยและกลไกการตรวจสอบผู้ใช้ในโลกดิจิทัล อ่าน โพสต์บล็อกนี้ สำหรับรายละเอียดเพิ่มเติม
อัลกอริทึมการเข้ารหัสแบบอสมมาตร: RSA เปรียบเทียบกับ EC
อัลกอริทึม RSA (Rivest-Shamir-Adelman) และ EC (Elliptic Curve) เป็นอัลกอริทึม 'ฟังก์ชันทางคณิตศาสตร์' ที่ใช้กันมากที่สุดสองในแบบอสมมาตร ในฐานะนักพัฒนาเรามักจะถูกเสนอทางเพื่อเลือกระหว่างอัลกอริทึมเหล่านี้เมื่อจัดการกับกรอบการรับรองและ JWT ของมัน แต่ทางเลือกของคุณจะเป็นอะไร? ลองมาดูข้อดีและข้อเสียของแต่ละแบบกัน
อัลกอริทึมการเซ็นชื่อ RSA
- ข้อดี:
- การสนับสนุนที่แพร่หลาย: RSA ได้รับการสนับสนุนอย่างกว้างขวางในแพลตฟอร์มและไลบรารีต่าง ๆ เพื่อทำให้แน่ใจว่าความเข้ากันได้ในหลากหลายสภาพแวดล้อม
- ประวัติอันยาวนาน: RSA มีประวัติของความปลอดภัยที่น่าเชื่อถือ และอัลกอริทึมของมันก็ได้รับการเข้าใจดีโดยชุมชนการเข้ารหัส
- ข้อเสีย:
- ขนาดของกุญแจ: กุญแจ RSA มีความยาวกว่าเพื่อให้ได้ระดับความปลอดภัยเดียวกันกับ EC ซึ่งส่งผลให้โทเค็นมีขนาดใหญ่ขึ้นและเกินความจำเป็นทางคอมพิวเตอร์มากขึ้น
- ประสิทธิภาพ: การปฏิบัติการของ RSA มักจะช้ากว่า EC ซึ่งอาจเป็นข้อเสียในแอปพลิเคชันที่มีการรับส่งข้อมูลสูง
อัลกอริทึมการเซ็นชื่อ EC
- ข้อดี:
- ประสิทธิภาพ: EC ให้ประสิทธิภาพที่เหนือกว่า RSA ทำให้เหมาะสมสำหรับแอปพลิเคชันที่มีข้อจำกัดด้านทรัพยากรหรือโหลดการส่งข้อมูลสูง
- ขนาดกุญแจที่กระทัดรัด: กุญแจ EC มีขนาดสั้นกว่ากุญแจ RSA มากในขณะที่ให้ระดับความปลอดภัยเท่าเทียมกัน ส่งผลให้ความต้องการด้านการเก็บข้อมูลและเครือข่ายลดลง และเร่งการดำเนินการเข้ารหัสให้เร็วขึ้น
- ความปลอดภัย: EC ได้รับการยกย่องว่าสำหรับความปลอดภัยที่แข็งแรง พร้อมกับคณิตศาสตร์อันซับซ้อนเบื้องหลังโค้งเอลลิปติคซึ่งทำให้ยากที่จะถูกโจมตีด้วยแรง
- ข้อเสีย:
- การสนับสนุนที่จำกัด: ระบบและไลบรารีเก่า ๆ บางระบบอาจขาดการสนับสนุน EC อย่างครอบคลุม ซึ่งอาจทำให้เกิดปัญหาความเข้ากันได้ ตัวอย่างเช่น Cloudflare Zero Trust ไม่สนับสนุนโทเค็น EC
- ความซับซ้อน: การใช้งาน EC อาจซับซ้อนกว่าเนื่องจากความซับซ้อนในเชิงคณิตศาสตร์ที่เกี่ยวข้อง
การเลือกอัลกอริทึมการเซ็นชื่อ JWT ของ Logto
Logto มุ่งมั่นเสมอที่จะรักษามาตรฐานสูงสุดในด้านความปลอดภัยและความยืดหยุ่นและมีแนวโน้มที่จะใช้โซลูชั่นที่ทันสมัยและมีประสิทธิภาพที่สุดภายในโครงสร้างหลัก EC นำเสนอการผสมผสานระหว่างความปลอดภัยที่แข็งแรงและประสิทธิภาพในการคำนวณซึ่งทำให้เหมาะสมสำหรับความต้องการในการตรวจสอบและการอนุญาตที่ทันสมัย ดังนั้น EC จึงเป็นอัลกอริทึมกุญแจเซ็นชื่อเริ่มต้นของเราตั้งแต่ระยะต้นของผลิตภัณฑ์
อย่างไรก็ตาม เราได้รับความคิดเห็นจำนวนมากจากผู้ใช้ว่าโทเค็นที่เซ็นชื่อด้วย EC ไม่เข้ากับระบบและเฟรมเวิร์คของบุคคลที่สามบางระบบ โดยเฉพาะระบบเก่า ๆ ดังนั้นเราจึงกำลังทำงานเพื่อสนับสนุนอัลกอริทึม RSA ด้วย เพื่อให้แน่ใจว่า Logto ยังคงสามารถปรับตัวและหลากหลายได้สำหรับความต้องการในการตรวจสอบของคุณทั้งหมด
ในการอัปเดตครั้งถัดไป Logto Cloud จะเปิดตัวฟีเจอร์ “การผัดเวียนกุญแจส่วนตัว” ที่ช่วยให้คุณสร้าง OIDC กุญแจส่วนตัวใหม่และกุญแจคุกกี้ในผู้เช่าได้ (กุญแจส่วนตัวใช้เพื่อเซ็นชื่อโทเค็น JWT ของคุณและกุญแจคุกกี้ใช้เพื่อเซ็นชื่อคุกกี้)
ฟีเจอร์นี้ช่วยบรรเทาความเสี่ยงที่เกี่ยวข้องกับการเผยแพร่กุญแจระยะยาวหรือการโดนโจมตี การผัดเวียนกุญแจส่วนตัวอย่างสม่ำเสมอควรเป็นหลักปฏิบัติพื้นฐานในกลยุทธ์ความปลอดภัยขององค์กรใด ๆ และ Logto แนะนำอย่างสูงให้ปฏิบัติตาม
นอกจากนี้ ในขณะที่หมุนกุญแจเซ็นชื่อ JWT ของคุณ เราจะมีตัวเลือกให้เลือกอัลกอริทึมกุญแจเซ็นชื ่อใหม่ระหว่าง EC และ RSA ดังนั้นถ้าคุณกำลังเผชิญกับปัญหาการเชื่อมต่อกับแพลตฟอร์มบุคคลที่สามเนื่องจากอัลกอริทึมการเซ็นชื่อ JWT ที่ไม่สนับสนุน ตอนนี้ถึงเวลาที่จะหมุนและเลือกอัลกอริทึม RSA สำหรับกุญแจส่วนตัวของคุณใหม่
เนื่องจากการตั้งค่านี้อยู่ในหน้าการตั้งค่าของผู้เช่า UI จะไม่สามารถใช้งานได้สำหรับผู้ใช้ OSS ไม่ต้องกังวล คุณยังคงสามารถทำสิ่งนี้ได้โดยการอัปเกรดเป็นเวอร์ชันล่าสุดและรันคำสั่ง CLI ต่อไปนี้ในไดเรกทอรีรากของ Logto
สรุป
การเข้ารหัสแบบอสมมาตรช่วยให้ความปลอดภัยของโทเค็น JWT ของคุณในระบบรับรองของคุณ ทั้งอัลกอริทึม EC และ RSA เป็นอัลกอริทึมที่จำเป็นและได้รับความนิยมในวิทยาการเข้ารหัส การเข้าใจข้อดีและข้อเสียและหลักการทางคณิตศาสตร์ที่อยู่เบื้องหลังอัลก อริทึมเหล่านี้ช่วยให้คุณตัดสินใจได้ดีขึ้นสำหรับแอปพลิเคชันของคุณเพื่อทำงานร่วมกับกรอบการรับรองและการอนุญาต
Logto จะยังคงสำรวจและเสนอประสบการณ์ผู้ใช้ที่ปลอดภัยและยอดเยี่ยมมากขึ้นให้คุณต่อไป