ตามความคิดเห็นที่ฉันทำกับคำถาม:
สิ่งสำคัญอย่างหนึ่งที่ได้รับการขัดเกลาโดยเกือบทุกคน ... ปฏิกิริยาเริ่มต้นของฉันคล้ายกับ @Michael Brooks จนกระทั่งฉันตระหนักเช่น @stefanw ว่าปัญหาที่นี่เป็นข้อกำหนดที่ขาด แต่นี่คือสิ่งที่พวกเขาเป็น
แต่แล้วมันเกิดขึ้นกับฉันที่อาจไม่เป็นอย่างนั้น! จุดที่หายไปที่นี่คือมูลค่าที่ไม่ได้พูดของสินทรัพย์ของแอปพลิเคชัน เพียงแค่พูดสำหรับระบบที่มีค่าต่ำกลไกการพิสูจน์ตัวตนที่ปลอดภัยอย่างสมบูรณ์พร้อมกับกระบวนการทั้งหมดที่เกี่ยวข้องจะเกินกำลังและผิดตัวเลือกความปลอดภัยที่
เห็นได้ชัดว่าสำหรับธนาคารต้องมี "แนวปฏิบัติที่ดีที่สุด" และไม่มีทางที่จะละเมิด CWE-257 อย่างมีจริยธรรม แต่มันเป็นเรื่องง่ายที่จะนึกถึงระบบที่มีราคาต่ำซึ่งไม่คุ้มค่า (แต่ยังต้องใช้รหัสผ่านแบบง่าย)
สิ่งสำคัญที่ต้องจำไว้คือความเชี่ยวชาญด้านความปลอดภัยที่แท้จริงคือการหาข้อตกลงที่เหมาะสมไม่ใช่ในการใช้“ แนวทางปฏิบัติที่ดีที่สุด” ในเชิงรุกที่ทุกคนสามารถอ่านออนไลน์ได้
ดังนั้นฉันขอแนะนำวิธีแก้ไขปัญหาอื่น:
ขึ้นอยู่กับมูลค่าของระบบและเฉพาะในกรณีที่ระบบมีมูลค่าต่ำอย่างเหมาะสมโดยไม่มีสินทรัพย์ "แพง" (รวมถึงตัวตน) และมีข้อกำหนดทางธุรกิจที่ถูกต้องซึ่งทำให้กระบวนการเหมาะสม เป็นไปไม่ได้ (หรือยากพอ / แพง) และลูกค้าทราบถึงคำเตือนทั้งหมด ...
จากนั้นก็ควรที่จะอนุญาตการเข้ารหัสแบบย้อนกลับได้โดยไม่มีห่วงพิเศษที่จะกระโดดข้าม
ฉันหยุดพูดสั้น ๆ ว่าอย่าไปยุ่งกับการเข้ารหัสเลยเพราะมันง่ายมาก / ถูกที่จะติดตั้ง (แม้จะพิจารณาการจัดการกุญแจแบบผ่านได้) และมันก็ให้การป้องกันบางอย่าง (มากกว่าต้นทุนในการนำไปใช้) นอกจากนี้ยังควรพิจารณาถึงวิธีการให้รหัสผ่านดั้งเดิมแก่ผู้ใช้ไม่ว่าจะเป็นทางอีเมลการแสดงผลบนหน้าจอ ฯลฯ
เนื่องจากข้อสันนิษฐานในที่นี้คือมูลค่าของรหัสผ่านที่ถูกขโมย (แม้ในภาพรวม) ค่อนข้างต่ำ โซลูชันเหล่านี้สามารถใช้ได้จริง
เนื่องจากมีการอภิปรายที่มีชีวิตชีวาเกิดขึ้นจริง ๆ แล้วการสนทนาที่มีชีวิตชีวาอย่างมากในกระทู้และกระทู้แยกความคิดเห็นที่แตกต่างกันฉันจะเพิ่มการชี้แจงและตอบสนองต่อจุดที่ดีมากที่ได้รับการยกที่อื่นที่นี่
ในการเริ่มต้นฉันคิดว่าทุกคนที่นี่ชัดเจนว่าการอนุญาตให้ดึงรหัสผ่านดั้งเดิมของผู้ใช้คือการฝึกฝนที่ไม่ดีและโดยทั่วไปไม่ใช่แนวคิดที่ดี นั่นคือไม่ได้ทั้งหมดภายใต้ข้อพิพาท ...
นอกจากนี้ผมจะเน้นว่าในหลาย ๆ แต่ว่าที่สุดสถานการณ์ - มันผิดจริงๆแม้เหม็นน่ารังเกียจและน่าเกลียด
แต่ปมของคำถามที่เป็นรอบหลักการ , มีสถานการณ์ใดก็ตามที่มันอาจจะไม่จำเป็นที่จะห้ามนี้และหากดังนั้นวิธีที่จะทำเช่นนั้นในลักษณะที่เหมาะสมถูกต้องที่สุดกับสถานการณ์
ตอนนี้ในฐานะ @Thomas, @sfussenegger และอีกไม่กี่คนที่พูดถึงวิธีที่เหมาะสมในการตอบคำถามนั้นคือการทำการวิเคราะห์ความเสี่ยงอย่างละเอียดเกี่ยวกับสถานการณ์ (หรือสมมุติฐาน) เพื่อทำความเข้าใจว่าอะไรคือสิ่งที่เสี่ยง และสิ่งที่บรรเทาอื่น ๆ ในการเล่นเพื่อให้การป้องกันนั้น
ไม่มันไม่ใช่คำศัพท์นี่เป็นหนึ่งในเครื่องมือพื้นฐานที่สำคัญที่สุดสำหรับมืออาชีพด้านความปลอดภัยแบบเรียลไทม์ การปฏิบัติที่ดีที่สุดนั้นดีจนถึงจุดหนึ่ง (โดยปกติจะเป็นแนวทางสำหรับผู้ที่ไม่มีประสบการณ์และแฮ็ก) หลังจากนั้นการวิเคราะห์ความเสี่ยงที่คิดจะใช้เวลามากกว่า
Y'know เป็นเรื่องตลก - ฉันมักจะคิดว่าตัวเองเป็นหนึ่งในผู้คลั่งไคล้การรักษาความปลอดภัยและอย่างใดฉันอยู่ฝั่งตรงข้ามของสิ่งที่เรียกว่า "ผู้เชี่ยวชาญด้านความปลอดภัย" ... ความจริงก็คือ - เพราะฉันเป็นคนคลั่ง และผู้เชี่ยวชาญด้านความปลอดภัยในชีวิตจริง - ฉันไม่เชื่อในการพ่น "แนวปฏิบัติที่ดีที่สุด" dogma (หรือ CWEs) โดยไม่มีการวิเคราะห์ความเสี่ยงที่สำคัญทั้งหมด
"ระวังความปลอดภัยที่กระตือรือร้นที่จะใช้ทุกอย่างในเข็มขัดเครื่องมือโดยไม่ทราบว่าปัญหาที่แท้จริงคืออะไรพวกเขากำลังปกป้องความปลอดภัยที่เพิ่มขึ้นนั้นไม่จำเป็นต้องเท่ากับความปลอดภัยที่ดี"
การวิเคราะห์ความเสี่ยงและการรักษาความปลอดภัยที่แท้จริงจะชี้ให้เห็นถึงการแลกเปลี่ยนที่มีความคุ้มค่า / ความเสี่ยงอย่างชาญฉลาดขึ้นอยู่กับความเสี่ยงการสูญเสียที่อาจเกิดขึ้นภัยคุกคามที่อาจเป็นไปได้การบรรเทาความเดือดร้อนอื่น ๆ พื้นฐานสำหรับคำแนะนำของพวกเขาหรือสนับสนุนการแลกเปลี่ยนเชิงตรรกะ แต่แทนที่จะต้องการหัดพูดและ CWE โดยไม่แม้แต่จะเข้าใจวิธีการวิเคราะห์ความเสี่ยง แต่ไม่มีความปลอดภัยและความเชี่ยวชาญของพวกเขาไม่คุ้มกับกระดาษชำระที่พิมพ์
ที่จริงแล้วนั่นคือวิธีที่เราได้รับความไร้สาระที่ความปลอดภัยสนามบิน
แต่ก่อนที่เราจะพูดถึงการแลกเปลี่ยนที่เหมาะสมที่จะทำในสถานการณ์นี้เรามาดูความเสี่ยงที่ชัดเจน (ชัดเจนเพราะเราไม่มีข้อมูลพื้นฐานทั้งหมดเกี่ยวกับสถานการณ์นี้เราทุกคนตั้งสมมติฐาน - เนื่องจากคำถามคือสิ่งที่สมมุติฐาน อาจมีสถานการณ์ ... )
สมมติว่าเป็นระบบ LOW-VALUE แต่ก็ไม่ถึงกับเป็นแบบสาธารณะ - เจ้าของระบบต้องการป้องกันการแอบอ้างแบบไม่เป็นทางการ แต่ความปลอดภัย "สูง" นั้นไม่สำคัญเท่ากับการใช้งานง่าย (ใช่มันเป็นการแลกเปลี่ยนที่ถูกต้องตามกฎหมายที่จะยอมรับความเสี่ยงที่สคริปต์ตัวเล็ก ๆ ที่ชำนาญสามารถแฮ็คไซต์ ... รอไม่ได้เป็น APT ในสมัยนี้ ... ?)
ตัวอย่างเช่นสมมติว่าฉันกำลังจัดไซต์ง่าย ๆ สำหรับการสังสรรค์ในครอบครัวขนาดใหญ่ช่วยให้ทุกคนระดมสมองเกี่ยวกับสถานที่ที่เราต้องการไปเที่ยวแคมป์ปิ้งของเราในปีนี้ ฉันเป็นห่วงน้อยเกี่ยวกับแฮ็กเกอร์นิรนามหรือแม้แต่ลูกพี่ลูกน้องของเฟร็ดบีบคำแนะนำซ้ำ ๆ เพื่อกลับไปที่ทะเลสาบ Wantanamanabikiliki เนื่องจากฉันเป็นป้าของ Erma ไม่สามารถเข้าสู่ระบบได้เมื่อเธอต้องการ ตอนนี้ป้า Erma เป็นนักฟิสิกส์นิวเคลียร์ไม่จำรหัสผ่านได้ดีหรือแม้แต่กับการใช้คอมพิวเตอร์เลย ... ดังนั้นฉันต้องการกำจัดแรงเสียดทานที่อาจเกิดขึ้นกับเธอ อีกครั้งฉันไม่กังวลเกี่ยวกับแฮ็กฉันไม่ต้องการความผิดพลาดโง่ ๆ ของการเข้าสู่ระบบผิด - ฉันต้องการที่จะรู้ว่าใครกำลังจะมาและสิ่งที่พวกเขาต้องการ
อย่างไรก็ตาม.
ดังนั้นอะไรคือความเสี่ยงหลักของเราที่นี่ถ้าเราเข้ารหัสรหัสผ่านแบบสมมาตรแทนที่จะใช้แฮชแบบทางเดียว
- การแอบอ้างเป็นผู้ใช้? ไม่ฉันยอมรับความเสี่ยงนั้นแล้วไม่น่าสนใจ
- ผู้ดูแลระบบที่ชั่วร้าย? อาจจะ ... แต่อีกครั้งฉันไม่สนหรอกว่าใครบางคนสามารถแอบอ้างเป็นผู้ใช้รายอื่นได้ภายในหรือไม่ ... และผู้ดูแลระบบที่เป็นอันตรายก็จะได้รับรหัสผ่านของคุณไม่ว่าจะเกิดอะไรขึ้นถ้าผู้ดูแลระบบของคุณแย่
- ปัญหาอื่นที่ได้รับการยกขึ้นเป็นตัวตนที่ใช้ร่วมกันจริงระหว่างหลายระบบ อา! นี่เป็นความเสี่ยงที่น่าสนใจมากซึ่งต้องดูอย่างใกล้ชิด
ให้ฉันเริ่มต้นด้วยการยืนยันว่าไม่ใช่ตัวตนจริงที่ใช้ร่วมกันแทนที่จะพิสูจน์หรือรับรองความถูกต้อง ตกลงเนื่องจากรหัสผ่านที่ใช้ร่วมกันจะทำให้ฉันสามารถเข้าสู่ระบบอื่นได้อย่างมีประสิทธิภาพ (เช่นบัญชีธนาคารของฉันหรือ gmail) นี่คือรหัสประจำตัวเดียวกันที่มีประสิทธิภาพดังนั้นจึงเป็นเพียงความหมาย ... ยกเว้นว่ามันไม่ใช่มันไม่ได้Identity ได้รับการจัดการแยกจากกันโดยแต่ละระบบในสถานการณ์นี้ (แม้ว่าอาจจะมีระบบ ID ของบุคคลที่สามเช่น OAuth - ยังแยกจาก Identity ในระบบนี้ - เพิ่มเติมในภายหลัง)
ดังนั้นประเด็นหลักของความเสี่ยงที่นี่คือผู้ใช้จะต้องป้อนรหัสผ่าน (เดียวกัน) ของเขาลงในระบบที่แตกต่างกันอย่างเต็มใจและตอนนี้ฉัน (ผู้ดูแลระบบ) หรือแฮ็กเกอร์อื่น ๆ ในเว็บไซต์ของฉันจะสามารถเข้าถึงรหัสผ่านของ เว็บไซต์ขีปนาวุธนิวเคลียร์
อืมม
มีอะไรให้คุณดูบ้างไหม?
มันควรจะ.
เริ่มจากความจริงที่ว่าการปกป้องระบบขีปนาวุธนิวเคลียร์ไม่ใช่ความรับผิดชอบของฉันฉันแค่สร้างไซต์นอกครอบครัว frakkin (สำหรับครอบครัวของฉัน) ดังนั้นความรับผิดชอบของใคร อืม ... แล้วระบบขีปนาวุธนิวเคลียร์ล่ะ? ดุจ
ประการที่สองถ้าฉันต้องการขโมยรหัสผ่านของใครบางคน (คนที่รู้จักกันใช้รหัสผ่านซ้ำกันระหว่างเว็บไซต์ที่ปลอดภัยและที่ไม่ปลอดภัย) - ทำไมฉันต้องแฮ็คไซต์ของคุณ หรือดิ้นรนกับการเข้ารหัสแบบสมมาตรของคุณ? Goshdarnitall ฉันสามารถวางเว็บไซต์ง่ายๆของตัวเองได้ให้ผู้ใช้ลงทะเบียนเพื่อรับข่าวสำคัญมากเกี่ยวกับสิ่งที่พวกเขาต้องการ ... Puffo Presto ฉัน "ขโมย" รหัสผ่านของพวกเขา
ใช่การให้ความรู้แก่ผู้ใช้มักจะกลับมากัดเราใน hienie ใช่ไหม?
และไม่มีอะไรที่คุณสามารถทำได้เกี่ยวกับสิ่งนั้น ... แม้ว่าคุณจะแฮรหัสผ่านของพวกเขาในเว็บไซต์ของคุณและทำทุกอย่างอื่นที่ TSA สามารถคิดได้คุณเพิ่มการป้องกันรหัสผ่านของพวกเขาไม่ใช่ใครถ้าพวกเขาจะเก็บ ผงาดรหัสผ่านของพวกเขาในทุกเว็บไซต์ที่พวกเขาชน อย่าพยายามเลยแม้แต่น้อย
อีกวิธีหนึ่งคุณไม่ได้เป็นเจ้าของรหัสผ่านของคุณดังนั้นหยุดพยายามทำตัวเหมือนที่คุณทำ
ดังนั้นผู้เชี่ยวชาญด้านความปลอดภัยที่รักของฉันในฐานะหญิงชราเคยถามเวนดี้ว่า "ความเสี่ยงอยู่ที่ไหน?"
อีกสองสามข้อเพื่อตอบคำถามบางประเด็นที่กล่าวมาข้างต้น:
- CWE ไม่ใช่กฎหมายหรือข้อบังคับหรือแม้แต่มาตรฐาน มันคือชุดของจุดอ่อนที่พบบ่อยเช่นการผกผันของ "วิธีปฏิบัติที่ดีที่สุด"
- ปัญหาของข้อมูลประจำตัวที่ใช้ร่วมกันเป็นปัญหาที่แท้จริง แต่เข้าใจผิด (หรือบิดเบือนความจริง) โดยนักลงทุนที่นี่ มันเป็นปัญหาของการแบ่งปันตัวตนในและของตัวเอง (!) ไม่เกี่ยวกับการถอดรหัสรหัสผ่านในระบบที่มีค่าต่ำ หากคุณแชร์รหัสผ่านระหว่างระบบที่มีค่าต่ำและมีมูลค่าสูงปัญหาก็จะเกิดขึ้นแล้ว!
- โดยก่อนหน้านี้ประเด็นก่อนหน้านี้จะชี้ให้เห็นว่าขัดกับการใช้ OAuth และสิ่งที่เหมือนกันสำหรับทั้งระบบที่มีมูลค่าต่ำและระบบธนาคารที่มีมูลค่าสูง
- ฉันรู้ว่ามันเป็นเพียงตัวอย่าง แต่ (เศร้า) ระบบ FBI ไม่ได้ปลอดภัยที่สุด ไม่เหมือนเซิร์ฟเวอร์บล็อกของแมวของคุณ แต่ก็ไม่เหมือนธนาคารที่ปลอดภัยกว่าบางแห่ง
- การแยกความรู้หรือการควบคุมแบบคู่ของคีย์การเข้ารหัสไม่ได้เกิดขึ้นเฉพาะในทางทหารในความเป็นจริง PCI-DSS ต้องใช้สิ่งนี้จากทุกร้านค้าโดยทั่วไปดังนั้นจึงไม่ได้อยู่ที่นั่นอีกต่อไป
- สำหรับทุกคนที่บ่นว่าคำถามเหล่านี้เป็นสิ่งที่ทำให้นักพัฒนาซอฟต์แวร์ดูแย่มาก: มันเป็นคำตอบเหมือนที่ทำให้อาชีพความปลอดภัยดูแย่ลง อีกครั้งการวิเคราะห์ความเสี่ยงที่มุ่งเน้นธุรกิจเป็นสิ่งที่จำเป็นมิฉะนั้นคุณจะทำให้ตัวเองไร้ประโยชน์ นอกจากจะผิด
- ฉันเดาว่านี่เป็นสาเหตุที่ไม่ใช่ความคิดที่ดีที่จะเพียงแค่เป็นนักพัฒนาประจำและทิ้งความรับผิดชอบด้านความปลอดภัยเพิ่มเติมให้กับเขาโดยไม่ต้องฝึกอบรมให้คิดต่างไปจากเดิมและมองหาการแลกเปลี่ยนที่ถูกต้อง ไม่มีความผิดต่อพวกคุณที่นี่ฉันทำเพื่อคุณ - แต่มีการฝึกอบรมเพิ่มเติมตามลำดับ
ต๊าย มันยาวมาก ...
แต่เพื่อตอบคำถามเดิมของคุณ @Shane:
- อธิบายให้ลูกค้าฟังถึงวิธีที่เหมาะสมในการทำสิ่งต่างๆ
- หากเขายังคงยืนยันอธิบายเพิ่มเติมยืนยันยืนยัน โยนความโกรธเคืองถ้าจำเป็น
- อธิบายความเสี่ยงทางธุรกิจของเขา รายละเอียดดีมากตัวเลขดีกว่าการสาธิตสดมักจะดีที่สุด
- หากเขายังยืนยันและนำเสนอเหตุผลทางธุรกิจที่ถูกต้อง - ถึงเวลาที่คุณจะต้องใช้วิจารณญาณ:
ไซต์นี้มีความคุ้มค่าหรือไม่ มันเป็นกรณีธุรกิจที่ถูกต้องจริงเหรอ? ดีพอสำหรับคุณหรือไม่ ไม่มีความเสี่ยงอื่นที่คุณสามารถพิจารณาได้ซึ่งจะมีค่าเกินกว่าเหตุผลทางธุรกิจที่ถูกต้องหรือไม่? (และแน่นอนลูกค้าไม่ได้เป็นเว็บไซต์ที่เป็นอันตราย แต่นั่นคือ duh)
ถ้าเป็นเช่นนั้นเพียงแค่ไปข้างหน้า มันไม่คุ้มค่ากับความพยายามแรงเสียดทานและการสูญเสียการใช้งาน (ในสถานการณ์สมมุตินี้) เพื่อนำกระบวนการที่จำเป็นมาใช้ การตัดสินใจอื่น ๆ (ในสถานการณ์เช่นนี้อีกครั้ง) เป็นการแลกเปลี่ยนที่ไม่ดี
ดังนั้นบรรทัดล่างและคำตอบที่แท้จริง - เข้ารหัสด้วยอัลกอริธึมแบบสมมาตรอย่างง่ายปกป้องคีย์เข้ารหัสด้วย ACL ที่แข็งแกร่งและดีกว่า DPAPI หรือที่คล้ายกันจัดทำเอกสารและมีลูกค้า (คนที่อาวุโสพอที่จะทำการตัดสินใจ) ลงชื่อ มัน.