ไม่มีการอัปโหลด, 100% ในเครื่อง, ไม่มีบัญชี

บทความ

เข้ารหัสและถอดรหัสข้อมูลอย่างเป็นส่วนตัว

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

Base64: ดูยุ่งเหยิงแต่ไม่ใช่ความลับ

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

Hello! ถูกเข้ารหัสเป็น SGVsbG8h แล้วถอดรหัสกลับ แสดงให้เห็นว่า Base64 สามารถถูกถอดกลับได้โดยใครก็ตามโดยไม่ต้องใช้กุญแจ

การเข้ารหัส URL: สตริงคำค้นพกพาสิ่งต่าง ๆ มากกว่าที่คุณคิด

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

JWT: เพย์โหลดถูกลงนาม ไม่ได้ถูกซ่อน

JSON Web Token ประกอบด้วยสามส่วน Base64url เชื่อมกันด้วยจุด ได้แก่ ส่วนหัว เพย์โหลด และลายเซ็น ลายเซ็นพิสูจน์ว่าโทเคนไม่ถูกแก้ไข แต่ไม่ได้ทำสิ่งใดเพื่อซ่อนเพย์โหลด ซึ่งถอดรหัสออกมาเป็น JSON ที่อ่านได้และมีตัวระบุผู้ใช้ บทบาท เวลาหมดอายุ และการอ้างสิทธิ์ที่กำหนดเองใด ๆ ที่ผู้ออกเพิ่มเข้ามา โทเคนที่ใช้ได้ยังเป็นข้อมูลรับรองที่มีชีวิต จนกว่าจะหมดอายุ ใครก็ตามที่ถือมันสามารถทำหน้าที่แทนผู้ใช้ได้ การวางโทเคนที่ใช้งานได้ลงในตัวถอดรหัสออนไลน์คือการส่งข้อมูลรับรองที่ยังใช้งานได้ไปยังเซิร์ฟเวอร์ที่คุณไม่ได้ควบคุม ส่วนตัวถอดรหัสที่แยกวิเคราะห์โทเคนในเบราว์เซอร์ของคุณจะเปิดเผยส่วนหัวและเพย์โหลดเดียวกันโดยที่โทเคนนั้นไม่เคยออกจากหน้าเลย

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

การแฮช: อินพุตสำคัญกว่าค่าสรุป

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

การเข้ารหัส Base64: การแมปไบต์และ padding

Base64 แปล 8-bit bytes เป็นอักขระ 6 บิตโดยจัดกลุ่ม input bytes สามตัว (24 บิต) เป็นค่า 6 บิตสี่ค่า แต่ละค่า 6 บิตแมปกับอักขระในตัวอักษร Base64 (A-Z, a-z, 0-9, +, /) เนื่องจากกระบวนการนี้ต้องการ input ที่หารด้วย 24 บิตลงตัว input ที่สั้นจะถูกเติม padding: byte ที่เหลือหนึ่งตัวสร้างอักขระ padding สองตัว (==) สอง byte ที่เหลือสร้างหนึ่งตัว (=) ตัวแปร Base64url ที่ใช้ใน JSON Web Tokens (JWTs) แทนที่ + ด้วย - และ / ด้วย _ เพื่อทำให้สตริงปลอดภัยสำหรับ URL และตัด padding = ออกทั้งหมด เนื่องจากอักขระ padding อาจทำให้เกิดข้อผิดพลาดใน URI parsers ที่เข้มงวด การรู้จักความแตกต่างนี้มีประโยชน์เมื่อ debug การจัดการ token: JWT ที่ดูผิดรูปแบบอาจเพียงแค่เข้ารหัสด้วย Base64url แทน Base64 มาตรฐาน

ลายเซ็น JWT: HS256, RS256 และความสับสนของอัลกอริทึม

ความปลอดภัยของ JSON Web Token ขึ้นอยู่กับลายเซ็น ซึ่งเป็นส่วนที่สามที่คั่นด้วยจุด ด้วย HS256 (HMAC-SHA256) เซิร์ฟเวอร์ลงนาม header และ payload ที่เข้ารหัสด้วย Base64url โดยใช้ secret key ฟังก์ชัน hash SHA-256 มีความต้านทานต่อ collision: การสร้าง payload ที่แก้ไขแล้วซึ่ง hash เป็นลายเซ็นเดิมโดยไม่รู้ secret key นั้นคำนวณไม่ได้ในทางปฏิบัติ ด้วย RS256 เซิร์ฟเวอร์ลงนามด้วย RSA private key และตรวจสอบด้วย public key ช่องโหว่ที่รู้จักกันในชื่อ algorithm confusion เกิดขึ้นเมื่อ server library ไม่บังคับประเภทอัลกอริทึมที่คาดหวังอย่างเข้มงวด ผู้โจมตีสามารถเปลี่ยนฟิลด์ alg ใน token header จาก RS256 เป็น HS256 และลงนาม token โดยใช้ public key ของเซิร์ฟเวอร์เป็น HMAC secret เนื่องจาก public keys มักเข้าถึงได้ การถอดรหัส JWT header ในเบราว์เซอร์ช่วยให้ตรวจสอบอัลกอริทึมที่ระบุจริงได้ โดยไม่เปิดเผย token ที่ใช้งานอยู่ต่อระบบ logging ของบุคคลที่สาม

เครื่องมือที่กล่าวถึงในบทความนี้

คำถามที่พบบ่อย

Base64 หรือการเข้ารหัส URL เป็นรูปแบบหนึ่งของความปลอดภัยหรือไม่

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

ทำไมจึงสำคัญว่าฉันถอดรหัสโทเคนหรือแฮชรหัสผ่านที่ไหน

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