Score:0

การค้นหาอัลกอริธึมการเข้ารหัสแบบสมมาตรที่ปรับให้เหมาะสมสำหรับข้อความเข้ารหัสที่สั้นและมนุษย์อ่านได้

ธง cn

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

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

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

รหัสอย่างน้อยต้องฝังรหัสผู้ใช้ (จำนวนเต็ม) และวันหมดอายุ (อาจเป็นเพียงจำนวนเต็ม เช่น จำนวนวันตั้งแต่ 1/1/2565) และจะมอบให้กับบุคคลเดียวกันเพียงครั้งเดียวในวันเดียวกัน ดังนั้นวันที่ปัจจุบันสามารถทำหน้าที่เป็นแป้นเวลาเดียว

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

วิธีนี้สามารถทำได้?

Fleeep avatar
br flag
'ผู้ใช้สามารถโทรติดต่อฝ่ายสนับสนุนด้านเทคนิคจากโทรศัพท์พื้นฐานที่สถานที่และรับรหัสด้วยวาจา" ดูไม่ปลอดภัยอย่างยิ่ง คุณเคยพิจารณาใช้โทเค็น (ฮาร์ดแวร์-) ซึ่งมีวลีสำหรับการเข้าสู่ระบบหรือไม่
cn flag
ทำไมถึงไม่ปลอดภัย? บางคนสามารถดักฟังการโทรได้ แต่ฉันไม่กังวลเกี่ยวกับบางคนที่ได้รับรหัสที่ใช้ได้เพียงวันเดียว และฉันไม่กังวลเกี่ยวกับการแอบอ้างเช่นกัน
Fleeep avatar
br flag
หากคุณไม่กังวลเกี่ยวกับการแอบอ้าง แล้วทำไมผู้ใช้ต้องเข้าสู่ระบบ? และคุณช่วยระบุความหมายของคำว่า "แคชข้อมูลเสียหาย" ได้ไหม เนื่องจากรหัสที่ได้รับผ่านทางโทรศัพท์จะต้องได้รับการตรวจสอบด้วยวิธีการใดวิธีหนึ่ง (เช่น กับข้อมูลบางอย่างที่บันทึกไว้ในแอพ) หากแอพไม่มีแคช (ถาวร) คุณจะเหลือข้อมูล "ฮาร์ดโค้ด" ในแอพซึ่งไม่สามารถเปลี่ยนแปลงสำหรับผู้ใช้ที่แตกต่างกัน
cn flag
แคชเป็นไฟล์ แต่บางครั้งในสนามไฟล์นี้เสียหายหรือถูกลบโดยข้อผิดพลาดของผู้ใช้ซึ่งอยู่ในนั้น แต่เรายังต้องทำให้แอปทำงานไม่งั้นเราดูแย่ในฐานะบริษัท แอปยังคงมีอัลกอริทึมของมันอยู่ เว้นแต่ว่ามันจะลบหรือทำให้โปรแกรมสั่งการเสียหาย และแน่นอนว่าเราพลาดไปแล้ว - และอัลกอริทึมนั้นสามารถเรียกใช้และตรวจสอบว่ารหัสนั้นเป็น "รหัสประตูหลัง" ที่ถูกต้องสำหรับวันนี้
cn flag
ในการแอบอ้าง ฉันหมายถึงผู้ใช้ที่ไม่ได้รับอนุญาตที่แสร้งทำเป็นคนอื่นและโทรหาและขอรหัสประตูหลัง หรือใครบางคนที่ดักฟังการโทรและแสร้งทำเป็นเป็นฝ่ายสนับสนุนด้านเทคนิค ผู้ใช้และฝ่ายสนับสนุนด้านเทคนิครู้จักกัน และเราจะถือว่าการจดจำกันและกันด้วยเสียงก็เพียงพอแล้วสำหรับการรักษาความปลอดภัยที่นี่
cn flag
ภารกิจคือ: ฝ่ายสนับสนุนด้านเทคนิคสามารถพูดด้วยวาจาให้รหัสที่แอปสามารถถอดรหัสเพื่อเปิดเผยรหัสผู้ใช้ โดยที่ "วาจา" หมายถึงสั้นและมนุษย์ใช้งานได้หรือไม่
Score:2
ธง br

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

รายละเอียดเพิ่มเติม: คำถามถามถึงการรับรองความถูกต้อง (ครั้งเดียว) โดยที่

  1. มนุษย์สามารถป้อนข้อมูลได้อย่างง่ายดายผ่านช่องทางที่รับรองความถูกต้อง (ซึ่งไม่อยู่ภายใต้การแอบฟัง)
  2. แอปพลิเคชันไม่มีที่เก็บข้อมูลถาวร/เฉพาะผู้ใช้

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


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

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


ความคิดเห็น: "เพื่อให้วันที่ปัจจุบันสามารถทำหน้าที่เป็นแป้นเวลาเดียว"

โปรดทราบว่าเพื่อให้แพดแบบใช้ครั้งเดียวมีความปลอดภัยอย่างสมบูรณ์ คีย์จะต้องสุ่มสิ่งนี้ไม่ได้เพิ่มความปลอดภัยใดๆ


อยู่นอกขอบเขตเนื่องจากไม่ถือว่าปลอดภัย หรืออยู่ในขอบเขตของคำถาม OPs:

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

(1) ค่าฮาร์ดโค้ด

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

(2) วันที่ไม่ได้เพิ่มความปลอดภัยอย่างแท้จริง ยกเว้นว่าฝ่ายตรงข้ามจะต้องรู้ว่าวันที่ต่างกันมีข้อความรหัสผ่านที่แตกต่างกัน

ดังนั้นฉันจะ ขอแนะนำอย่างยิ่งกับสิ่งนี้.

Score:0
ธง cn

ในท้ายที่สุด ฉันไม่ได้แก้ปัญหานี้ด้วยการเข้ารหัสแบบสมมาตร แต่เพียงแค่สร้างแฮชบนเซิร์ฟเวอร์และแฮชบนไคลเอ็นต์ แล้วเปรียบเทียบกัน แฮชเป็นเพียง 32 บิต int ดังนั้นจึงง่ายพอที่จะอ่านทางโทรศัพท์ ฉันใช้คีย์และวันที่ในแฮช ดังนั้นมันจึงแตกต่างกันทุกวัน

โพสต์คำตอบ

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