เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · ตัวถอดรหัส JWT
JWE อธิบาย: เหตุใด JWT ที่เข้ารหัสจึงมีห้าส่วนและไม่มีเพย์โหลดที่สามารถอ่านได้
· พื้นหลัง
jwt การเข้ารหัส ข้อมูลรูปแบบ
โทเค็นบางตัวมีจุดสี่จุดแทนที่จะเป็นสองจุดและมีเพย์โหลดที่ไม่ใช่ JSON โพสต์นี้จะอธิบาย JWE การทำให้เป็นอนุกรมแบบกะทัดรัด สิ่งที่แต่ละส่วนในห้าส่วนมีอยู่ และเหตุใดจึงไม่มีเครื่องมือถอดรหัสอย่างเดียวใดที่สามารถแสดงการอ้างสิทธิ์ได้
สี่จุดและเพย์โหลดที่ไม่ใช่ JSON — สัญญาณที่คุณถือ JWE ไม่ใช่ JWS
จุดสี่จุดและห้าส่วนบ่งบอกถึงซองจดหมายขนาดกะทัดรัดที่แตกต่างจากแบบฟอร์มลงนามสามส่วนที่คุ้นเคย การพยายามแยกวิเคราะห์ไบต์กลางเนื่องจากการอ้างสิทธิ์ JWT ก่อให้เกิดเรื่องไร้สาระเนื่องจากเนื้อหาเป็นไซเฟอร์เท็กซ์ ไม่ใช่การสะกด base64url ของข้อความธรรมดา JSON
ToolAcre ตรวจสอบจำนวนส่วนก่อนถอดรหัส ห้าส่วนทำให้เกิดข้อความ INVALID_JWT ที่ระบุ JWE และอธิบายว่าเหตุใดจึงไม่มีสิ่งใดสำหรับเส้นทางแบบถอดรหัสเท่านั้นที่จะแสดงโดยไม่มีคีย์ถอดรหัส นั่นเป็นขอบเขตที่ชัดเจนมากกว่าความล้มเหลวในการแยกวิเคราะห์ที่คลุมเครือ
ห้าส่วน ได้แก่ ส่วนหัวที่ได้รับการป้องกัน คีย์เข้ารหัส เวกเตอร์การเริ่มต้น ข้อความไซเฟอร์เท็กซ์ และแท็กการตรวจสอบสิทธิ์
ส่วน JWE ขนาดกะทัดรัดแสดงถึงส่วนหัวที่ได้รับการป้องกัน วัสดุคีย์ที่เข้ารหัส ค่าเริ่มต้น ข้อความไซเฟอร์เท็กซ์ และแท็กการตรวจสอบสิทธิ์ แต่ละคนมีบทบาทในการเข้ารหัสที่แตกต่างกัน ตำแหน่งเซ็กเมนต์เพียงอย่างเดียวไม่ได้ทำให้ฟิลด์ที่สองหรือสี่เป็นเพย์โหลด JWT ที่อ่านได้
ตัวถอดรหัสสามารถแยกและถอดรหัส base64url บางไบต์ได้ แต่ไบต์ดิบไม่ใช่การถอดรหัส การแสดงเป็นข้อความจะสร้างอักขระทดแทนหรือส่วนที่ทำให้เข้าใจผิด การดำเนินการที่ถูกต้องคือการระบุซองจดหมายและย้ายไปยังการใช้งานของผู้รับที่ได้รับอนุญาต
alg และ enc — การจัดการคีย์เทียบกับการเข้ารหัสเนื้อหา และเหตุใดส่วนหัว JWE จึงตั้งชื่ออัลกอริทึมสองตัว
ส่วนหัว JWE สามารถประกอบด้วย `alg` สำหรับการจัดการคีย์ และ `enc` สำหรับการเข้ารหัสเนื้อหา ป้ายกำกับเหล่านี้อธิบายการดำเนินการที่แตกต่างกัน เช่นเดียวกับโทเค็นที่ลงนาม ค่าส่วนหัวคืออินพุตที่ต้องตรงกับนโยบายของผู้รับ แทนที่จะอนุญาตให้โทเค็นเลือกอัลกอริทึมที่กำหนดเอง
บันทึกอัลกอริทึมสามส่วนของ ToolAcre ไม่ได้ใช้การประมวลผล JWE และสาขาห้าส่วนจะออกก่อนที่จะแยกวิเคราะห์ส่วนหัว หน้านี้จึงไม่แสดงหรือรับรองอัลกอริธึมการเข้ารหัสโดยเฉพาะ ปรึกษาห้องสมุดผู้รับและสัญญาผู้ออกสำหรับตัวเลือกที่รองรับ
คีย์การเข้ารหัสเนื้อหา — วิธีที่คีย์สุ่มปกป้องเพย์โหลดและห่อหุ้มไว้สำหรับผู้รับ
การเข้ารหัสเนื้อหาโดยทั่วไปจะใช้คีย์การเข้ารหัสเนื้อหาที่สร้างขึ้น ในขณะที่ส่วนของคีย์ที่เข้ารหัสจะถ่ายทอดหรือได้รับคีย์นั้นภายใต้การจัดเตรียมของผู้รับ การแยกช่วยให้สามารถป้องกันเพย์โหลดไบต์ด้วยการเข้ารหัสเนื้อหา ในขณะที่นโยบายการจัดการคีย์จะกำหนดว่าใครสามารถกู้คืนคีย์ได้
โมเดลเชิงแนวคิดนี้อธิบายว่าทำไมการมีสตริงขนาดกะทัดรัดจึงไม่เพียงพอสำหรับการกู้คืนข้อความธรรมดา ข้อมูลลับและนโยบายของผู้รับที่จำเป็นไม่ได้เข้ารหัสเป็นคำแนะนำที่ใช้งานได้อย่างอิสระ ตัวถอดรหัสสาธารณะไม่สามารถประดิษฐ์มันขึ้นมาได้ และไม่ควรขอให้ผู้ใช้วางคีย์ถอดรหัสส่วนตัวลงในหน้าทั่วไป
เมื่อผู้ออกเลือก JWE — การเรียกร้องที่ต้องเป็นความลับจากลูกค้าหรือจากคนกลาง
ผู้ออกอาจเลือกการเข้ารหัสเมื่อการเรียกร้องต้องเก็บเป็นความลับจากผู้ถือหรือคนกลางที่สามารถดูโทเค็นที่ลงนามได้ การจะเป็นตัวเลือกที่เหมาะสมหรือไม่นั้นขึ้นอยู่กับโมเดลภัยคุกคาม การกระจายคีย์ และข้อกำหนดในการปฏิบัติงาน การลดเนื้อหาการอ้างสิทธิ์ให้เหลือน้อยที่สุดยังดีกว่าการเข้ารหัสข้อมูลที่ไม่จำเป็น
การเข้ารหัสไม่ได้ขจัดข้อกังวลเรื่องการอนุญาต การตรวจสอบ หรือข้อมูลเมตา ผู้รับจะต้องตรวจสอบเนื้อหาที่มีการป้องกันและใช้นโยบายโทเค็นหลังจากการถอดรหัส ผลลัพธ์ที่อ่านได้ซึ่งได้รับจากผู้รับที่ได้รับอนุญาตนั้นไม่สามารถยอมรับได้โดยอัตโนมัติสำหรับทุกบริการ
เหตุใดการถอดรหัสจึงหยุดที่ส่วนหัว - เพย์โหลดเป็นไซเฟอร์เท็กซ์ ดังนั้นเฉพาะผู้ถือคีย์เท่านั้นที่สามารถอ่านได้
การถอดรหัสหยุดที่โครงสร้างเนื่องจากส่วนของเพย์โหลดจะเป็นไซเฟอร์เท็กซ์ ToolAcre จงใจหลีกเลี่ยงการนำเสนอไบนารี่ตามอำเภอใจเป็น JSON และส่งข้อความเฉพาะแทน สิ่งนี้จะป้องกันไม่ให้ผู้ใช้ตีความคำพูดที่ไม่มีความหมายว่าเป็นความเสียหายในซองจดหมายที่เข้ารหัสที่ถูกต้อง
หากคุณเป็นผู้รับ ให้ใช้ซอฟต์แวร์ควบคุมที่กำหนดค่าด้วยคีย์และอัลกอริธึมที่เหมาะสม หากคุณไม่เป็นเช่นนั้น เพย์โหลดที่อ่านไม่ได้จะเป็นคุณสมบัติด้านความปลอดภัยที่คาดหวัง ไม่มีเคล็ดลับการเติมหรือตัวถอดรหัสอักขระสำรองที่สามารถแทนที่การถอดรหัสได้
สิ่งนี้ไม่ครอบคลุมถึง - JWT ที่ซ้อนกันซึ่งลงนามแล้วเข้ารหัสและ JWE JSON การทำให้เป็นอนุกรม
โครงสร้างที่ซ้อนกันสามารถลงนามในเนื้อหาแล้วเข้ารหัสผลลัพธ์ หรือรวมเลเยอร์ภายใต้โปรไฟล์ที่กำหนด JWE ยังมีการนำเสนอนอกเหนือจากสตริงห้าส่วนที่กะทัดรัดอีกด้วย ToolAcre จะไม่ดำเนินการกับกรณีเหล่านั้น และบทความนี้ไม่ได้สรุปถึงการซ้อนจากป้ายกำกับส่วนหัวเท่านั้น
จัดทำเอกสารว่าระบบของคุณคาดหวังชั้นใดก่อนการแก้ไขปัญหา มิฉะนั้นทีมงานอาจพยายามตรวจสอบลายเซ็นบนไซเฟอร์เท็กซ์หรือถอดรหัสโทเค็นภายในที่ไม่ได้รับการรับรองความถูกต้อง ปล่อยให้ไลบรารี JOSE ที่เลือกจัดการการเรียงลำดับภายใต้นโยบายที่ชัดเจน
Takeaway: ตัวถอดรหัสสามารถแสดงเฉพาะสิ่งที่ไม่ได้เข้ารหัส — ตัวถอดรหัส ToolAcre JWT จะแสดงส่วนหัวและเพย์โหลดของโทเค็นที่เซ็นชื่อ เพย์โหลดของ JWE ไม่สามารถอ่านได้โดยการออกแบบ
ตัวถอดรหัสสามารถแสดงเฉพาะสิ่งที่ไม่ได้เข้ารหัสเท่านั้น ToolAcre อ่าน JSON จากส่วนหัวและเพย์โหลดของอินพุตที่มีลายเซ็นสามส่วน ในขณะที่ห้าส่วนทำให้เกิดการหยุดอธิบาย ความแตกต่างดังกล่าวจะป้องกันไม่ให้อินเทอร์เฟซแบบถอดรหัสอย่างเดียวแสร้งทำเป็นว่ามีความสามารถผู้รับ
ใช้การนับเซ็กเมนต์เป็นเบาะแสเส้นทาง ไม่ใช่ผลลัพธ์ที่น่าเชื่อถือ สามส่วนที่อ่านได้ยังคงต้องมีการตรวจสอบลายเซ็น ส่วนที่เข้ารหัสห้าส่วนที่ต้องมีการถอดรหัสและการตรวจสอบที่ได้รับอนุญาต ไม่ว่าในกรณีใด เอาต์พุตภาพเพียงอย่างเดียวจะตรวจสอบการอ้างสิทธิ์หรือให้สิทธิ์การเข้าถึง