เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · ตัวถอดรหัส JWT
ถอดรหัสและยืนยัน: ลายเซ็น JWT พิสูจน์อะไรและเหตุใดผู้ถอดรหัสจึงข้ามไป
· มันทำงานอย่างไร
jwt ความปลอดภัย การเข้ารหัส
การถอดรหัสไม่จำเป็นต้องมีคีย์ การตรวจสอบความต้องการสิ่งที่ถูกต้อง โพสต์นี้อธิบายว่าลายเซ็นครอบคลุมถึงอะไร HMAC และการตรวจสอบแบบไม่สมมาตรแตกต่างกันอย่างไร และเหตุใดเครื่องมือถอดรหัสอย่างเดียวจึงไม่พิสูจน์อะไรเลย
มันถอดรหัสได้ดี ดังนั้นจึงต้องถูกต้อง — สมมติฐานที่นำไปสู่การยอมรับโทเค็นปลอมแปลง
โทเค็นสามารถถอดรหัสได้อย่างสมบูรณ์แบบหลังจากที่ผู้โจมตีเขียนเพย์โหลดใหม่และแนบข้อความที่กำหนดเองเป็นส่วนที่สาม การแยกวิเคราะห์ Base64url และ JSON เป็นการแปลงแบบสาธารณะ ไม่ตรวจสอบว่าใครเป็นผู้ประกอบสาย “การเรียกร้องที่ปรากฏบนหน้าจอ” จึงไม่ใช่หลักฐานว่าผู้ออกสร้างหรืออนุมัติ
ToolAcre ตอกย้ำขอบเขตนี้ในหลาย ๆ ที่ ผลลัพธ์จะมี `signatureVerified: false` เสมอ UI จะส่งการแจ้งเตือนการอ้างสิทธิ์ที่ยังไม่ได้รับการยืนยันซ้ำข้างเอาต์พุต และการทดสอบยืนยันว่าไม่มีพื้นผิว `valid` หรือ `verify` นั่นคือความซื่อสัตย์โดยเจตนา ไม่ใช่คุณลักษณะด้านความสะดวกสบายที่ขาดหายไป
สิ่งที่ลายเซ็นครอบคลุม - ไบต์ที่แน่นอนของส่วนหัวที่เข้ารหัสและเพย์โหลด เชื่อมด้วยจุด
สำหรับ JWS แบบกะทัดรัด อินพุตการเซ็นชื่อคือส่วนของส่วนหัวที่ได้รับการป้องกันที่เข้ารหัส จุดตามตัวอักษร และส่วนของเพย์โหลดที่เข้ารหัส การตรวจสอบเกี่ยวข้องกับไบต์ที่เข้ารหัสทุกประการ ไม่ใช่พิมพ์ใหม่สวยงาม JSON การเรียงลำดับคุณสมบัติใหม่หรือการเปลี่ยนแปลงช่องว่างสามารถสร้างไบต์ที่แตกต่างกันได้แม้ว่ามนุษย์จะมองเห็นวัตถุที่เทียบเท่ากันก็ตาม
ส่วนที่สามมีลายเซ็นที่เข้ารหัสหรือ MAC ไบต์ที่สร้างขึ้นบนอินพุตนั้น ToolAcre รักษาเซกเมนต์ดิบและอาจรายงานความยาวไบต์ของมัน แต่จะไม่เรียกใช้การตรวจสอบการเข้ารหัส รูปร่างข้อมูลการวัดไม่สามารถระบุได้ว่าคีย์ที่คาดหวังสร้างขึ้นหรือสองส่วนแรกยังคงไม่เปลี่ยนแปลง
HMAC กับ ไม่สมมาตร - ความลับที่ใช้ร่วมกันที่ใครก็ตามที่สามารถตรวจสอบได้ก็ปลอมแปลงได้เช่นกัน เทียบกับกุญแจสาธารณะที่สามารถตรวจสอบได้เท่านั้น
ด้วย HMAC ความลับที่แชร์จะสนับสนุนทั้งการสร้างและการตรวจสอบ MAC ฝ่ายที่สามารถตรวจสอบด้วยความลับนั้นสามารถสร้างโทเค็นอื่นได้ ดังนั้นการกระจายความลับจึงกำหนดขอบเขตความน่าเชื่อถือ บันทึกของ ToolAcre ทำให้ผลลัพธ์นี้ชัดเจนสำหรับป้ายกำกับอัลกอริทึม HS ที่ได้รับการยอมรับ
ลายเซ็นแบบอสมมาตรแยกความสามารถในการลงนามแบบส่วนตัวออกจากเอกสารการตรวจสอบสาธารณะ การมีคีย์สาธารณะสามารถรองรับการตรวจสอบได้โดยไม่ต้องให้สิทธิ์ในการลงนาม ความแตกต่างนี้ไม่ได้ทำให้ฉลากอสมมาตรที่ประกาศส่วนหัวน่าเชื่อถือ: ผู้ตรวจสอบต้องรู้อยู่แล้วว่าอัลกอริทึมและรหัสผู้ออกใดที่ยอมรับได้
ที่มาของคีย์ — การกำหนดค่าสำหรับความลับที่แชร์ จุดสิ้นสุด JWKS สำหรับคีย์สาธารณะ จับคู่โดยเด็ก
ข้อมูลลับที่ใช้ร่วมกันควรมาจากการกำหนดค่าบริการที่ได้รับการป้องกัน ไม่ใช่ข้อความโทเค็น คีย์การยืนยันสาธารณะอาจมาจากความสัมพันธ์ของผู้ออกที่เชื่อถือได้และชุดคีย์ที่ได้รับการควบคุม `kid` สามารถช่วยในการเลือกภายในชุดนั้นได้ แต่จะต้องไม่เปลี่ยนเนื้อหาส่วนหัวที่ไม่น่าเชื่อถือโดยพลการให้เป็นไฟล์ ฐานข้อมูล หรือการค้นหาเครือข่าย
ToolAcre ไม่มีการกำหนดค่าของผู้ออกและไม่ขอรหัส ดังนั้นการตรวจสอบจึงเป็นไปไม่ได้ที่จะดำเนินการอย่างมีความรับผิดชอบที่นั่น หน้าเว็บทั่วไปไม่สามารถสรุปได้ว่าองค์กรใดที่คุณไว้วางใจ ผู้ชมที่คุณให้บริการ หรืออัลกอริทึมที่แอปพลิเคชันของคุณอนุญาต ข้อมูลเหล่านี้เป็นอินพุตนโยบายแอปพลิเคชัน ไม่ใช่คุณสมบัติที่ค้นพบได้โดยการถอดรหัส
เหตุใดการถอดรหัสจึงไม่จำเป็นต้องมีคีย์ — base64url เป็นการเข้ารหัส ไม่ใช่การเข้ารหัส ดังนั้นใครๆ ก็สามารถอ่านคำกล่าวอ้างได้
ไม่จำเป็นต้องมีคีย์ในการถอดรหัส เนื่องจาก base64url เป็นการเข้ารหัสแบบย้อนกลับได้ แทนที่จะเป็นการเข้ารหัส ส่วนหัวและเพย์โหลดมีไว้เพื่อเดินทางพร้อมกับโทเค็น และผู้ถือสามารถกู้คืนได้ ซึ่งจะช่วยให้การตรวจสอบมีประโยชน์ แต่ยังหมายความว่าข้อมูลที่เป็นความลับไม่ควรถูกซ่อนไว้เบื้องหลังสัญญาณรบกวนภาพของอักขระที่เข้ารหัส
JSON การแยกวิเคราะห์เพิ่มโครงสร้างเท่านั้น มันสามารถบอกคุณได้ว่า `roles` เป็นอาร์เรย์หรือ `exp` เป็นตัวเลข ไม่ใช่ว่าค่าใดค่าหนึ่งเป็นของแท้ ToolAcre แสดงผลค่าที่มีโครงสร้างเป็นข้อความและคำอธิบายที่ลงทะเบียนไว้เป็นเอกสารประกอบ ในขณะที่ปล่อยให้การอนุญาตอยู่ที่ระบบที่สามารถตรวจสอบและบังคับใช้นโยบายได้
ตัวอย่างการทำงาน — โทเค็นที่มีการเปลี่ยนแปลงอักขระเพย์โหลดหนึ่งตัวยังคงถอดรหัสได้อย่างสมบูรณ์แบบ ประกาศการตรวจสอบเท่านั้น
เริ่มต้นด้วยโทเค็นสังเคราะห์ที่มีเพย์โหลดระบุว่า `{"sub":"demo","role":"reader"}` เปลี่ยนอักขระเพย์โหลดที่เข้ารหัสหนึ่งตัว เพื่อให้ไบต์ยังคงมีรูปแบบที่ถูกต้อง JSON ซึ่งอาจสร้างบทบาทที่แตกต่างออกไป ทั้งสองเวอร์ชันสามารถแยก ถอดรหัส และพิมพ์ได้สวย เส้นทางการถอดรหัสไม่มีเหตุผลที่จะปฏิเสธเวอร์ชันที่เปลี่ยนแปลง
ตัวตรวจสอบที่กำหนดค่าอย่างถูกต้องจะคำนวณใหม่หรือตรวจสอบผลลัพธ์การเข้ารหัสผ่านอินพุตการเซ็นชื่อที่เปลี่ยนแปลง และปฏิเสธรายการที่ไม่ตรงกัน การเปรียบเทียบนี้แสดงให้เห็นถึงขอบเขตที่ชัดเจน: ความสำเร็จของตัวถอดรหัสครอบคลุมไวยากรณ์ ในขณะที่ความสำเร็จของตัวตรวจสอบสามารถสร้างความสมบูรณ์โดยสัมพันธ์กับคีย์ที่เชื่อถือได้และอัลกอริธึมที่ได้รับอนุญาตก่อนที่จะประเมินนโยบายการอ้างสิทธิ์
สิ่งนี้ไม่ครอบคลุม — ตัวถอดรหัส ToolAcre JWT จะไม่ตรวจสอบลายเซ็นโดยการออกแบบ ไม่มีอะไรพิสูจน์ได้ว่าโทเค็นนั้นเป็นของแท้
ToolAcre ไม่เคยตรวจสอบลายเซ็น เซ็กเมนต์ว่างจะได้รับคำเตือน การเข้ารหัสลายเซ็นที่มีรูปแบบไม่ถูกต้องได้รับอีกครั้ง และไบต์ที่วัดได้จะถูกรายงานว่ามีอยู่แต่ไม่ได้รับการตรวจสอบ ไม่มีสาขาใดที่สร้างคำตัดสินโทเค็นของแท้ การใช้งานไม่มีการได้มาซึ่งคีย์ที่ซ่อนอยู่หรือเส้นทางการดำเนินการอัลกอริทึม
แม้แต่การยืนยันด้วยการเข้ารหัสที่ประสบความสำเร็จก็ยังไม่อนุญาตให้ดำเนินการโดยอัตโนมัติ การบริการที่สิ้นเปลืองยังคงต้องมีการตรวจสอบจากผู้ออก ผู้ชม เวลา และการตรวจสอบเฉพาะแอปพลิเคชัน บทความนี้หยุดก่อนการกำหนดค่าไลบรารีเนื่องจากการสนับสนุนและค่าเริ่มต้นแตกต่างกันไป ปรึกษาผู้ตรวจสอบและเวอร์ชันที่บริการของคุณใช้
ประเด็นสำคัญ: ถอดรหัสเพื่อตรวจสอบ ตรวจสอบความน่าเชื่อถือ — ใช้ตัวถอดรหัส ToolAcre JWT สำหรับตัวแรกและไลบรารีฝั่งเซิร์ฟเวอร์ด้วยคีย์ที่ถูกต้องสำหรับตัวที่สอง
ถอดรหัสเพื่อตรวจสอบและตรวจสอบก่อนเชื่อถือ ใช้เครื่องมือเบราว์เซอร์สำหรับโทเค็นที่หมดอายุหรือโทเค็นสังเคราะห์ เมื่อคุณต้องการดูฟิลด์ส่วนหัว ค่าเพย์โหลด การแปลงเวลา และคำเตือนเชิงโครงสร้าง อย่าปล่อยให้เอาต์พุตที่อ่านได้ไหลเข้าสู่การตัดสินใจในการเข้าถึงโดยตรง
ย้ายงานที่เป็นผลสืบเนื่องไปยังผู้ตรวจสอบที่เชื่อถือได้พร้อมเนื้อหาหลักที่จัดหาโดยอิสระ อัลกอริธึมที่ปักหมุดไว้ และนโยบายการบริการ เฉพาะเส้นทางนั้นเท่านั้นที่สามารถทดสอบความถูกต้องและความสมบูรณ์ได้ และเฉพาะการตรวจสอบการอ้างสิทธิ์ในภายหลังเท่านั้นที่สามารถตัดสินการอนุญาตได้ การที่ตัวถอดรหัสปฏิเสธที่จะเบลองานเหล่านั้นถือเป็นคุณสมบัติด้านความปลอดภัย