• ความปลอดภัย
  • การเข้ารหัส
  • jws
  • อสมมาตร
  • ec
  • rsa
  • คีย์สาธารณะ
  • คีย์ส่วนตัว
  • โทเค็น
  • เซ็นชื่อ jwt

ภาพรวมของอัลกอริทึมการเซ็นชื่อ JWT

สำรวจอัลกอริทึมการเซ็นชื่อ JSON Web Token (JWT) ครอบคลุมสองวิธีการเข้ารหัสแบบอสมมาตรที่ได้รับความนิยมอย่างมาก: RSA และ EC เรียนรู้เกี่ยวกับข้อดีและข้อเสียของแต่ละอัลกอริทึม และวิธีที่ Logto ใช้ในการรักษาความปลอดภัยให้กับโทเค็น JWT ของคุณ

Charles
Charles
Developer

JWT คืออะไร?

JSON Web Token (JWT) เป็นวิธีที่กะทัดรัดและปลอดภัยต่อ URL ในการแทนที่การยืนยัน โครงสร้างประกอบด้วยส่วนหัว เนื้อหา และลายเซ็น

ในปัจจุบัน JWT ได้รับการยอมรับอย่างกว้างขวางและมีบทบาทสำคัญใน OAuth 2.0 และ OIDC แต่อย่างไรเซิร์ฟเวอร์การอนุญาตจะยืนยันและเชื่อมั่นใน JWT ที่ส่งมาจากลูกค้า? โทเค็นถูกออกและเซ็นชื่อโดยใคร? ในโพสต์บล็อกนี้ เราจะพูดถึงการเข้ารหัสแบบอสมมาตรและเจาะลึกข้อดีข้อเสียของอัลกอริทึมการเซ็นชื่อที่แตกต่างที่ Logto ใช้ในโทเค็น JWT ของตน

โครงสร้าง JWT

Logto เซ็นชื่อโทเค็น JWT ทั้งหมด รวมถึงโทเค็น ID และโทเค็นการเข้าถึง JWT ที่ลงลายเซ็นแล้วรู้จักกันในชื่อ JWS (JSON Web Signature) โครงสร้าง JWT ที่ลงลายเซ็นแล้วประกอบด้วยสามส่วน: ส่วนหัว เนื้อหา และลายเซ็น แยกด้วยจุด (.)

JOSE (JSON Object Signing and Encryption) Header

ส่วนหัวประกอบด้วยส่วนต่าง ๆ ต่อไปนี้:

  • typ: ประเภทของโทเค็น ซึ่งคือ JWT
  • alg: อัลกอริทึมการเซ็นชื่อที่ใช้ เช่น RS256 หรือ ES384
  • kid: ตัวบอกว่าใช้ key ใดในการรักษาความปลอดภัย JWT

Payload

เนื้อหาประกอบด้วยการอ้างสิทธิ์ ซึ่งเป็นข้อสรุปเกี่ยวกับหน่วยงานหนึ่ง (โดยปกติคือผู้ใช้) และข้อมูลเพิ่มเติม ตัวอย่างเช่น โทเค็น ID อาจมีการอ้างสิทธิ์ดังต่อไปนี้:

Signature

ลายเซ็นใช้ในการยืนยันว่าผู้ส่ง JWT ไม่ได้เป็นผู้ปลอมแปลง และข้อความไม่ได้ถูกดัดแปลง เมื่อใช้ JWT ที่มีลายเซ็น คุณต้องตรวจสอบลายเซ็นของโทเค็นเพื่อความถูกต้องของโทเค็น โปรดดูคู่มือนี้เกี่ยวกับ วิธีการตรวจสอบลายเซ็นของ JWT เพื่อปกป้อง API ของคุณ

การเข้ารหัสแบบอสมมาตรคืออะไร?

การเข้ารหัสแบบอสมมาตร หรือที่รู้จักในนามการเข้ารหัสลับ public-key เป็นพื้นฐานสำคัญในความปลอดภัยของคอมพิวเตอร์และการเข้ารหัสลับ ซึ่งประกอบด้วยคู่คีย์ที่เกี่ยวข้องกันที่ไม่ซ้ำกัน: คีย์สาธารณะและคีย์ส่วนตัว

คำนิยามของคีย์สาธารณะและคีย์ส่วนตัว

  • คีย์สาธารณะ: คีย์สาธารณะถูกออกแบบมาเพื่อให้เผยแพร่ได้ ในบริบทของ JWT และระบบที่คล้ายคลึงกัน คีย์สาธารณะใช้ในการยืนยันลายเซ็น ไม่ใช่การเข้ารหัส เมื่อข้อมูลถูกเซ็นด้วยคีย์ส่วนตัว และผู้รับข้อมูลมีคีย์สาธารณะที่ตรงกัน พวกเขาสามารถยืนยันได้ว่าข้อมูลนั้นถูกเซ็นโดยผู้ถือครองคีย์ส่วนตัวและไม่มีการดัดแปลงระหว่างการถ่ายทอด
  • คีย์ส่วนตัว: ตรงกันข้าม คีย์ส่วนตัวเป็นความลับที่ควรเป็นรู้แค่ผู้ถือครองเท่านั้น ในบริบทของ JWT คีย์ส่วนตัวใช้ในการสร้างลายเซ็นดิจิทัลที่สามารถยืนยันได้โดยใครก็ได้ที่มีคีย์สาธารณะที่ตรงกัน

การจัดเรียงคีย์นี้เป็นพื้นฐานของการถ่ายทอดข้อมูลที่ปลอดภัยและกลไกการยืนยันผู้ใช้ในโลกดิจิทัล โปรดดู โพสต์บล็อกนี้ สำหรับรายละเอียดเพิ่มเติม

อัลกอริทึมคีย์การเซ็นชื่อ JWT ที่นิยม: RSA vs EC

อัลกอริทึม RSA (Rivest-Shamir-Adelman) และ EC (Elliptic Curve) เป็นสองอัลกอริทึมที่ใช้เป็น “ฟังก์ชันทางคณิตศาสตร์” ที่พบบ่อยที่สุดในการเข้ารหัสอสมมาตร

ในฐานะนักพัฒนา เรามักจะต้องเลือกระหว่างอัลกอริทึมเหล่านี้เมื่อจัดการกับโครงสร้างการยืนยันและ JWT ของมัน แต่คุณจะเลือกอัลกอริทึมใด? มาดูกันถึงข้อดีข้อเสียของแต่ละอัลกอริทึม

อัลกอริทึมการเซ็นชื่อ RSA (เช่น RSASHA256)

  • ข้อดี:
    1. การสนับสนุนที่แพร่หลาย: RSA ได้รับการสนับสนุนอย่างกว้างขวางผ่านแพลตฟอร์มและไลบรารีต่าง ๆ รับประกันความเข้ากันได้ในสภาวะแวดล้อมที่หลากหลาย
    2. ประวัติการใช้งานที่ยาวนาน: RSA มีประวัติที่ยาวนานของความปลอดภัยที่เชื่อถือได้ และอัลกอริทึมของมันเข้าใจดีโดยชุมชนการเข้ารหัส
  • ข้อเสีย:
    1. ขนาดของคีย์: คีย์ RSA มีความยาวมากเพื่อให้ได้ระดับความปลอดภัยเดียวกันกับ EC ซึ่งทำให้ขนาดโทเค็นใหญ่ขึ้นและเพิ่มภาระในการคำนวณ
    2. ประสิทธิภาพ: กระบวนการ RSA มักจะช้ากว่า EC ซึ่งอาจเป็นปัญหาในแอปพลิเคชันที่มีการจราจรสูง

อัลกอริทึมการเซ็นชื่อ EC (เช่น ECDSASHA384)

  • ข้อดี:
    1. ประสิทธิภาพ: EC มีประสิทธิภาพที่เหนือกว่า RSA ทำให้เหมาะสำหรับแอปพลิเคชันที่มีข้อจำกัดด้านทรัพยากรหรือมีการจราจรสูง
    2. ขนาดคีย์เล็ก: คีย์ EC สั้นกว่าคู่ของมันใน RSA มากแต่ยังคงให้ระดับความปลอดภัยที่เทียบเท่ากัน ซึ่งนำไปสู่ความต้องการพื้นที่จัดเก็บและเครือข่ายที่ลดลงและการทำงานทางคณิตศาสตร์ที่เร็วขึ้น
    3. ความปลอดภัย: EC มีความน่าเชื่อถือสูงในเรื่องความปลอดภัยที่เพิ่มขึ้นจากคณิตศาสตร์ที่ซับซ้อนเบื้องหลังเส้นโค้งวงรีทำให้ต้านทานต่อการโจมตีโดย brute-force
  • ข้อเสีย:
    1. การสนับสนุนจำกัด: บางระบบและไลบรารีที่เก่าอาจไม่มีการสนับสนุน EC อย่างครอบคลุม ซึ่งอาจก่อให้เกิดปัญหาการเข้ากันไม่ได้ เช่น Cloudflare Zero Trust ไม่รองรับโทเค็นที่เซ็นชื่อด้วย EC
    2. ความซับซ้อน: การใช้งาน EC อาจจะซับซ้อนกว่าด้วยความซับซ้อนทางคณิตศาสตร์ที่เกี่ยวข้อง

การเลือกอัลกอริทึมการเซ็นชื่อ JWT ของ Logto

Logto ได้มุ่งมั่นที่จะรักษามาตรฐานสูงสุดของความปลอดภัยและความยืดหยุ่น และมักจะใช้โซลูชั่นที่ทันสมัยและประสิทธิภาพสูงสุดเป็นหลัก EC มีการรวมกันที่ยอดเยี่ยมของความปลอดภัยที่แข็งแรงและประสิทธิภาพในการคำนวณ ทำให้มันเหมาะสำหรับความต้องการในการยืนยันและการอนุญาตสมัยใหม่ ดังนั้น EC ได้เป็นอัลกอริทึมคีย์สำหรับการเซ็นชื่อที่เราเลือกมาตั้งแต่ช่วงต้น

อย่างไรก็ตาม เรายอมรับว่าโทเค็นที่เซ็นชื่อด้วย EC ไม่สามารถใช้งานร่วมกับบางระบบและเฟรมเวิร์คภายนอกได้เฉพาะเจาะจง ระบบเก่าเป็นพิเศษ ดังนั้นเราจึงได้แนะนำฟีเจอร์ในการเปลี่ยนอัลกอริทึมการเซ็นชื่อ JWT ของคุณโดยการหมุนคีย์ส่วนตัวของคุณ

ภาพหน้าจอของ UI คอนโซล Logto สำหรับหมุนคีย์ส่วนตัวของคุณ

ดังนั้นถ้าคุณประสบปัญหาในการไม่สามารถเชื่อมต่อกับแพลตฟอร์มที่สามเนื่องจากอัลกอริทึมการเซ็นชื่อ JWT ที่ไม่รองรับ ตอนนี้เป็นเวลาที่จะหมุนและเลือกอัลกอริทึม RSA สำหรับคีย์ส่วนตัวใหม่ของคุณ

ฟีเจอร์นี้ยังช่วยลดความเสี่ยงที่เกี่ยวข้องกับการเปิดเผยหรือการประนีประนอมคีย์ในระยะยาว การหมุนคีย์ส่วนตัวเป็นประจำควรเป็นการปฏิบัติพื้นฐานในกลยุทธ์ความปลอดภัยขององค์กรใด ๆ และแนะนำอย่างยิ่งยวดโดย Logto

สรุป: อัลกอริทึมการเซ็นชื่อ JWT ที่ใช้กันทั่วไป: RSA และ EC

การเซ็นชื่อโทเค็น JWT ช่วยรักษาความถูกต้องของข้อมูลที่ถูกถ่ายทอด การเลือกอัลกอริทึมการเซ็นชื่อสามารถมีผลกระทบอย่างมากต่อความปลอดภัย ประสิทธิภาพ และความเข้ากันได้ของแอปพลิเคชันของคุณ

ทั้งอัลกอริทึม RSA และ EC เป็นอัลกอริทึมที่สำคัญและนิยมในทางการเข้ารหัส การเข้าใจข้อดีข้อเสียและหลักการทางคณิตศาสตร์เบื้องหลังอัลกอริทึมเหล่านี้ช่วยให้สามารถตัดสินใจได้ดีขึ้นสำหรับแอปพลิเคชันของคุณในการทำงานกับกรอบการยืนยันและการอนุญาต

Logto จะสำรวจและนำเสนอประสบการณ์ผู้ใช้ที่ปลอดภัยและทนทานมากขึ้นต่อไป