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

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

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

Charles
Charles
Developer

หยุดเสียเวลาเป็นสัปดาห์กับการยืนยันตัวตนผู้ใช้
เปิดตัวแอปที่ปลอดภัยเร็วขึ้นด้วย Logto ผสานการยืนยันตัวตนผู้ใช้ภายในไม่กี่นาทีและมุ่งเน้นที่ผลิตภัณฑ์หลักของคุณ
เริ่มต้นใช้งาน
Product screenshot

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 จะสำรวจและนำเสนอประสบการณ์ผู้ใช้ที่ปลอดภัยและทนทานมากขึ้นต่อไป