Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

อัปเดตความปลอดภัยของบัญชี

คุณต้องการที่จะทิ้งค่าอินเทอร์เน็ตราคาแพงของคุณและใช้ wifi ที่ไม่ปลอดภัยของเพื่อนบ้านของคุณหรือไม่? สิ่งเดียวที่รั้งคุณไว้สำหรับขั้นตอนการตรวจสอบสิทธิ์ Single-factor ของ Honeybadger หรือไม่? ฉันมีข่าวมาบอกเธอไหม

ประกาศ:การตรวจสอบสิทธิ์แบบสองปัจจัย (2FA)

พูดเล่นๆ เราให้ความสำคัญกับความปลอดภัยเป็นอย่างมาก เรารู้สึกตื่นเต้นที่ได้มอบเครื่องมือสำคัญที่ช่วยให้ผู้ใช้และข้อมูลของพวกเขาปลอดภัยยิ่งขึ้น

ฉันคิดว่าฉันสามารถอธิบายวิธีเปิดใช้งาน 2FA ได้ แต่ความสนุกในนั้นคืออะไร ลองมาดูโลกแห่งการเข้ารหัสและค้นหาว่า 2FA ทำงานอย่างไร

ถ้าไม่ใช่เรื่องสนุก คุณสามารถไปที่ How to enable ได้เลย ความรู้สึกของฉันจะไม่ถูกทำร้าย

⚠️ คำเตือน:ทฤษฎีบางส่วนด้านล่าง

การใช้งาน 2FA จำนวนมากสร้างขึ้นจากอัลกอริทึมที่เรียกว่า รหัสผ่านแบบใช้ครั้งเดียวตามเวลา (TOTP ). กลิ้งออกจากลิ้นได้เลย

ครั้งเดียว?

ใช่ ความสวยงามของวิธีนี้คือการที่คุณไม่ได้ส่ง "รหัสผ่าน" เดียวกันทุกครั้งที่คุณเข้าสู่ระบบ การใช้แอปพลิเคชันตรวจสอบความถูกต้อง "รหัสผ่าน" แบบใช้ครั้งเดียวจะถูกสร้างขึ้นและยังคงใช้ได้ในช่วงเวลาสั้นๆ (ปกติคือ 30 วินาที) ซึ่งลดประสิทธิภาพของการโจมตีแบบ malcolm-in-the-middle ลงอย่างมาก

แม้ว่าจะมีบิตที่ซับซ้อนอยู่บ้าง แต่การใช้งานโดยรวมก็ค่อนข้างง่าย

ความลับ

กุญแจ ชี้ให้เข้าใจเกี่ยวกับ TOTP คือเซิร์ฟเวอร์ (ผู้ตรวจสอบ) และผู้ตรวจสอบสิทธิ์ (ผู้พิสูจน์) ต้องมีความลับร่วมกัน นี่คือ ของจริง "รหัสผ่าน" แต่ถูกส่งเพียงครั้งเดียว (ฉันเดาว่านี่เป็นครั้งเดียวเช่นกัน)!

วิธีแนะนำในการใช้ความลับคือการใช้รหัส QR เมื่อคุณสแกนรหัส QR ลงในสมาร์ทโฟน ความลับจะถูกเข้ารหัสภายใน URI มาตรฐานที่มีลักษณะดังนี้:

otpauth://totp/Honeybadger.io:[email protected]?secret=base32-secret-key

การให้รหัส QR มีประโยชน์เล็กน้อย (แทนที่จะเปิดเผยความลับของข้อความธรรมดา):

  1. ใครมีเวลาพิมพ์รหัสอักขระ 32 ตัว
  2. แอปตรวจสอบความถูกต้องของคุณสามารถให้ป้ายกำกับที่เป็นประโยชน์สำหรับรหัสผ่านแบบใช้ครั้งเดียวของคุณได้ (อ้างอิงอีเมลและผู้ออกใน URI) สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณใช้ 2FA กับหลายบริการ
  3. ในที่สุดก็ ดี เหตุผลที่ต้องใช้รหัส QR!

มีพารามิเตอร์เพิ่มเติมบางส่วน (ส่วนใหญ่ละเว้น) สำหรับ otpauth แบบแผน ซึ่งคุณสามารถดูได้ที่นี่

MAC กับฉัน

เมื่อความลับได้รับการตกลงกับ 🤝 คุณจะถูกถาม (ในบางจุด) ให้ระบุรหัสผ่านแบบใช้ครั้งเดียว นี่คือสิ่งที่กลายเป็นจริง .

TOTP สร้างขึ้นจากอัลกอริทึมอื่นที่เรียกว่า รหัสผ่านแบบใช้ครั้งเดียวแบบใช้ HMAC (HOTP) ซึ่งอิงตาม รหัสตรวจสอบข้อความแบบแฮช (HMAC) . มันคือหัวหอมใหญ่เพียงอันเดียว

TOTP &ร้อนแรง โดยพื้นฐานแล้วเป็นรูปแบบต่างๆ ของข้อความที่ถูกแฮช HMAC เป็นที่ที่เวทมนตร์เกิดขึ้นจริงๆ HMAC สร้างไดเจสต์ซึ่งเป็นเอาต์พุตของการรันค่าบางอย่างผ่านอัลกอริธึมการแฮช มาดูการทำงานกับรหัสทับทิมกัน:

OpenSSL::HMAC.digest("SHA1", "my-secret-key", "the-earth-is-flat")
=> "R\xABp\xCB\xEC\xFEJ\r#\x02\xC8\xAB\x96\xB68\v\xDA0\xD7z"

ว้าว ดูสตริงไบนารีนั่นสิ! นั่นคือ รหัสตรวจสอบข้อความ (MAC) .

เราเลือก SHA1 เป็นฟังก์ชันแฮชของเรา (เช่นเดียวกับการใช้งาน TOTP . ของเรา ). มีฟังก์ชันอื่นๆ ให้เลือกมากมาย โดยแต่ละฟังก์ชันมีความปลอดภัยและประสิทธิภาพการทำงานต่างกันไป สิ่งที่รุนแรงเกี่ยวกับอัลกอริธึมการแฮชคือสำหรับ อินพุตใดๆ เราจะได้ ผลลัพธ์เดียวกัน , ทุกเวลา! นอกจากนี้ยังจะผลิต แตกต่างและไม่เหมือนใครอย่างมากมาย เอาต์พุตจากการเปลี่ยนแปลงอินพุตที่ละเอียดอ่อน (อะแฮ่ม ขึ้นอยู่กับฟังก์ชันแฮช แต่ไม่ต้องกังวล เราไม่ได้กังวลอย่างมากกับการชนกันที่นี่)

โอเค เรียกว่า รหัสตรวจสอบข้อความ เพราะสามารถใช้พิสูจน์ได้ว่าข้อความที่ได้รับนั้นเป็นของแท้ ถ้าคุณและฉันรู้ความลับ (my-secret-key ) ฉันสามารถส่งข้อความ the-earth-is-flat พร้อมกับ MAC . สิ่งที่คุณต้องทำคือเรียกใช้ฟังก์ชันไดเจสต์ที่เหมือนกันทุกประการ โดยใช้อินพุตเดียวกัน และหาก MAC ตรงกัน แสดงว่าคุณได้ตรวจสอบข้อความแล้ว! คุณก็รู้ว่ามันไม่ได้ถูกดัดแปลงและมีเพียงมาจากฉันเท่านั้น!

😎

รหัสเวลา

ลองนำสิ่งนี้กลับไปที่ TOTP . ได้เวลาพูดถึง เวลา . คุณจะเห็นด้วย TOTP แทนที่จะแยกแยะข้อความไร้สาระเช่น the-earth-is-flat เราใช้การนับขั้นตอนเวลา (แปลงเป็นสตริง) เป็นอินพุตแทน หากคุณเปิดแอปเครื่องยืนยันตัวตน และคอยดูเมื่อมีการเปลี่ยนรหัส คุณอาจสังเกตเห็นรูปแบบ ใช่แล้ว พูดกับฉันว่า "พวกเขาเปิดนาทีครึ่งนาที" ดีมาก

ทำให้การคำนวณข้อความง่ายขึ้นเล็กน้อย ในกรณีนี้ เราใช้การนับแบบปัดเศษลง 30 วินาที (ขั้นตอนเวลา ) ตั้งแต่ต้นเวลา (ก็เวลา unix) ดังนั้นในทับทิมอีกครั้ง:

Time.now.to_i / 30
=> 51772900

อ่าฮะ! นั่นคือข้อความของเรา .

ดังนั้นในแอป Authenticator เราใช้ฟังก์ชันไดเจสต์ที่เชื่อถือได้เพื่อรับ HMAC . ใหม่ :

hmac = OpenSSL::HMAC.digest("SHA1", "avwe8aw71j2boib23jkbjk32", "51772900")
=> "H\x7F\xC1\xACL\xDA\xDB\xE7DQ\x91kE\x1C\xE3,c\nH\xA0"
get_otp_code(hmac)
=> "332204"

ขั้นตอนสุดท้ายคือการรับรหัสตัวเลขจากสตริงไบนารีนี้ เนื่องจากต้องมีการจัดการเล็กน้อย ฉันจะซ่อนอยู่หลัง get_otp_code ที่ไม่ระบุตัวตนของเรา ฟังก์ชันสำหรับตอนนี้ หากต้องการ คุณสามารถอ่านเกี่ยวกับวิธีการทำงานได้ใน HOTP Spec

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

นั่นคือสาระสำคัญของวิธีการรหัสผ่านแบบใช้ครั้งเดียวตามเวลา งาน!! 🎉 โปรดส่งอีเมลขอบคุณหลังจากใช้ข้อมูลนี้เพื่อจัดงานเลี้ยงอาหารค่ำครั้งต่อไปของคุณ!

การนำไปใช้

แม้ว่าฉันคิดว่าสิ่งสำคัญคือต้องเข้าใจว่าสิ่งเหล่านี้ทำงานอย่างไร เราไม่แนะนำให้ทำอะไรก็ได้เป็นของตัวเอง ที่เกี่ยวข้องกับการเข้ารหัสลับ สิ่งที่ยอดเยี่ยมอย่างหนึ่งเกี่ยวกับระบบนิเวศของ Ruby / Rails คือคุณมักจะพบอัญมณี (บางครั้งมีมากมาย) เพื่อแก้ปัญหาของคุณ

เราใช้ devise ที่ Honeybadger และมีปลั๊กอินที่ยอดเยี่ยมที่เรียกว่า two_factor_authentication มีการใช้งาน 2FA สองสามแบบให้เลือก ดังนั้นนี่คือเหตุผลบางประการที่เราเลือกใช้สิ่งนี้:

  • การตั้งค่าอย่างง่าย (การย้ายข้อมูล การกำหนดค่าและตัวเริ่มต้นบางส่วน)
  • อนุญาตให้ป้อนรหัสแบบใช้ครั้งเดียวในหน้าของตัวเอง (หลังจากผู้ใช้/รหัสผ่านที่ถูกต้อง)
  • ค่าเริ่มต้นที่ยอมรับได้ แต่ง่ายต่อการแทนที่
  • นอกจากนี้ยังมีการตรวจสอบความพยายามในการเข้าสู่ระบบสูงสุด ซึ่งแนะนำโดยข้อมูลจำเพาะ

วิธีเปิดใช้งาน

การตั้งค่าทำได้ง่าย:ไปที่หน้าการตั้งค่าผู้ใช้> การตรวจสอบสิทธิ์ เลือก "ตั้งค่าการตรวจสอบสิทธิ์สองปัจจัย" และทำตามคำแนะนำเพื่อซิงค์ข้อมูลลับโดยใช้ Authy หรือ Google Authenticator (หรือ TOTP อื่น ๆ จริงๆ แอป)

อัปเดตความปลอดภัยของบัญชี

แค่นั้นแหละ! ครั้งต่อไปที่คุณเข้าสู่ระบบ เราจะแจ้งให้คุณใส่รหัสยืนยันตัวตนของคุณ กรอกรหัสและใช้งานได้อย่างสบายใจ 🧘

อัปเดตความปลอดภัยของบัญชี

ความปลอดภัยและความเรียบง่าย? จะดีกว่าไหม

สิ่งสุดท้าย:ตรวจสอบรหัสผ่าน Pwned

ฉันมีข้อมูลด่วนสำหรับผู้ที่เสนอรหัสผ่านที่ไม่รัดกุม เรายังรวมเข้ากับ devise-pwned_password gem จากนี้ไป เมื่อคุณดำเนินการใดๆ ที่ต้องใช้รหัสผ่าน เราจะตรวจสอบเพื่อให้แน่ใจว่ารหัสผ่านที่เสนอจะไม่แพร่หลายในการละเมิดข้อมูลที่ทราบ หากคุณกำลังเพิ่มรหัสผ่านใหม่ และไม่ผ่านการตรวจสอบ เราจะไม่อนุญาต

หากคุณยังไม่ได้ดำเนินการ เรายินดีเป็นอย่างยิ่ง แนะนำให้ใช้ตัวจัดการรหัสผ่าน (1Password ahem)

สิ่งที่น่าสนใจอีกอย่างหนึ่งของ Pwned Password คือวิธีที่รหัสผ่านของคุณยังคงปลอดภัยแม้ในขณะที่ตรวจสอบกับฐานข้อมูลจากบริการของบุคคลที่สาม เรียกว่า k-Anonymity และคุณสามารถดูภาพรวมได้ที่นี่

นั่นคือทั้งหมดที่เรามีในตอนนี้ จนกว่าจะถึงครั้งต่อไป! 👋