ฉันจะเข้าหาที่เก็บรหัสผ่านของผู้ใช้อย่างมีจริยธรรมเพื่อการดึงข้อความธรรมดาในภายหลังได้อย่างไร?


1344

เนื่องจากฉันยังคงสร้างเว็บไซต์และเว็บแอปพลิเคชั่นมากขึ้นเรื่อย ๆ ฉันมักถูกถามให้เก็บรหัสผ่านของผู้ใช้ในวิธีที่พวกเขาสามารถเรียกคืนได้หาก / เมื่อผู้ใช้มีปัญหา โทรศัพท์และอื่น ๆ ) เมื่อฉันสามารถต่อสู้กับการฝึกฝนนี้อย่างขมขื่นและฉันได้เขียนโปรแกรม 'พิเศษ' มากมายเพื่อให้สามารถรีเซ็ตรหัสผ่านและความช่วยเหลือด้านการดูแลระบบได้โดยไม่ต้องเก็บรหัสผ่านจริง

เมื่อฉันไม่สามารถต่อสู้ (หรือชนะไม่ได้) จากนั้นฉันก็เข้ารหัสรหัสผ่านด้วยวิธีใดวิธีหนึ่งเพื่อให้อย่างน้อยที่สุดจะไม่ถูกจัดเก็บเป็นข้อความธรรมดาในฐานข้อมูล - แม้ว่าฉันจะรู้ว่าถ้าฐานข้อมูลของฉันถูกแฮ็ก มันจะไม่ใช้เวลามากนักสำหรับผู้ร้ายที่จะถอดรหัสรหัสผ่านดังนั้นมันทำให้ฉันรู้สึกไม่สบายใจ

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

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

ข้อมูลเพิ่มเติมสำหรับเงินรางวัล

ฉันต้องการชี้แจงว่าฉันรู้ว่านี่ไม่ใช่สิ่งที่คุณต้องทำและในกรณีส่วนใหญ่การปฏิเสธที่จะทำดีที่สุด อย่างไรก็ตามฉันไม่ได้มองหาการบรรยายเกี่ยวกับข้อดีของการใช้วิธีการนี้ฉันกำลังมองหาขั้นตอนที่ดีที่สุดที่จะทำหากคุณใช้วิธีนี้

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

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

ขอบคุณทุกคน

นี่เป็นคำถามที่สนุกมากที่มีการถกเถียงกันมากมายและฉันก็สนุกกับมัน ในที่สุดฉันเลือกคำตอบที่รักษาความปลอดภัยของรหัสผ่านทั้งสอง (ฉันจะไม่ต้องเก็บข้อความธรรมดาหรือรหัสผ่านที่กู้คืนได้) แต่ยังทำให้เป็นไปได้สำหรับฐานผู้ใช้ที่ฉันระบุเพื่อเข้าสู่ระบบโดยไม่มีข้อบกพร่องหลัก ๆ การกู้คืนรหัสผ่านปกติ

เช่นเคยมีคำตอบประมาณ 5 ข้อที่ฉันต้องการทำเครื่องหมายว่าถูกต้องด้วยเหตุผลที่แตกต่างกัน แต่ฉันต้องเลือกคำตอบที่ดีที่สุด - ส่วนที่เหลือทั้งหมดได้รับ +1 ขอบคุณทุกคน!

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


155
ฉันคิดว่าเขารู้ว่ามันไม่ดี เขายังคงมองหาทางออกที่ดีที่สุดภายใต้ข้อกำหนดที่ระบุไว้
stefanw

33
ในตอนท้ายของวันสิ่งที่คุณจะทำคือการใช้ช่องโหว่ที่หลีกเลี่ยงได้อย่างระมัดระวัง
rook

20
@Michael Brooks - ฉันต้องการให้คุณรู้ว่าฉันเห็นด้วยอย่างยิ่งกับ CWE-257 และอยากจะบอกว่าทุกคำทุกครั้งที่ฉันถูกขอให้ทำรหัสผ่านเป็นข้อความธรรมดา อย่างไรก็ตามในความเป็นจริงลูกค้าและผู้ใช้ไม่ค่อยสนใจกฎระเบียบของ NIST และต้องการให้ฉันทำเช่นนั้น 90% ของเวลาที่ฉันสามารถโน้มน้าวให้พวกเขาเป็นอย่างอื่น แต่ใน 10% ของเวลาที่ฉันไม่สามารถกำหนดเส้นทางที่ดีที่สุดของการกระทำ - ในกรณีเหล่านั้น CWE-257 เป็นขี้เถ้าในมือของฉัน
เชน

81
@AviD: "ค่าต่ำ" ของระบบไม่มีปัญหาในเรื่องนี้เพราะผู้คนใช้รหัสผ่านซ้ำ ทำไมผู้คนถึงไม่เข้าใจความจริงง่ายๆนี้ หากคุณถอดรหัสรหัสผ่านในระบบ "ค่าต่ำ" บางอย่างคุณอาจจะมีรหัสผ่านที่ถูกต้องสำหรับระบบ "ค่าสูง" อื่น ๆ
Aaronaught

20
อีกประเด็นหนึ่งที่ได้รับการกลบเกลื่อนซึ่งฉันเพิ่งพูดถึงในความคิดเห็นของคำตอบของฉัน: คุณจะรู้ได้อย่างไรว่าคนที่ขอความต้องการเหล่านี้มีความน่าเชื่อถือ? จะเป็นอย่างไรถ้าข้อแก้ตัว "การใช้งาน" เป็นเพียงส่วนหนึ่งของการปกปิดความตั้งใจจริงที่จะขโมยรหัสผ่านในอนาคต ความไร้เดียงสาของคุณอาจมีค่าใช้จ่ายลูกค้าและผู้ถือหุ้นนับล้าน ผู้เชี่ยวชาญด้านความปลอดภัยต้องทำซ้ำหลายครั้งก่อนที่จะจมลงใน: ภัยคุกคามความปลอดภัยที่พบบ่อยที่สุดและร้ายแรงที่สุดนั้นมักจะเกิดขึ้นภายใน
Aaronaught

คำตอบ:


1037

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

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

วิธีหนึ่งในการแก้ไขปัญหานี้คือการให้รหัสผ่านที่สร้างขึ้นอัตโนมัติซึ่งเป็นข้อความภาษาธรรมชาติไม่มากก็น้อย แม้ว่าสตริงภาษาที่เป็นธรรมชาติอาจไม่มีเอนโทรปีที่สตริงของอักขระสุ่มที่มีความยาวเท่ากัน แต่ก็ไม่มีอะไรที่บอกว่ารหัสผ่านที่สร้างโดยอัตโนมัติของคุณต้องมีอักขระเพียง 8 (หรือ 10 หรือ 12) รับข้อความรหัสผ่านที่สร้างขึ้นโดยอัตโนมัติแบบเอนโทรปีโดยการรวมคำแบบสุ่มหลายคำเข้าด้วยกัน (เว้นช่องว่างระหว่างคำเหล่านั้นเพื่อให้พวกเขายังจำและพิมพ์ได้โดยทุกคนที่สามารถอ่านได้) คำที่มีความยาวต่างกันหกแบบอาจจะพิมพ์ได้อย่างถูกต้องและมีความมั่นใจมากกว่าตัวอักษรแบบสุ่ม 10 ตัวและพวกเขาก็สามารถมีเอนโทรปีที่สูงขึ้นได้เช่นกัน ตัวอย่างเช่นเอนโทรปีของรหัสผ่าน 10 ตัวอักษรที่สุ่มมาจากตัวพิมพ์ใหญ่ตัวพิมพ์เล็ก ตัวเลขและเครื่องหมายวรรคตอน 10 สัญลักษณ์ (สำหรับสัญลักษณ์ที่ใช้ได้ทั้งหมด 72 ข้อ) จะมีค่าเอนโทรปี 61.7 บิต การใช้พจนานุกรม 7776 คำ (ตามที่ Diceware ใช้) ซึ่งสามารถเลือกแบบสุ่มสำหรับวลีรหัสผ่านหกคำได้วลีรหัสผ่านจะมีค่าเอนโทรปีของ 77.4 บิต ดูคำถามที่พบบ่อย Dicewareสำหรับข้อมูลเพิ่มเติม

  • วลีรหัสผ่านที่มี 77 บิตของเอนโทรปี: "ยอมรับร้อยแก้วตารางเปลวไฟไหวพริบไหวพริบ"

  • รหัสผ่านที่มีเอนโทรปี 74 บิต: "K: & $ R ^ tt ~ qkD"

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

ฉันเข้าใจข้อโต้แย้งว่ามีสินทรัพย์ที่ป้องกันด้วยรหัสผ่านที่ไม่มีมูลค่าสูงจริง ๆ ดังนั้นการละเมิดรหัสผ่านอาจไม่ใช่จุดสิ้นสุดของโลก ตัวอย่างเช่นฉันอาจไม่สนใจว่า 80% ของรหัสผ่านที่ฉันใช้ในเว็บไซต์ต่างๆนั้นมีการละเมิด: สิ่งที่อาจเกิดขึ้นคือมีคนส่งสแปมหรือโพสต์ภายใต้ชื่อของฉันในขณะนั้น มันคงไม่ยอดเยี่ยมหรอก แต่มันไม่เหมือนที่พวกเขาเจาะเข้าไปในบัญชีธนาคารของฉัน อย่างไรก็ตามจากข้อเท็จจริงที่ว่าหลาย ๆ คนใช้รหัสผ่านเดียวกันสำหรับเว็บไซต์ฟอรัมของพวกเขาเหมือนกับที่ทำกับบัญชีธนาคารของพวกเขา (และอาจเป็นฐานข้อมูลความมั่นคงแห่งชาติ) ฉันคิดว่ามันจะดีที่สุดในการจัดการแม้รหัสผ่าน -recoverable


93
+1 สำหรับวลีรหัสผ่านซึ่งในปัจจุบันดูเหมือนจะให้สมดุลที่ดีที่สุดของความแข็งแกร่งของรหัสผ่านและการเรียกคืนจากผู้ใช้
Aaronaught

197
นอกจากนี้คุณสามารถสร้างประโยคแบบเต็มได้เช่น <adjective> <noun> คือ <verput <adver PIN แมวสีเขียวกำลังกระโดดอย่างดุเดือด มีรายการสำหรับหมวดหมู่ ด้วย 1024 ตัวเลือกสำหรับแต่ละคุณมี 40 บิตของเอนโทรปี
Dominik Weber

28
+1 เพื่อพิจารณาการใช้รหัสผ่านใหม่เป็นปัญหาสำคัญสำหรับการหลีกเลี่ยง
lurscher

57
"ลองคิดดูสิถ้าผู้ใช้ต้องการเรียกรหัสผ่านอาจเป็นเพราะพวกเขาลืมรหัสผ่าน" - ไม่จำเป็นต้องเป็นจริง! ฉันมักจะต้องการรับรหัสผ่านของฉันเพราะฉันอยู่บนแล็ปท็อปและฉันรู้ว่าเครื่องที่บ้านของฉันมีรหัสผ่านที่เก็บไว้หรือมันถูกเขียนลงที่ใดที่หนึ่งที่ปลอดภัยและฉันไม่ต้องการทำลายมันด้วยการออกรหัสใหม่ .
joachim

5
คำถามที่ให้คะแนนสูงสุดในไซต์ IT Security SE ใหม่เกี่ยวข้องกับความถูกต้องของการคำนวณเอนโทรปีนี้ (ในทางเทคนิคแล้วมันเกี่ยวข้องกับ xkcd ที่ @Pieter เชื่อมโยง)
Pops

592

ลองนึกภาพใครบางคนได้มอบหมายให้อาคารขนาดใหญ่ที่จะสร้าง - บาร์สมมติว่า - และการสนทนาต่อไปนี้เกิดขึ้น:

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

สถาปนิกถามว่าจะสร้างอาคารนี้อย่างมีจริยธรรมโดยไม่ต้องออกจากไฟได้อย่างไร?

ในอุตสาหกรรมอาคารและวิศวกรรมการสนทนามีแนวโน้มที่จะจบลงเช่นนี้:

สถาปนิก: อาคารนี้ไม่สามารถสร้างได้หากไม่มีทางหนีไฟ คุณสามารถไปหามืออาชีพที่มีใบอนุญาตคนอื่นและเขาจะบอกคุณในสิ่งเดียวกัน ฉันจะไปแล้ว โทรกลับหาฉันเมื่อคุณพร้อมที่จะร่วมมือ

การเขียนโปรแกรมคอมพิวเตอร์อาจไม่ใช่อาชีพที่ได้รับใบอนุญาตแต่คนมักจะสงสัยว่าทำไมอาชีพของเราจึงไม่ได้รับความเคารพเช่นเดียวกับวิศวกรโยธาหรือวิศวกรรมเครื่องกล อาชีพเหล่านั้นเมื่อต้องส่งขยะ (หรืออันตรายร้ายแรง) จะปฏิเสธ พวกเขารู้ว่าไม่ใช่ข้อแก้ตัวที่จะพูดว่า "เอาล่ะฉันทำดีที่สุดแล้ว แต่เขายืนยันและฉันต้องทำสิ่งที่เขาพูด" พวกเขาอาจสูญเสียใบอนุญาตสำหรับข้อแก้ตัวนั้น

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

ไม่มีวิธีจริยธรรมหรือความรับผิดชอบในการจัดเก็บรหัสผ่านในรูปแบบที่กู้คืนได้ ระยะเวลา


124
@Aaraught - ฉันคิดว่านั่นเป็นจุดที่ยุติธรรมและถูกต้อง แต่ขอให้ฉันบิดมันกับคุณ คุณกำลังทำงานในโครงการสำหรับ บริษัท ในฐานะพนักงานและหัวหน้าของคุณบอกว่า 'นี่เป็นข้อกำหนดของระบบของเรา' (ไม่ว่าจะด้วยเหตุผลใดก็ตาม) คุณเดินออกจากงานที่เต็มไปด้วยความขุ่นเคืองที่ชอบธรรมหรือไม่? ฉันรู้ว่ามีภาระผูกพันเมื่อฉันอยู่ในการควบคุมเต็มรูปแบบที่จะรับผิดชอบ - แต่ถ้า บริษัท เลือกที่จะเสี่ยงต่อความล้มเหลวของการตรวจสอบหรือความรับผิดนั้นเป็นหน้าที่ของฉันที่จะเสียสละงานของฉันเพื่อพิสูจน์จุดหรือฉันจะหาสิ่งที่ดีที่สุด และวิธีที่ปลอดภัยที่สุดที่จะทำในสิ่งที่พวกเขาพูด? เพียงแค่เล่นเป็นทนายของปีศาจ ..
เชน

44
ฉันไม่ใช่นักกฎหมาย แต่ให้พิจารณาสิ่งนี้ หากหัวหน้างานของคุณสั่งให้คุณทำอะไรบางอย่างที่ขัดแย้งกับผลประโยชน์ของ บริษัท เช่นโดยการเปิดเผยให้พวกเขามีความรับผิดชอบที่หลีกเลี่ยงได้ง่ายมันเป็นหน้าที่ของคุณที่จะเชื่อฟังหรือปฏิเสธอย่างสุภาพหรือไม่? ใช่พวกเขาเป็นเจ้านายของคุณ แต่พวกเขาก็มีเจ้านายของตัวเองแม้ว่าจะเป็นนักลงทุนก็ตาม หากคุณไม่ไปหัวพวกเขาหัวใครจะม้วนเมื่อช่องโหว่ความปลอดภัยของคุณถูกโจมตี? สิ่งที่ต้องพิจารณา
Steven Sudit

68
นักพัฒนามักจะพยายามบอกว่างานของเรานั้นยากกว่าคนอื่นมากเพียงใดเพราะเราได้รับข้อกำหนดด้านขยะที่เปลี่ยนแปลงตลอดเวลา นี่เป็นตัวอย่างที่สมบูรณ์แบบว่าทำไม; อาชีพของเราต้องการกระดูกสันหลัง อาชีพของเราจำเป็นต้องสามารถพูดว่า "ไม่นี่ไม่ใช่ข้อกำหนดที่ยอมรับได้นี่ไม่ใช่สิ่งที่ฉันสามารถพัฒนาด้วยความสุจริตใจคุณอาจเป็นลูกค้า / นายจ้างของฉัน แต่ฉันมีความรับผิดชอบอย่างมืออาชีพต่อลูกค้าและสาธารณชน และถ้าคุณต้องการสิ่งนี้ทำแล้วคุณจะต้องมองหาที่อื่น "
Aaronaught

36
@sfussenegger: คุณไม่จำเป็นต้องรู้พื้นหลัง มันยอมรับไม่ได้ คุณสมมติว่าลูกค้ามีความน่าเชื่อถือ 100% - ถ้าเขาขอข้อกำหนดนี้โดยเฉพาะเพื่อให้เขาสามารถใช้รหัสผ่านในภายหลังได้ การรักษาความปลอดภัยเป็นหนึ่งในไม่กี่รายการในการพัฒนาที่มีการแกะสลักในหิน มีบางสิ่งที่คุณไม่ได้ทำและการจัดเก็บรหัสผ่านที่กู้คืนได้นั้นเป็นหนึ่งในสิบนั้น
Aaronaught

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

206

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

ฉันคิดว่านี่คล้ายกับวิธีที่ Windows Recovery Agent ใช้งานได้จริง

  • รหัสผ่านจะถูกเข้ารหัส
  • ผู้คนสามารถเข้าสู่ระบบได้โดยไม่ต้องถอดรหัสไปที่ข้อความธรรมดา
  • รหัสผ่านสามารถกู้คืนเป็นข้อความธรรมดา แต่มีรหัสส่วนตัวเท่านั้นที่สามารถเก็บไว้นอกระบบ (ในตู้เซฟธนาคารหากคุณต้องการ)

34
รหัสผ่าน -1 ไม่ควร "เข้ารหัส" เป็นการละเมิด CWE-257 cwe.mitre.org/data/definitions/257.html
rook

100
1. คำถามที่ระบุว่ารหัสผ่านควรจะกู้คืนเป็นข้อความธรรมดาดังนั้นนี่เป็นข้อกำหนด 2. ฉันใช้การเข้ารหัสแบบอสมมาตรที่นี่ไม่ใช่การเข้ารหัสแบบสมมาตร กุญแจสำคัญในการถอดรหัสไม่จำเป็นสำหรับการดำเนินงานรายวันและสามารถเก็บไว้ในธนาคารที่ปลอดภัย การโต้แย้งในลิงค์นั้นถูกต้อง แต่ไม่สามารถใช้กับสถานการณ์นี้ได้
stefanw

57
จริง แต่คุณเห็นด้วยหรือไม่ว่าการให้ข้อกำหนดนี้เป็นวิธีที่มีความรับผิดชอบมากที่สุด คุณสามารถตีฉันได้ทุกวันด้วย CWE-257 ของคุณมันจะไม่เปลี่ยนปัญหาที่น่าสนใจในการจัดเก็บและทำงานกับข้อมูลประจำตัวที่ปลอดภัยและสามารถกู้คืนเป็นรูปแบบเดิมได้ถ้าต้องการ
stefanw

10
Windows Recovery Agent เป็นตัวอย่างที่ไม่ดีที่นี่เนื่องจากเกี่ยวข้องกับการเข้ารหัสที่แท้จริงไม่ใช่การจัดการรหัสผ่าน รหัสการเข้ารหัสไม่เหมือนกับรหัสผ่าน กฎและการปฏิบัติโดยรอบแต่ละอย่างนั้นแตกต่างกันอย่างสิ้นเชิง การเข้ารหัสและการรับรองความถูกต้องไม่เหมือนกัน การเข้ารหัสลับสำหรับความเป็นส่วนตัว - คีย์จะใช้ในการป้องกันข้อมูล การรับรองความถูกต้องเป็นข้อมูลประจำตัวที่สำคัญคือข้อมูล (เป็นปัจจัยหนึ่งในกระบวนการตรวจสอบ) ดังนั้นฉันซ้ำการเข้ารหัสและการรับรองความถูกต้องไม่เหมือนกัน คุณไม่สามารถใช้หลักการของข้อหนึ่งกับอีกข้อหนึ่งได้อย่างถูกต้อง
Aaronaught

16
+1 ประเด็นสำคัญคือการยืนยันใน CWE-257 อย่างหลงใหล? มันเป็นจุดอ่อน (CWE) ไม่ใช่ช่องโหว่ (CVE) การเปรียบเทียบรหัสผ่านที่กู้คืนได้กับบัฟเฟอร์ล้นนั้นเป็นการเปรียบเทียบแอปเปิ้ลและส้ม เพียงให้แน่ใจว่าลูกค้าเข้าใจปัญหา (ให้เขาลงนามในบางสิ่งที่ระบุว่าเป็นอย่างอื่นไม่เช่นนั้นเขาอาจจำอะไรไม่ได้หากมีปัญหา) และดำเนินการต่อไป นอกจากนี้มาตรการรักษาความปลอดภัยที่จำเป็นขึ้นอยู่กับมูลค่าของระบบและความเสี่ยงที่อาจเกิดขึ้นจากการถูกโจมตี หากผู้โจมตีที่ประสบความสำเร็จสามารถยกเลิกการสมัครรับจดหมายข่าวเพียงบางส่วนก็ไม่มีเหตุผลที่จะโต้แย้งเกี่ยวกับปัญหาใด ๆ
sfussenegger

133

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


2
บันทึกการใช้เว็บเซิร์ฟเวอร์จะไม่ถูกนับในศาลใช่หรือไม่ หรือในกรณีนี้พวกเขาจะถือว่าปลอมเช่นกัน?
Vinko Vrsalovic

10
@Vinko Vrsalovic บันทึกการใช้เว็บเซิร์ฟเวอร์ SHOULDNT ในศาลเพื่อที่จะทำเช่นนั้นคุณจำเป็นต้องพิสูจน์การปฏิเสธการพิสูจน์ความถูกต้องหลักฐานการพิสูจน์ ฯลฯ ซึ่งบันทึกของเว็บเซิร์ฟเวอร์นั้นไม่ชัดเจน
AviD

7
เผง ผู้จัดหาสินค้าต้องพิสูจน์ว่ามีเพียงลูกค้าเท่านั้นที่สามารถทำธุรกรรมนั้นได้ บันทึกการใช้เว็บเซิร์ฟเวอร์ไม่ได้ทำเช่นนั้น
user207421

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

1
@Sablefoste บนเว็บไซต์นั้น หากผู้ใช้ใช้รหัสผ่านเดียวกันที่อื่นคุณกำลังสร้างความเสี่ยงต่อการรั่วไหลของข้อมูลส่วนตัวของเขา หากคุณไม่เคยมีส่วนร่วมในการฝึกฝนคุณไม่สามารถทำให้เกิดปัญหาได้
user207421

94

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

หากลูกค้าของคุณมีปัญหากับสิ่งนั้นให้บอกพวกเขาว่าการจัดเก็บรหัสผ่านที่สามารถกู้คืนได้นั้นผิดกฎหมาย พระราชบัญญัติคุ้มครองข้อมูลในประเทศอังกฤษไม่ว่าจะอยู่ที่ใดในปี 1998 (โดยเฉพาะอย่างยิ่งตาราง 1 ส่วน II วรรค 9) กำหนดให้ผู้ควบคุมข้อมูลใช้มาตรการทางเทคนิคที่เหมาะสมเพื่อรักษาความปลอดภัยของข้อมูลส่วนบุคคลโดยคำนึงถึงสิ่งต่างๆ อันตรายที่อาจเกิดขึ้นหากข้อมูลถูกบุกรุก - ซึ่งอาจเป็นเรื่องสำคัญสำหรับผู้ใช้ที่แชร์รหัสผ่านระหว่างไซต์ต่างๆ หากพวกเขายังคงมีปัญหาในการหาความจริงที่ว่ามันเป็นปัญหาให้ชี้ไปที่ตัวอย่างจริงบางอย่างเช่นอันนี้นี้

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

นี่คือโพสต์บล็อกที่ฉันเขียนในหัวข้อ:

อัปเดต:ขณะนี้เราเริ่มเห็นการฟ้องร้องและดำเนินคดีกับ บริษัท ที่ไม่ได้รับรหัสผ่านของผู้ใช้อย่างถูกต้อง ตัวอย่าง: LinkedIn ตบกับ $ 5 ล้านบาทคดีการเรียน ; โซนี่ปรับ£ 250,000 กว่าเพลย์สับข้อมูล ถ้าฉันจำได้อย่างถูกต้อง LinkedIn กำลังเข้ารหัสรหัสผ่านของผู้ใช้จริง ๆ แต่การเข้ารหัสที่ใช้นั้นอ่อนแอเกินไปที่จะมีประสิทธิภาพ


8
@jimmycakes - นี่เป็นสิ่งที่ดีที่จะทำในระบบความปลอดภัยต่ำ แต่ถ้าคุณเก็บข้อมูลที่มีมูลค่าสูงคุณจะต้องสมมติว่าอีเมลของบุคคลนั้นถูกโจมตีอยู่แล้วและการส่งลิงค์เข้าสู่ระบบโดยตรงทำให้ระบบของคุณเสียหาย +1 สำหรับการตอบคำถามของฉันด้วยทางเลือกที่เป็นไปได้ แต่ชี้ให้เห็นข้อบกพร่องในตรรกะโดยรวม ฉันไม่ต้องการให้ Payppal ส่งลิงค์เข้าสู่ระบบโดยตรงที่เคย อาจฟังดูหวาดระแวง แต่ฉันคิดเสมอว่าบัญชีอีเมลของฉันเสียหาย - ทำให้ฉันซื่อสัตย์ ;)
เชน

อย่างแน่นอน - ฉันคาดหวังว่าธนาคารของฉันจะให้โทรศัพท์และยืนยันตัวตนของฉันอย่างน้อยที่สุดก่อนที่จะให้ฉันรีเซ็ต ( ไม่กู้คืน) รหัสผ่านของฉัน สิ่งที่ฉันได้อธิบายไว้ที่นี่คือมาตรฐานความปลอดภัยขั้นต่ำของรหัสผ่านที่ฉันคาดหวังจากเว็บไซต์ใด ๆ
jammycakes

1
ไม่สนใจธนาคารหรือ paypal ที่ไม่มีข้อ จำกัด ที่คุณกำหนดไว้ หากคุณคิดว่าอีเมลของพวกเขาถูกโจมตีวิธีการออนไลน์ใด ๆ ที่เป็นไปได้? หากคุณส่งอีเมลรหัสผ่านที่สร้างขึ้นจะมีความปลอดภัยมากขึ้นอย่างไร
Peter Coulton

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

ฉันสงสัยเกี่ยวกับการส่งลิงค์ / รหัสผ่านในอีเมลจะผ่านเครือข่ายในรูปแบบธรรมดาผ่านโหนดเครือข่ายที่ไม่รู้จัก ...
ยาคุบบ

55

หลังจากอ่านส่วนนี้:

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

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

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

จากนั้นระบบจะถูกตั้งค่าให้รู้ว่าเมื่อมีการรีเซ็ตรหัสผ่านเกิดขึ้นและแสดงข้อความ "คุณต้องการเก็บรหัสผ่านใหม่หรือเลือกใหม่"

วิธีนี้แย่ลงสำหรับพีซีที่รู้น้อยกว่าการบอกรหัสผ่านเก่าของพวกเขาอย่างไร และในขณะที่ฝ่ายบริการลูกค้าสามารถลุกขึ้นมาก่อความเสียหายได้ฐานข้อมูลเองก็มีความปลอดภัยมากกว่าในกรณีที่มีการละเมิด

แสดงความคิดเห็นเกี่ยวกับคำแนะนำของฉันและฉันจะแนะนำวิธีแก้ปัญหาที่คุณทำในตอนแรก


4
@ จอห์น - ฉันคิดว่าเป็นทางออกที่ทำงานได้อย่างสมบูรณ์ เตรียมรับมือกับภัยคุกคามภายในแม้ว่า! คุณรู้ไหมถ้าฉันต้องทำสิ่งนี้ด้วยการรีเซ็ตรหัสผ่านระดับกลาง (เทคโนโลยีตั้งค่ารหัสผ่านด้วยตนเองเป็น mesaure ชั่วคราวและบอกให้ Mabel พิมพ์รหัส 1234 เป็นรหัสผ่านของเธอ) มันอาจจะทำงานได้ดีบนระบบที่ไม่มีข้อมูลสำคัญ ถ้ามันเป็นสภาพแวดล้อมที่มีความปลอดภัยสูงแม้ว่าเราจะมีปัญหาที่บริการ cust สามารถตั้งรหัสผ่านของ CEO เป็น 1234 และเข้าสู่ระบบโดยตรง ไม่มีวิธีแก้ปัญหาที่สมบูรณ์แบบ แต่อันนี้ใช้ได้ในหลายกรณี (+1)
เชน

5
ฉันเพิ่งสังเกตเห็นคำตอบนี้ @Shane ฉันไม่เข้าใจว่าทำไมคุณจึงทำนายว่า "ภัยคุกคามภายใน" ลุกเป็นไฟ ความสามารถในการเปลี่ยนรหัสผ่านไม่ใช่จุดอ่อนที่น่าสังเกต ปัญหาคือความสามารถในการค้นหารหัสผ่านที่น่าจะใช้กับบริการอื่น ๆ - อีเมลของเธอธนาคารของเธอเว็บไซต์ช้อปปิ้งออนไลน์ที่เก็บข้อมูล CC ของเธอ จุดอ่อนนั้นไม่ปรากฏที่นี่; ถ้าบ๊อบรีเซ็ตรหัสผ่านของ Mabel และบอกให้เธอทราบทางโทรศัพท์นั่นจะไม่ทำให้เขาสามารถเข้าถึงบัญชีอื่น ๆ ของเธอได้ อย่างไรก็ตามฉันจะบังคับมากกว่า "แนะนำ" รีเซ็ตรหัสผ่านในการเข้าสู่ระบบ
Aaronaught

@Aaraught - ฉันเห็นจุดของคุณ แต่สิ่งที่ฉันคิดว่าเป็นเวลาที่แม้แต่ลูกค้าบริการลูกค้าจะถูกล็อคออกจากบางพื้นที่ของระบบ (เช่นเงินเดือนบัญชี ฯลฯ ) และให้พวกเขาตั้งรหัสผ่านได้โดยตรงคือ ปัญหาด้านความปลอดภัยในและของตัวเอง ฉันเห็นประเด็นของคุณว่าประเภทของระบบที่ฉันถามคำถามนี้เกี่ยวกับแตกต่างจากระบบบัญชีภายในเป็นส่วนใหญ่ เราอาจมีการสนทนาที่แตกต่างกันโดยสิ้นเชิงเกี่ยวกับระบบภายในที่เป็นกรรมสิทธิ์และความปลอดภัยของรหัสผ่านในนั้น
เชน

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

4
รหัสที่ได้รับจากฝ่ายสนับสนุนไม่จำเป็นต้องเป็นรหัสผ่านใหม่ อาจเป็นรหัสครั้งเดียวซึ่งปลดล็อคฟังก์ชั่นรีเซ็ตรหัสผ่าน
kgilpin

42

Michael Brooks เป็นแกนนำเกี่ยวกับ CWE-257 - ความจริงที่ว่าวิธีการใดก็ตามที่คุณใช้คุณ (ผู้ดูแลระบบ) ยังสามารถกู้คืนรหัสผ่านได้ ดังนั้นวิธีการเกี่ยวกับตัวเลือกเหล่านี้:

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

ฉันคิดว่า 1. เป็นตัวเลือกที่ดีกว่าเพราะช่วยให้คุณสามารถกำหนดคนใน บริษัท ของลูกค้าให้ถือกุญแจส่วนตัว ตรวจสอบให้แน่ใจว่าพวกเขาสร้างรหัสด้วยตนเองและเก็บไว้พร้อมคำแนะนำในที่ปลอดภัย ฯลฯ คุณสามารถเพิ่มความปลอดภัยโดยเลือกที่จะเข้ารหัสและส่งอักขระบางตัวจากรหัสผ่านไปยังบุคคลที่สามภายในเพื่อให้พวกเขาต้องถอดรหัสรหัสผ่านเพื่อเดา มัน. ส่งตัวละครเหล่านี้ให้กับผู้ใช้พวกเขาอาจจะจำได้ว่ามันคืออะไร!


8
และแน่นอนคุณสามารถใช้เทคนิคการแยกความลับเพื่อให้มีหลายคนจาก บริษัท ของคุณทำการถอดรหัส แต่ไม่มีสิ่งใดที่ตรงตามความต้องการดั้งเดิมของความสามารถในการส่งรหัสผ่านให้กับผู้ใช้หรือมีผู้สนับสนุนโทรศัพท์ระดับแรกที่ต้องออกไปเดินผ่านการเข้าสู่ระบบ
Christopher Creutzig

27

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

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

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

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

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

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

  • อนุญาตให้ผู้ใช้เลือกพินตัวเลขไม่ใช่ตัวเลข 4 หลักและควรใช้เฉพาะเมื่อมีการป้องกันแรงเดรัจฉาน
  • ให้ผู้ใช้เลือกคำถามที่มีคำตอบสั้น ๆ ว่ามีเพียงพวกเขาเท่านั้นที่รู้คำตอบจะไม่เปลี่ยนแปลงพวกเขาจะจำได้เสมอและพวกเขาไม่สนใจที่คนอื่นจะค้นพบ
  • ให้ผู้ใช้ป้อนชื่อผู้ใช้แล้ววาดรูปร่างที่ง่ายต่อการจำด้วยวิธีเรียงสับเปลี่ยนที่เพียงพอเพื่อป้องกันการเดา (ดูรูปที่ดีนี้ของวิธีที่ G1 ทำเพื่อปลดล็อคโทรศัพท์)
  • สำหรับเว็บไซต์ของเด็กคุณสามารถสร้างสิ่งมีชีวิตเลือนอัตโนมัติโดยใช้ชื่อผู้ใช้ (เรียงลำดับเหมือนตัวระบุ) และขอให้ผู้ใช้ตั้งชื่อลับให้สิ่งมีชีวิต จากนั้นพวกเขาจะได้รับแจ้งให้ป้อนชื่อลับของสิ่งมีชีวิตเพื่อเข้าสู่ระบบ

ฉันตอบความคิดเห็นที่นี่ลงในการตอบสนองของฉันเนื่องจากมันค่อนข้างยาว - ฉันคิดว่ามันสำคัญที่จะต้องตรวจสอบการวิเคราะห์และการอภิปรายปัญหาที่เกิดขึ้น stackoverflow.com/questions/2283937/…
AviD

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

1
ทำไมการแสดงรหัสผ่านที่คลุมเครือดีกว่าการให้คุณเลือกรหัสผ่านใหม่ที่คุณจำได้
จาค็อบ

@Jacob: เอนโทรปีอื่น ๆ
Alexander Shcheblikin

25

ตามความคิดเห็นที่ฉันทำกับคำถาม:
สิ่งสำคัญอย่างหนึ่งที่ได้รับการขัดเกลาโดยเกือบทุกคน ... ปฏิกิริยาเริ่มต้นของฉันคล้ายกับ @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 หรือที่คล้ายกันจัดทำเอกสารและมีลูกค้า (คนที่อาวุโสพอที่จะทำการตัดสินใจ) ลงชื่อ มัน.


5
รหัสผ่านที่ใช้ร่วมกันระหว่างเว็บไซต์ที่มีมูลค่าต่ำของคุณด้วย "ไม่" สินทรัพย์ที่มีราคาแพงและ Facebook / Gmail / ธนาคารของคุณเป็นสินทรัพย์ที่มีราคาแพงแม้ในเว็บไซต์ที่มีมูลค่าต่ำ
jammycakes

3
ฉันคิดว่าปัญหาที่นี่คือกลุ่มผู้ใช้ที่กล่าวถึงข้างต้นมักจะใช้รหัสผ่านเดียวกันสำหรับแอปพลิเคชันทั้งหมดจากระดับความปลอดภัยที่แตกต่างกันมากมาย (ตั้งแต่ธนาคารไปจนถึงบล็อกสูตรอาหาร) ดังนั้นคำถามคือถ้ามันเป็นความรับผิดชอบของนักพัฒนาในการปกป้องผู้ใช้แม้กระทั่งจากตัวเอง ฉันจะบอกว่าใช่แน่นอน!
ercan

7
ฉันขอโทษ แต่ตัวตนเป็นสินทรัพย์ที่มีมูลค่าสูงระยะเวลา ไม่มีข้อยกเว้นไม่มีข้อแก้ตัว ไม่ว่าเว็บไซต์ของคุณจะเล็กและไม่สำคัญเท่าใดก็ตาม และรหัสผ่านที่ใช้ร่วมกันคือรหัสประจำตัวหากอนุญาตให้แฮ็กเกอร์เข้าสู่บัญชี Facebook ของผู้ใช้บัญชี Gmail บัญชีธนาคารและอื่น ๆ ไม่มีความเกี่ยวข้องกับซีแมนทิกส์ เพียงแค่ขอให้ทุกคนที่ได้รับผลกระทบจากการโจมตีของแฮกเกอร์เช่นนี้: theregister.co.uk/2009/08/24/4chan_pwns_christians
jammycakes

2
@Jacob ลูกค้าของคุณจะถูกฟ้องเพราะบัญชีของ Erma ในระบบอื่นได้รับการประนีประนอม? แม้จะได้รับความประมาทเลินเล่ออย่างร้ายแรงในส่วนของลูกค้าของคุณ (ซึ่งไม่ใช่แบบที่ฉันได้ให้ไว้อย่างละเอียด) และจากความจริงที่ว่าไม่มีทางที่จะพิสูจน์ได้ว่าระบบอื่นนั้นถูกละเมิดเนื่องจากคุณไม่มีสถานะทางกฎหมายที่เป็นไปได้ รับความเสียหายทุกรูปแบบจากระบบใดระบบหนึ่งบนระบบอื่น มันจะถูกโยนออกจากศาลด้วยอคติและค้นหาว่าโจทก์ดูถูก อย่างไรก็ตาม Erma อาจเป็นความผิดเนื่องจากละเมิดข้อกำหนดในการให้บริการจำนวนมาก ...
AviD

5
@Jacob นั่นมันผิดมาก เพียงเพราะรหัสผ่านเกิดขึ้นเหมือนกัน (ซึ่งจะละเมิด ToS และนโยบายความปลอดภัยของพวกเขาอย่างชัดเจน) พวกเขาไม่มีสถานะทางกฎหมายที่จะยืนยันทั้งสอง แม้กระทั่งความจริงที่ว่าการพิสูจน์ว่ามันใกล้จะเป็นไปไม่ได้ นอกจากนี้ฉันจะชี้ให้เห็นว่าไม่มีกฎหมายที่กำหนดให้ บริษัท สุ่มไม่มีการรักษาความปลอดภัยแบบหละหลวมยกเว้นว่าจะมีกฎระเบียบเฉพาะที่เกี่ยวข้อง และยิ่งไปกว่านั้นรหัสผ่านจะถูกเข้ารหัส (!) ดังนั้นความหย่อนยานจึงอยู่ไกลจากข้อสรุปที่ลืมเลือน
AviD

21

บ้านครึ่งทางล่ะ

เก็บรหัสผ่านด้วยการเข้ารหัสที่รัดกุมและไม่เปิดใช้งานการรีเซ็ต

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

คุณสามารถ "ขาย" สิ่งนี้เป็นกลไกที่ปลอดภัยสำหรับการรีเซ็ตรหัสผ่าน


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

คุณสามารถบอกลูกค้าของคุณเกี่ยวกับความเสี่ยงของฐานข้อมูลที่ตกอยู่ในมือของพวกเขาและพวกเขาได้รับการเปิดเผยรหัสผ่านที่ถูกขโมย ... มีตัวอย่างมากมายอยู่รอบตัว
Oded

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

4
รหัสผ่าน -1 ไม่ควร "เข้ารหัส" เป็นการละเมิด CWE-257 cwe.mitre.org/data/definitions/257.html
rook

34
@Michael Brooks: ไม่จำเป็นต้องลงคะแนนและคัดลอกความคิดเห็นเดิมซ้ำแล้วซ้ำอีก เราทุกคนตระหนักดีว่าเป็นการปฏิบัติที่ไม่ดี เชนระบุว่าเขาไม่มีความสามารถในการงัดแงะเรื่องและดังนั้นสิ่งที่ดีที่สุดต่อไปจะถูกเสนอ
Johannes Gorset

13

วิธีเดียวที่จะอนุญาตให้ผู้ใช้เรียกคืนรหัสผ่านเดิมคือเข้ารหัสด้วยรหัสสาธารณะของผู้ใช้ มีเพียงผู้ใช้นั้นเท่านั้นที่สามารถถอดรหัสรหัสผ่านของพวกเขา

ดังนั้นขั้นตอนจะเป็น:

  1. ผู้ใช้ลงทะเบียนในเว็บไซต์ของคุณ (ผ่าน SSL) โดยที่ยังไม่ได้ตั้งรหัสผ่าน เข้าสู่ระบบโดยอัตโนมัติหรือให้รหัสผ่านชั่วคราว
  2. คุณเสนอที่จะเก็บคีย์ PGP สาธารณะของพวกเขาสำหรับการดึงรหัสผ่านในอนาคต
  3. พวกเขาอัปโหลดคีย์ PGP สาธารณะ
  4. คุณขอให้พวกเขาตั้งรหัสผ่านใหม่
  5. พวกเขาส่งรหัสผ่าน
  6. คุณแฮรหัสผ่านโดยใช้อัลกอริทึมการแฮ็รหัสผ่านที่ดีที่สุด (เช่น bcrypt) ใช้สิ่งนี้เมื่อตรวจสอบการเข้าสู่ระบบครั้งต่อไป
  7. คุณเข้ารหัสรหัสผ่านด้วยรหัสสาธารณะและเก็บแยกต่างหาก

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


5
ผู้ใช้ส่วนใหญ่ไม่มีคีย์ PGP (ฉันยังไม่มีอยู่หลังจากผ่านไป 20 ปีในอุตสาหกรรมฉันไม่เคยรู้สึกต้องการเลย) และมันก็ไม่ใช่กระบวนการไร้แรงเสียดทานที่จะได้มา นอกจากนี้รหัสส่วนตัวนั้นเป็นเพียงแค่พร็อกซีสำหรับรหัสผ่านจริงเท่านั้น มันเป็นรหัสผ่านสำหรับรหัสผ่านในคำอื่น ๆ ; มันเต่าตลอดทางลง
Robert Harvey

1
@RobertHarvey เป้าหมายคือเพื่อให้ผู้ใช้สามารถดึงรหัสผ่านโดยไม่อนุญาตให้พนักงานไซต์หรือแฮกเกอร์เข้าถึง โดยการกำหนดให้กระบวนการดึงข้อมูลนั้นเกิดขึ้นในคอมพิวเตอร์ของผู้ใช้คุณต้องบังคับใช้ อาจมีทางเลือกอื่นสำหรับ PGP ซึ่งสามารถทำได้เหมือนกัน เต่าลงไปอาจเป็นได้ (อาจมีช้างบางตัวระหว่างทาง) แต่ฉันไม่เห็นวิธีอื่น สำหรับประชากรทั่วไป (ไม่น่าจะถูกกำหนดเป้าหมายเป็นรายบุคคล) ที่มีรหัสผ่านของคุณบนกระดาษและไม่สามารถเรียกคืนได้จากบริการนี้จะปลอดภัยกว่าที่เราเป็นอยู่ในปัจจุบัน
Nicholas Shanks

ฉันชอบเพราะมันบังคับให้ทุกคนมีกุญแจสาธารณะของ PGP ซึ่งเป็นสิ่งที่มีจริยธรรมมากที่ต้องทำ
Lodewijk

คุณสามารถสร้างและมอบให้กับผู้ใช้
My1

@RobertHarvey คุณอาจพูดถูกว่านี่คือ "ไม่ใช่กระบวนการไร้แรงเสียดทาน" แต่อาจเป็นบริการเสริมสำหรับผู้ใช้ระดับสูงซึ่งผู้ใช้ทั่วไปสามารถเพิกเฉยได้ สำหรับข้อถกเถียงเกี่ยวกับ PK ว่าเป็น "รหัสผ่านสำหรับรหัสผ่าน" โปรดจำไว้ว่าในทางทฤษฎีแล้วมันอาจเป็นไปได้สำหรับรหัสผ่านจำนวนมาก คุณอาจใช้รหัสผ่านที่แตกต่างกันสำหรับบริการต่าง ๆ และเข้ารหัสทั้งหมดโดยใช้รหัสเดียวกัน จากนั้น PK จะมีค่ามากกว่ารหัสผ่านเดียว อาจเป็นไปได้ในทางที่เปรียบเทียบได้กับโปรแกรมจัดการรหัสผ่าน (?) ยังไม่ชัดเจนสำหรับฉันว่าผลกระทบนี้อาจเกิดขึ้นได้อย่างไร ...
Kjartan

12

ฉันคิดว่าคำถามจริงที่คุณควรถามตัวเองคือ: 'ฉันจะทำให้คนอื่นเชื่อได้อย่างไร'


4
@sneg - เอาล่ะฉันเป็นคนที่น่าเชื่อถือมาก แต่บางครั้งก็เป็นเจ้านายและบางครั้งก็เป็นลูกค้าดังนั้นฉันจึงไม่มีอำนาจที่จะต้องโน้มน้าวพวกเขาไม่ทางใดก็ทางหนึ่ง ฉันจะฝึกในกระจกมากกว่านี้ .. ;)
เชน

หากต้องการโน้มน้าวใจคุณไม่จำเป็นต้องใช้ประโยชน์ใด ๆ นอกเหนือจากทักษะความสามารถและการสื่อสารของคุณ ถ้าคุณรู้วิธีที่ดีกว่าในการทำบางสิ่ง แต่ผู้คนไม่ฟัง ... ลองคิดดู
z-boss

7
@ z-boss - เห็นได้ชัดว่าคุณไม่ได้ทำงานกับ / สำหรับบางส่วนของหัวแข็งที่ฉันมีความสุขในการทำงานกับ บางครั้งไม่สำคัญว่าลิ้นของคุณจะชุบด้วยทองคำและคุณสามารถสร้างโปรแกรม Google Chrome ได้ใหม่ในหนึ่งวัน
เชน

11

ฉันมีปัญหาเดียวกัน และในทำนองเดียวกันฉันคิดเสมอว่ามีคนแฮ็คระบบของฉันไม่ใช่เรื่องของ "ถ้า" แต่เป็น "เมื่อ"

ดังนั้นเมื่อฉันต้องทำเว็บไซต์ที่จำเป็นต้องเก็บข้อมูลลับที่กู้คืนได้เช่นบัตรเครดิตหรือรหัสผ่านสิ่งที่ฉันทำคือ:

  • เข้ารหัสด้วย: openssl_encrypt (สตริง $ data, วิธีสตริง $, สตริงรหัสผ่าน $)
    • คู่มือ PHP
  • ข้อมูลหาเรื่อง :
    • ข้อมูลที่ละเอียดอ่อน (เช่นรหัสผ่านผู้ใช้)
    • ทำให้เป็นอันดับหากจำเป็นเช่นถ้าข้อมูลเป็นอาร์เรย์ของข้อมูลเช่นข้อมูลที่มีความละเอียดอ่อนหลายอย่าง
  • รหัสผ่านหาเรื่อง : ใช้ข้อมูลที่มีเพียงผู้ใช้ที่รู้ว่า:
    • ป้ายทะเบียนผู้ใช้
    • หมายเลขประกันสังคม
    • หมายเลขโทรศัพท์ผู้ใช้
    • ชื่อแม่ของผู้ใช้
    • สตริงสุ่มส่งทางอีเมลและ / หรือทาง sms ในเวลาที่ลงทะเบียน
  • วิธีการหาเรื่อง :
    • เลือกวิธีการเข้ารหัสหนึ่งวิธีเช่น "aes-256-cbc"
  • ไม่เคยเก็บข้อมูลที่ใช้ในอาร์กิวเมนต์ "รหัสผ่าน" ที่ฐานข้อมูล (หรืออะไรก็ตามในระบบ)

เมื่อจำเป็นต้องกู้ข้อมูลนี้อีกครั้งให้ใช้ฟังก์ชัน "openssl_decrypt ()" แล้วถามผู้ใช้เพื่อรับคำตอบ เช่น: "ในการรับรหัสผ่านให้ตอบคำถาม: หมายเลขโทรศัพท์มือถือของคุณคืออะไร"

PS 1 : อย่าใช้เป็นรหัสผ่านในการจัดเก็บข้อมูลในฐานข้อมูล หากคุณต้องการเก็บหมายเลขโทรศัพท์มือถือของผู้ใช้อย่าใช้ข้อมูลนี้เพื่อเข้ารหัสข้อมูล ใช้ข้อมูลที่มี แต่ผู้ใช้เท่านั้นที่รู้หรือเป็นเรื่องยากสำหรับคนที่ไม่เกี่ยวข้อง

PS 2 : สำหรับข้อมูลบัตรเครดิตเช่น "การซื้อเพียงคลิกเดียว" สิ่งที่ฉันทำคือใช้รหัสผ่านการเข้าสู่ระบบ รหัสผ่านนี้ถูกแฮชในฐานข้อมูล (sha1, md5 ฯลฯ ) แต่ในเวลาเข้าสู่ระบบฉันเก็บรหัสผ่านข้อความธรรมดาในเซสชันหรือคุกกี้ที่ปลอดภัยแบบไม่ถาวร (เช่นที่หน่วยความจำ) รหัสผ่านธรรมดานี้จะไม่อยู่ในฐานข้อมูลแน่นอนว่ามันจะยังคงอยู่ในหน่วยความจำเสมอทำลายที่ส่วนท้ายของส่วน เมื่อผู้ใช้คลิกที่ปุ่ม "ซื้อในคลิกเดียว" ระบบจะใช้รหัสผ่านนี้ หากผู้ใช้ลงชื่อเข้าใช้ด้วยบริการเช่น facebook, twitter และอื่น ๆ จากนั้นฉันจะถามรหัสผ่านอีกครั้งในเวลาที่ซื้อ (ตกลงไม่ใช่ "คลิก") หรือใช้ข้อมูลบริการที่ผู้ใช้เข้าสู่ระบบ (เช่น facebook id)


9

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

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

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

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

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


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

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

7
และอีกครั้งคุณทำซ้ำเท็จว่าไม่มีเรื่องนี้สำหรับระบบที่มีราคาต่ำ! มูลค่าของรหัสผ่านของผู้ใช้ไม่มีส่วนเกี่ยวข้องกับมูลค่าของบัญชีผู้ใช้ในระบบของคุณ มันเป็นความลับและสิ่งที่คุณต้องเก็บไว้เสมอ ฉันหวังว่าฉันจะให้อีก -1 สำหรับความคิดเห็นที่แสดงว่าคุณยังไม่เข้าใจปัญหาที่นี่
Aaronaught

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

7
สิ่งเดียวที่ชัดเจนที่นี่คืออาร์กิวเมนต์ทั้งหมดของคุณไม่มีอะไรมากไปกว่าการเข้าใจผิด Slippery Slope และคุณพยายามที่จะลองอ่าน buzzwords เช่น "การประเมินความเสี่ยง" เพื่อที่จะปกปิดความจริงนั้น มั่นใจได้ว่าระบบใดก็ตามที่ใช้ "FBI" จะปลอดภัยกว่าการแฮช bcrypt และความยาวรหัสผ่านขั้นต่ำ หากต้องการระบบการรับรองความถูกต้องตามมาตรฐานอุตสาหกรรมทำให้ฉันเป็น "ผู้คลั่งไคล้การรักษาความปลอดภัย" ฉันคิดว่าฉันเป็นคนคลั่ง เป็นการส่วนตัวที่ทำให้ฉันรู้ว่ามีคนจำนวนมากที่เต็มใจเสียสละความปลอดภัยของฉันเพื่อเงิน นั่นคือผิดจรรยาบรรณ
Aaronaught

8

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


ผู้ใช้อาจตอบคำถามด้วยเช่นกัน คำถามบางข้อขอคำตอบนานกว่าซึ่งง่ายต่อการเรียบเรียงใหม่ในภายหลัง
Monoman

5
คำถามความปลอดภัยเป็นความคิดที่ไม่ดี คุณจะให้แม่เปลี่ยนชื่อนามสกุลเมื่อข้อมูลถูกละเมิดได้อย่างไร ยังเห็นปีเตอร์ Gutmann ของวิศวกรรมความปลอดภัย
jww

7

ฉันใช้ระบบการรับรองความถูกต้องด้วยหลายปัจจัยสำหรับการใช้ชีวิตดังนั้นสำหรับฉันมันเป็นเรื่องธรรมดาที่จะคิดว่าคุณสามารถรีเซ็ตหรือสร้างรหัสผ่านใหม่ได้ในขณะที่ใช้ปัจจัยที่น้อยกว่าหนึ่งอย่างชั่วคราวในการรับรองความถูกต้องของผู้ใช้ โดยเฉพาะอย่างยิ่งการใช้ OTPs (รหัสผ่านครั้งเดียว) เป็นปัจจัยเพิ่มเติมบางอย่างช่วยลดความเสี่ยงได้มากหากหน้าต่างเวลาสั้นสำหรับเวิร์กโฟลว์ที่แนะนำ เราได้พัฒนาซอฟท์แวร์กำเนิด OTP สำหรับสมาร์ทโฟน (ซึ่งผู้ใช้ส่วนใหญ่แล้วพกติดตัวไปตลอดทั้งวัน) ด้วยความสำเร็จที่ยิ่งใหญ่ ก่อนที่จะบ่นปลั๊กโฆษณาปรากฏขึ้นสิ่งที่ฉันพูดคือเราสามารถลดความเสี่ยงในการเก็บรหัสผ่านที่สามารถเรียกคืนหรือตั้งค่าใหม่ได้อย่างง่ายดายเมื่อไม่ได้เป็นเพียงปัจจัยเดียวที่ใช้ในการตรวจสอบสิทธิ์ผู้ใช้


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

@Aaraught สิ่งที่ฉันพูดคือถ้าคุณจำเป็นต้องมีรหัสผ่านที่สามารถกู้คืนได้ความเสี่ยงที่แท้จริงจะลดลงหากไม่ได้เป็นเพียงปัจจัยการพิสูจน์ตัวตนเท่านั้นและยังเป็นเรื่องง่ายขึ้นสำหรับผู้ใช้หากเวิร์กโฟลว์นั้นนำปัจจัยที่ เขา / เธอมีอยู่แล้วและมีการเข้าถึงปัจจุบันมากกว่าที่จะจำได้ว่าอาจจะลืม 'คำตอบลับ' หรือใช้ลิงก์ที่ จำกัด เวลาหรือรหัสผ่านชั่วคราวทั้งสองส่งผ่านช่องทางที่ไม่ปลอดภัย (เว้นแต่ว่าคุณกำลังใช้ S-MIME กับใบรับรองลูกค้าหรือ PGP ทั้งค่าใช้จ่ายที่เกิดขึ้นเป็นพิเศษเกี่ยวกับการจัดการความสัมพันธ์ที่ถูกต้องและการหมดอายุ / การเปลี่ยนตัว)
Monoman

1
ฉันคิดว่าทั้งหมดนั้นเป็นเรื่องจริง แต่ความเสี่ยงของการประนีประนอมต่อสาธารณชนมีน้อยมาก ปัญหาที่ร้ายแรงยิ่งกว่ากับรหัสผ่านที่กู้คืนได้คือความปลอดภัยภายในและอาจทำให้พนักงานไม่พอใจเดินออกไปด้วยรหัสผ่านอีเมลของลูกค้าหลายพันคนหรือซีอีโอที่ทุจริตเพื่อขายให้กับผู้ส่งอีเมลขยะและผู้ส่งอีเมลขยะ การพิสูจน์ตัวตนแบบสองปัจจัยนั้นยอดเยี่ยมในการต่อสู้กับการขโมยข้อมูลประจำตัวและการคาดเดารหัสผ่าน แต่ไม่ได้นำมาสู่ตารางเท่าที่จะรักษาฐานข้อมูลรหัสผ่านจริงให้ปลอดภัย
Aaronaught

5

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


5

เพิ่งเจอการสนทนาที่น่าสนใจและอุ่นนี้ สิ่งที่ทำให้ฉันประหลาดใจมากที่สุดคือความใส่ใจเพียงเล็กน้อยต่อคำถามพื้นฐานต่อไปนี้:

  • ไตรมาสที่ 1 อะไรคือเหตุผลที่แท้จริงที่ผู้ใช้ยืนยันในการเข้าถึงรหัสผ่านที่จัดเก็บข้อความธรรมดา? ทำไมมันมีค่ามาก

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

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

เนื่องจากฉันไม่มีข้อมูลนี้และไม่สามารถพูดคุยกับลูกค้าเหล่านั้นได้ฉันจึงเดาได้เพียงว่ามันเกี่ยวกับการใช้งานดูด้านบน

คำถามอื่นที่ฉันได้เห็นถาม:

  • ไตรมาสที่ 2 หากผู้ใช้จำรหัสผ่านไม่ได้ในครั้งแรกเหตุใดรหัสผ่านเก่าจึงมีความสำคัญ

และนี่คือคำตอบที่เป็นไปได้ หากคุณมีแมวชื่อ "miaumiau" และใช้ชื่อของเธอเป็นรหัสผ่าน แต่ลืมว่าคุณทำคุณต้องการที่จะเตือนว่ามันเป็นหรือค่อนข้างถูกส่งอะไรเช่น "# zy * RW (ew"?

อีกสาเหตุที่เป็นไปได้คือผู้ใช้คิดว่ามันเป็นงานที่ยากที่จะคิดรหัสผ่านใหม่! ดังนั้นเมื่อมีการส่งรหัสผ่านเก่ากลับมาจะช่วยให้ภาพลวงตาในการช่วยชีวิตเธอจากงานที่เจ็บปวดอีกครั้ง

ฉันแค่พยายามเข้าใจเหตุผล แต่ไม่ว่าด้วยเหตุผลใดก็ตามมันเป็นเหตุผลที่ไม่ใช่สาเหตุที่ต้องได้รับการแก้ไข

ในฐานะผู้ใช้ฉันต้องการสิ่งที่เรียบง่าย! ฉันไม่ต้องการทำงานหนัก!

หากฉันเข้าสู่เว็บไซต์ข่าวเพื่ออ่านหนังสือพิมพ์ฉันต้องการพิมพ์ 1111 เป็นรหัสผ่านและผ่าน !!!

ฉันรู้ว่ามันไม่ปลอดภัย แต่สิ่งที่ฉันสนใจเกี่ยวกับคนที่ได้รับ "บัญชี" ของฉัน? ใช่เขาสามารถอ่านข่าวได้เช่นกัน!

ไซต์เก็บข้อมูล "ส่วนตัว" ของฉันหรือไม่ ข่าวที่ฉันอ่านวันนี้? แล้วมันเป็นปัญหาของเว็บไซต์ไม่ใช่ของฉัน! ไซต์แสดงข้อมูลส่วนตัวให้กับผู้ใช้ที่ผ่านการตรวจสอบแล้วหรือไม่ จากนั้นอย่าแสดงในตอนแรก!

นี่เป็นเพียงการแสดงให้เห็นถึงทัศนคติของผู้ใช้ต่อปัญหา

ดังนั้นในการสรุปฉันไม่รู้สึกว่ามันเป็นปัญหาของวิธีการ "ปลอดภัย" ในการจัดเก็บรหัสผ่านแบบข้อความธรรมดา (ซึ่งเรารู้ว่าเป็นไปไม่ได้) แต่เป็นวิธีการจัดการกับความกังวลที่แท้จริงของลูกค้า


4

การจัดการรหัสผ่านที่สูญหาย / ลืม:

ไม่ควรมีใครสามารถกู้คืนรหัสผ่านได้

หากผู้ใช้ลืมรหัสผ่านอย่างน้อยพวกเขาจะต้องรู้ชื่อผู้ใช้หรือที่อยู่อีเมลของพวกเขา เมื่อมีการร้องขอให้สร้าง GUID ในตารางผู้ใช้และส่งอีเมลที่มีลิงก์ที่มี guid เป็นพารามิเตอร์ไปยังที่อยู่อีเมลของผู้ใช้

หน้าหลังลิงค์จะตรวจสอบว่าพารามิเตอร์ guid มีอยู่จริง (อาจเป็นเพราะตรรกะการหมดเวลา) และขอรหัสผ่านใหม่จากผู้ใช้

หากคุณต้องการให้ผู้ใช้สายด่วนให้ความช่วยเหลือเพิ่มบทบาทบางอย่างให้กับรุ่นทุนของคุณและอนุญาตให้บทบาทสายด่วนสามารถเข้าสู่ระบบชั่วคราวในฐานะผู้ใช้ที่ระบุ บันทึกการลงชื่อเข้าใช้สายด่วนทั้งหมด ตัวอย่างเช่น Bugzilla เสนอคุณลักษณะการรับบทบาทให้ผู้ดูแลระบบ


GUID เป็นความคิดที่ไม่ดีไม่เกือบจะสุ่มพอและเข้าใจง่าย มีปัญหาอื่น ๆ เกี่ยวกับเรื่องนี้โปรดดูstackoverflow.com/questions/664673/…
AviD

3

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


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

ระบุทั้งการรีเซ็ตรหัสผ่านและส่งอีเมลรหัสผ่านแบบธรรมดา ฉันคิดว่านั่นเป็นวิธีที่ดีที่สุดที่คุณสามารถทำได้โดยไม่ต้องเก็บสำเนาของรหัสผ่านด้วยตัวเอง
casraf

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

3

หากคุณไม่สามารถปฏิเสธข้อกำหนดในการจัดเก็บรหัสผ่านที่กู้คืนได้วิธีการนี้เป็นข้อโต้แย้งของคุณ

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

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


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

1
คุณพลาดจุดของฉันอย่างสมบูรณ์ หากคุณไม่ต้องการรหัสผ่านจริงๆอย่ารวบรวมรหัสผ่าน นักพัฒนามักติดอยู่ในโหมด "คิดแบบที่เราทำ" บางครั้งมันก็ช่วยในการโยนความคิดล่วงหน้า
ครั้ง

2

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

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

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

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

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

แม้ว่านี่ไม่ใช่ขั้นตอนที่ฉันจะออกแบบ แต่ก็ใช้งานได้และมีความรับผิดชอบที่ดีเยี่ยม ทุกอย่างถูกบันทึกและตรวจทานรวมทั้งผู้ประกอบการทุกคนมีการฝึกปรือความลับ DOD และเราไม่เคยละเมิด

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

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

แต่ถ้าเป็นเช่นนั้นอีกครั้งหากลูกค้าผู้น่าสงสารคนนี้มีการจัดการที่ดีพวกเขาจะไม่ถามถึงการรักษาความปลอดภัยที่ประกอบด้วยโซลูชั่นในตอนแรกพวกเขาจะได้ไหม


รหัสหลักอาจมีความเสี่ยงสูงมากเจ้าหน้าที่สนับสนุนจะสามารถเข้าถึงทุกบัญชีได้และเมื่อคุณให้รหัสนั้นแก่ผู้ใช้แล้วพวกเขาก็จะมีรหัสหลักและเข้าถึงทุกอย่าง
Carson Myers

คีย์หลักเป็นความคิดที่แย่มากเพราะถ้ามีคนค้นพบมัน (หรือเปิดเผยโดยไม่ตั้งใจ) พวกเขาสามารถใช้ประโยชน์จากมันได้ กลไกการรีเซ็ตรหัสผ่านต่อบัญชีนั้นดีกว่า
Phil Miller

ฉันอยากรู้ฉันคิดว่า Linux โดยปริยายมีบัญชีผู้ใช้ขั้นสูงที่มีสิทธิ์เข้าถึงระดับรูต นั่นไม่ใช่ "คีย์หลัก" เพื่อเข้าถึงไฟล์ทั้งหมดในระบบใช่หรือไม่
JonnyBoats

@ JonnyBoats ใช่มันเป็น นั่นเป็นเหตุผลว่าทำไม Unixes สมัยใหม่เช่น Mac OS X จึงปิดการใช้งานบัญชีรูท
Nicholas Shanks

@NicholasShanks: ปิดการใช้งานบัญชีรูทหรือปิดการใช้งานการเข้าสู่ระบบแบบโต้ตอบในบัญชีรูท? ยังคงมีรหัสจำนวนมากที่ทำงานได้โดยไม่ จำกัด สิทธิ์
Ben Voigt

2

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

หากคุณไม่เคยเห็นรหัสผ่านแบบธรรมดาคำถามการสืบค้นจะไม่เกิดขึ้น

นอกจากนี้ฉันรวบรวม (จากเว็บ) ว่า (ถูกกล่าวหา) อัลกอริทึมบางอย่างเช่น MD5 นั้นไม่ถือว่าปลอดภัยอีกต่อไป ฉันไม่มีวิธีตัดสินว่าตัวเอง แต่มันเป็นสิ่งที่ต้องพิจารณา


1

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

เก็บการเข้ารหัสที่ไม่สามารถเรียกคืนได้ของรหัสผ่านในฐานข้อมูลของไซต์ (เรียกว่า "รหัสผ่าน") เหมือนกับที่คนทั่วไปทำ :)
ในแต่ละผู้ใช้ใหม่ (หรือการเปลี่ยนรหัสผ่าน) เก็บสำเนารหัสผ่านธรรมดาในฐานข้อมูลระยะไกล ใช้ id ของเซิร์ฟเวอร์, ID ผู้ใช้และ "pass-a" เป็นคีย์ผสมสำหรับรหัสผ่านนี้ คุณสามารถใช้การเข้ารหัสแบบสองทิศทางบนรหัสผ่านเพื่อนอนหลับได้ดีขึ้นในเวลากลางคืน

ตอนนี้เพื่อให้ใครบางคนได้รับทั้งรหัสผ่านและเป็นบริบท (รหัสไซต์ + รหัสผู้ใช้ + "รหัสผ่าน") เขาต้อง:

  1. เจาะฐานข้อมูลของเว็บไซต์เพื่อรับคู่ ("pass-a", user id) หรือคู่
  2. รับรหัสเว็บไซต์จากไฟล์กำหนดค่าบางอย่าง
  3. ค้นหาและแฮ็คไปยังฐานข้อมูลรหัสผ่านระยะไกล

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

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


3
หากเซิร์ฟเวอร์แอปสามารถเข้าถึงได้ทุกคนจึงสามารถเข้าถึงเซิร์ฟเวอร์แอปได้ (ไม่ว่าจะเป็นแฮ็กเกอร์หรือคนวงในที่เป็นอันตราย) สิ่งนี้มีความปลอดภัยเพิ่มเติมเป็นศูนย์
molf

1
การรักษาความปลอดภัยเพิ่มเติมที่นี่คือ DB ของเซิร์ฟเวอร์แอปพลิเคชันไม่เก็บรหัสผ่าน (ดังนั้นจึงจำเป็นต้องแฮ็คครั้งที่สอง - ไปยังฐานข้อมูลรหัสผ่าน) และฐานข้อมูลรหัสผ่านสามารถป้องกันได้ดีกว่าจากกิจกรรมที่ผิดปกติในขณะที่คุณควบคุม เพื่อให้คุณสามารถตรวจจับการดึงข้อมูลจำนวนมากเปลี่ยนคีย์ SSH การดึงข้อมูลเป็นรายสัปดาห์หรือแม้กระทั่งไม่อนุญาตการดึงข้อมูลรหัสผ่านอัตโนมัติและดำเนินการด้วยตนเองทั้งหมด โซลูชันนี้ยังเหมาะกับรูปแบบการเข้ารหัสภายในอื่น ๆ (เช่นคีย์สาธารณะ + ส่วนตัวเกลือ ฯลฯ ) สำหรับฐานข้อมูลรหัสผ่าน
Amir Arad

1

ตัวเลือกอื่นที่คุณอาจไม่ได้พิจารณาคืออนุญาตให้ดำเนินการทางอีเมล มันค่อนข้างยุ่งยาก แต่ฉันใช้สิ่งนี้กับลูกค้าที่ต้องการให้ผู้ใช้ "นอก" ระบบของพวกเขาเพื่อดู (อ่านอย่างเดียว) บางส่วนของระบบ ตัวอย่างเช่น:

  1. เมื่อผู้ใช้ลงทะเบียนพวกเขาจะสามารถเข้าถึงได้อย่างเต็มที่ (เช่นเว็บไซต์ปกติ) การลงทะเบียนจะต้องมีอีเมล
  2. หากต้องการข้อมูลหรือการดำเนินการและผู้ใช้จำรหัสผ่านไม่ได้พวกเขายังคงสามารถดำเนินการได้โดยคลิกที่ปุ่ม " ส่งอีเมลฉันเพื่อขออนุญาต " ด้านขวาถัดจากปุ่ม " ส่ง " ปกติ
  3. จากนั้นคำขอจะถูกส่งออกไปยังอีเมลโดยมีไฮเปอร์ลิงก์ถามว่าต้องการดำเนินการหรือไม่ สิ่งนี้คล้ายกับลิงค์อีเมลรีเซ็ตรหัสผ่าน แต่แทนที่จะรีเซ็ตรหัสผ่านจะดำเนินการเพียงครั้งเดียว
  4. จากนั้นผู้ใช้คลิกที่ "ใช่" และยืนยันว่าข้อมูลควรจะแสดงหรือการกระทำที่ควรดำเนินการเปิดเผยข้อมูล ฯลฯ

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

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


1

Salt-and-hash รหัสผ่านของผู้ใช้ตามปกติ เมื่อเข้าสู่ระบบผู้ใช้ให้อนุญาตให้ทั้งรหัสผ่านของผู้ใช้ (หลังการขาย / แฮช) แต่ยังอนุญาตให้สิ่งที่ผู้ใช้ป้อนให้ตรงกันด้วยเช่นกัน

วิธีนี้ช่วยให้ผู้ใช้สามารถป้อนรหัสผ่านลับของพวกเขา แต่ยังช่วยให้พวกเขาป้อนรหัสผ่านรุ่นเค็ม / แฮชซึ่งเป็นสิ่งที่คนจะอ่านจากฐานข้อมูล

โดยทั่วไปทำให้รหัสผ่านที่ผ่านการใส่เกลือ / แฮ็ชเป็นรหัสผ่าน "ข้อความธรรมดา"


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

1
@ArtjomB คำถามนี้ถามถึงวิธีการป้องกันรหัสผ่านของผู้ใช้ในขณะที่ให้การสนับสนุนลูกค้า (CS) สามารถพูดคุย / ส่งอีเมลถึงผู้ใช้ผ่านการป้อนรหัสผ่านที่ลืมได้ ด้วยการทำให้รุ่นแฮชสามารถใช้เป็นรหัสผ่านแบบข้อความธรรมดา CS สามารถอ่านและให้ผู้ใช้ใช้แทนรหัสผ่านที่ลืมได้ CS ยังสามารถใช้เพื่อเข้าสู่ระบบในฐานะผู้ใช้และช่วยให้พวกเขาผ่านงาน นอกจากนี้ยังช่วยให้ผู้ใช้ที่คุ้นเคยกับระบบรหัสผ่านที่ถูกลืมอัตโนมัติได้รับการปกป้องเนื่องจากรหัสผ่านที่พวกเขาป้อนและใช้งานถูกแฮช
Eliott

ฉันเห็น. ฉันไม่ได้อ่านคำถามทั้งหมด การใช้การเปรียบเทียบเวลาคงที่ยังมีความจำเป็นเพื่อป้องกันการแตกหักของระบบทั้งหมด
Artjom B.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.