ฉันตระหนักดีว่าข้อมูลจำเพาะ OAuthไม่ได้ระบุอะไรเกี่ยวกับที่มาของ ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret หรือรหัสผู้ตรวจสอบ แต่ฉันสงสัยว่ามีแนวทางปฏิบัติที่ดีที่สุดในการสร้างโทเค็นที่ปลอดภัยอย่างมีนัยสำคัญหรือไม่ (โดยเฉพาะโทเค็น / การรวมความลับ)
อย่างที่ฉันเห็นมีหลายวิธีในการสร้างโทเค็น:
- เพียงใช้ไบต์สุ่มเก็บในฐานข้อมูลที่เกี่ยวข้องกับผู้บริโภค / ผู้ใช้
- แฮชข้อมูลเฉพาะของผู้ใช้ / ผู้บริโภคจัดเก็บในฐานข้อมูลที่เกี่ยวข้องกับผู้บริโภค / ผู้ใช้
- เข้ารหัสข้อมูลเฉพาะผู้ใช้ / ผู้บริโภค
ข้อดีของ (1) คือฐานข้อมูลเป็นแหล่งข้อมูลเดียวที่ดูเหมือนปลอดภัยที่สุด มันจะยากกว่าที่จะโจมตีมากกว่า (2) หรือ (3)
การแฮ็กข้อมูลจริง (2) จะช่วยให้สามารถสร้างโทเค็นขึ้นมาใหม่จากข้อมูลที่น่าจะเป็นที่รู้จักอยู่แล้ว อาจไม่ได้ให้ประโยชน์ใด ๆ กับ (1) เนื่องจากจะต้องจัดเก็บ / ค้นหาอยู่ดี CPU เข้มข้นมากกว่า (1)
การเข้ารหัสข้อมูลจริง (3) จะช่วยให้การถอดรหัสทราบข้อมูล สิ่งนี้จะต้องใช้พื้นที่จัดเก็บน้อยกว่าและอาจมีการค้นหาน้อยกว่า (1) & (2) แต่ก็มีความปลอดภัยน้อยเช่นกัน
มีแนวทาง / ข้อดี / ข้อเสียอื่นใดที่ควรพิจารณา?
แก้ไข:ข้อควรพิจารณาอีกประการหนึ่งคือต้องมีค่าสุ่มบางประเภทในโทเค็นเนื่องจากต้องมีความสามารถในการหมดอายุและออกโทเค็นใหม่อีกครั้งดังนั้นจึงต้องไม่เพียงประกอบด้วยข้อมูลจริงเท่านั้น
ติดตามคำถาม :
มีความยาวโทเค็นขั้นต่ำเพื่อให้มีความปลอดภัยในการเข้ารหัสอย่างมีนัยสำคัญหรือไม่? ตามที่ฉันเข้าใจแล้ว Token Secrets ที่ยาวขึ้นจะสร้างลายเซ็นที่ปลอดภัยมากขึ้น ความเข้าใจนี้ถูกต้องหรือไม่?
มีข้อดีในการใช้การเข้ารหัสที่เฉพาะเจาะจงจากมุมมองของการแฮชหรือไม่? ตัวอย่างเช่นฉันเห็น API จำนวนมากที่ใช้การเข้ารหัสฐานสิบหก (เช่นสตริง GUID) ในอัลกอริทึมการลงนาม OAuth โทเค็นจะใช้เป็นสตริง ด้วยสตริงฐานสิบหกชุดอักขระที่มีอยู่จะมีขนาดเล็กกว่ามาก (คาดเดาได้ง่ายกว่า) มากกว่าการเข้ารหัส Base64 สำหรับฉันแล้วดูเหมือนว่าสำหรับสองสตริงที่มีความยาวเท่ากันสตริงที่มีชุดอักขระที่ใหญ่กว่าจะมีการกระจายแฮชที่ดีกว่า / กว้างกว่า สำหรับฉันแล้วดูเหมือนว่ามันจะช่วยเพิ่มความปลอดภัย สมมติฐานนี้ถูกต้องหรือไม่?
ข้อมูลจำเพาะของ OAuth ยกปัญหานี้มากใน11.10 เอนโทรปีแห่งความลับ