ฉันชอบวิธีแรกโดยทั่วไป
- ง่ายต่อการเข้าใจและนำไปใช้
- มันปลอดภัย (สำหรับความรู้ของฉัน)
- มันเป็นวิธีการที่ไม่แปลกที่ฉันเคยเห็นมาแล้วในอดีต
สิ่งหนึ่งที่ฉันไม่เห็นพูดถึงเกี่ยวกับครั้งแรกที่คุณควรจำไว้เวลาที่ใช้ในการแฮ็กโทเค็นต้องมีการหมดอายุ TTL ที่สั้นมาก (เช่น 1 วินาที) ดังนั้นคุณยืนยันว่าข้อความไม่ได้ถูกส่งด้วย เวลาและโทเค็นเดียวกันจากข้อความก่อนหน้านี้ 12 ชั่วโมง เห็นได้ชัดว่ามันจะคำนวณเป็น legit แต่ไม่ได้อยู่ในกรณีนี้
หากสิ่งเหล่านี้เป็นเพียงสองตัวเลือกที่คุณกำลังพิจารณาแม้ว่าฉันแค่ต้องการให้แน่ใจว่าคุณได้ดูวิธีการอื่นเช่นกันเนื่องจากมีหลายวิธี มากกว่าที่ฉันจะแสดงรายการในความเป็นจริง นี่เป็นวิธีการตรวจสอบสิทธิ์ทั่วไปที่ควรค่าแก่การศึกษาเพื่อดูว่ามันเหมาะสมกับจุดประสงค์ของคุณหรือไม่และหากไม่มีสิ่งใดที่เข้าใจพวกเขาอาจให้แนวคิดบางอย่างเพื่อช่วยให้กระชับขึ้น
โปรดทราบว่าฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัย
OAuth / สหพันธ์
ในวิธีการนี้คุณมีผู้ค้ำประกันบุคคลที่ 3 ซึ่งรหัสการบริโภคร้องขอโทเค็น / ใบรับรอง / สิ่งที่คุณได้รับจากพวกเขาและส่งให้คุณ ณ จุดนี้สิ่งที่คุณต้องทำคือถามบุคคลที่สามว่าคุณได้รับกุญแจหรือไม่ ถูกต้องตามกฎหมาย
มือโปร:
- ตามมาตรฐาน
- ผู้อื่นจะพบปัญหาในระบบของผู้อื่นดังนั้นคุณจะพบว่ามีความไม่มั่นคงเกิดขึ้นหรือไม่
- คุณต้องการการรับรองความถูกต้องน้อยกว่ามาก
Con:
- คุณต้องจัดการกับผู้ให้บริการบุคคลที่สามและ API หรือสร้างและโฮสต์ "บุคคลที่สาม" ของคุณเองเพื่อแยกการรับรองความถูกต้องออกจากบริการหลักของคุณ
- สำหรับบริการที่มากเกินไป แต่แนวคิดในการพิจารณาคุ้มค่า
ใบรับรองแบบอะซิงโครนัส
ที่นี่คุณจะให้ลูกค้าเข้ารหัสการสื่อสารกับใบรับรองสาธารณะที่คุณแบ่งปันกับพวกเขาเมื่อพวกเขาสร้างผู้ใช้ ในด้านของคุณคุณจะถอดรหัสโดยใช้กุญแจส่วนตัวที่เกี่ยวข้องกับผู้ใช้ที่นั่น โดยทั่วไปแล้วคุณจะเริ่มต้นการสื่อสารด้วยการตอบสนองต่อความท้าทายเพื่อแสดงว่าพวกเขาสามารถเข้ารหัส / ถอดรหัสตามที่คุณคาดหวังว่าพวกเขาเป็นใคร แม้ว่าแนวทาง "แบบซิงโครนัส" เป็นไปได้ แต่ไม่ได้ใช้การตอบสนองต่อความท้าทาย แต่ก็มีความปลอดภัยน้อยลงเล็กน้อย
จากNovell (ใช่ฉันรู้แล้วnovellจริงเหรอ?)
โทเค็นใช้ตัวแปรเป็นพื้นฐานในการสร้างรหัสผ่านครั้งเดียว ตัวแปรนี้เรียกว่าการท้าทาย สองวิธีหลักในการพิจารณาตัวแปรที่ใช้ในการสร้างรหัสผ่านนั้นไม่ตรงกันหรือแบบซิงโครนัส
ด้วยวิธีการแบบอะซิงโครนัสหรือการตอบสนองต่อความท้าทายซอฟต์แวร์เซิร์ฟเวอร์จะส่งโทเค็นการท้าทายภายนอก --- ตัวแปรที่สร้างแบบสุ่ม - เพื่อให้อุปกรณ์โทเค็นเข้ารหัส โทเค็นใช้ตัวแปรท้าทายนี้อัลกอริทึมการเข้ารหัสและความลับที่ใช้ร่วมกันเพื่อสร้างการตอบสนอง --- รหัสผ่านที่เข้ารหัสอย่างถูกต้อง
ด้วยวิธีการซิงโครนัสตัวแปรท้าทายที่ใช้ในการสร้างรหัสผ่านจะถูกกำหนดภายในโดยโทเค็นและเซิร์ฟเวอร์ ตัวนับเวลาตัวนับเหตุการณ์หรือการรวมเวลาและตัวนับเหตุการณ์ภายในอุปกรณ์แต่ละเครื่องจะใช้เป็นพื้นฐานสำหรับตัวแปรความท้าทาย เนื่องจากโทเค็นและเซิร์ฟเวอร์แต่ละตัวแยกจากกันและภายในกำหนดตัวแปรท้าทายจากตัวนับของตนเองมันจึงเป็นสิ่งสำคัญมากสำหรับตัวนับเวลาและตัวนับเหตุการณ์เพื่อให้ซิงโครไนซ์อยู่ เนื่องจากเป็นเรื่องง่ายสำหรับเซิร์ฟเวอร์และโทเค็นที่จะไม่ซิงค์การใช้งานส่วนใหญ่อนุญาตให้มีการดริฟท์จำนวนหนึ่งระหว่างตัวนับ โดยปกติช่วงหรือหน้าต่างเล็ก ๆ ของค่าตัวนับเหล่านี้จะใช้ในการคำนวณรหัสผ่าน อย่างไรก็ตามหากโทเค็นและเซิร์ฟเวอร์ไม่ซิงค์กันนอกหน้าต่างนี้
มือโปร:
- ใบรับรองมีรากฐาน CA ซึ่งทำให้พวกเขาเชื่อถือได้และยากที่จะปลอมแปลง
- มีสิ่งอำนวยความสะดวกมาตรฐานในระบบปฏิบัติการสำหรับการจัดการและบำรุงรักษาร้านค้าใบรับรองได้อย่างง่ายดาย
- วิธีการศึกษาที่ดีข้อมูลมากมายที่มีอยู่
- หมดอายุพร้อมกับสิ่งอื่น ๆ อีกมากมายเป็นสิ่งอำนวยความสะดวกที่สร้างขึ้นในใบรับรองมาตรฐานพวกเขามักจะแข็งแกร่ง
Con:
- ใบรับรองอาจเป็นเรื่องยุ่งยากในการทำงานกับโปรแกรม
- ขึ้นอยู่กับว่าคุณต้องการ CA ภายนอกหรือไม่อาจไม่ฟรี
- อาจต้องบำรุงรักษาที่จัดเก็บใบรับรองด้วยตนเองเพื่อให้แน่ใจว่ามีการกำหนดค่าความน่าเชื่อถือของรูทไว้
NTLM
อย่าหัวเราะถ้านี่เป็นบริการเล็ก ๆ หรือภายในเท่านั้นและคุณอยู่ในสภาพแวดล้อมของ Windows ไม่มีอะไรผิดปกติกับการใช้การรับรองความถูกต้อง NTLM มาตรฐานเพื่อรับประกันการเข้าถึง โดยเฉพาะอย่างยิ่งถ้าคุณทำงานกับ IIS นี่เป็นวิธีที่ง่ายที่สุด ง่ายต่อการบำรุงรักษาและกำหนดค่าเช่นกันใน web.config
มือโปร:
- ง่ายต่อการกำหนดค่าใช้งานและบำรุงรักษา
Con:
- การทำงานร่วมกันน้อยที่สุด
- ไม่เพียงพอสำหรับการพิสูจน์ตัวตนแบบสาธารณะ
ขณะปัจจุบัน
เมื่อทำงานกับ nonces ในแนวทางการพิสูจน์ตัวตนของคุณคุณจัดหาวิธีการรับ nonce บนบริการ เมธอดนี้ส่งคืนสตริงหรือชิ้นส่วนของข้อมูลโดยพลการ ("nonce") ในแต่ละคำขอ ทุกการร้องขอไปยังเมธอดอื่นต้องการการดึงข้อมูล nonce และใช้ในอัลกอริทึม crypto สำหรับการร้องขอ ค่าที่นี่คือเซิร์ฟเวอร์ติดตามการใช้ nonces และไม่อนุญาตให้นำกลับมาใช้ nonce อีกครั้งนี่เป็นการป้องกันการโจมตีซ้ำอย่างสมบูรณ์เนื่องจากเมื่อมีการร้องขอที่มีหนึ่ง nonce คำร้องขอที่มี nonce จะไม่สามารถทำได้อีกครั้ง เมื่อมีการร้องขอให้เพิ่มแนวนอนพวกมันจะถูกเพิ่มไปยังรายการของช่องว่างที่มีอยู่เนื่องจากมีการใช้แนวนอนพวกเขากำลังย้ายจากรายการที่มีอยู่ไปยังรายการที่ใช้
มือโปร:
- เล่นซ้ำการโจมตีค่อนข้างดี
- ไม่ยากที่จะนำไปปฏิบัติหรือเข้าใจโดยสิ้นเชิง
Con:
- ลูกค้าต้องทำการร้องขอสองครั้งสำหรับแต่ละคำขอ (แต่อาจลดลงได้โดยกำหนดให้มีการส่งข้อความร้องขอบางอย่างเท่านั้น)
- ต้องมีการจัดการของ nonces ซึ่งควรจะทำธุรกรรม
- ส่งผลกระทบในทางลบต่อประสิทธิภาพโดยกำหนดให้มีการร้องขอเพิ่มเติมสำหรับการทำให้เป็นโมฆะ (ความสามารถในการทำธุรกรรมช่วยเพิ่มต้นทุนทรัพยากรในการทำงานกับ nonces)