Score:0

จะแน่ใจได้อย่างไรว่าไฟล์ในคอมพิวเตอร์ไคลเอ็นต์ไม่ได้ถูกดัดแปลงโดยไคลเอนต์

ธง ro

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

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

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

ฉันได้พิจารณาสิ่งต่อไปนี้:

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

  2. วิธีการเซ็นชื่อไฟล์เพื่อให้แน่ใจว่าเป็นของแท้ ฉันไม่รู้อะไรมากเกี่ยวกับการเข้ารหัส แต่สิ่งนี้ฟังดูเหมือน #1 ทุกประการ

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

เป็นไปได้ไหมที่จะบรรลุสิ่งที่ฉันพยายามจะบรรลุ

Score:0
ธง my

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

ฉันได้พิจารณาสิ่งต่อไปนี้:

  1. วิธีการเซ็นชื่อไฟล์เพื่อให้แน่ใจว่าเป็นของแท้

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

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

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

ผู้โจมตีไม่สามารถแก้ไขการประทับเวลาได้ เนื่องจากเขาไม่สามารถแก้ไขลายเซ็นได้ (และตรวจสอบได้) เขาสามารถแทนที่การประทับเวลา / ลายเซ็นด้วยอันก่อนหน้าได้ แต่นั่นจะไม่ได้อะไรเลย

วิธีที่เป็นไปได้ในการโจมตีสิ่งนี้:

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

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

ro flag
เฮ้ @poncho ขอบคุณสำหรับความคิดดีๆ ทั้งหมด เราจะใช้เวลาสักครู่เพื่อแยกแยะสิ่งนี้และติดต่อกลับไปหาคุณ ขอบคุณ
ro flag
ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ ฉันคิดว่าฉันเข้าใจในสิ่งที่คุณพูด การเข้ารหัส RSA แบบอสมมาตรสามารถใช้ย้อนกลับได้ โดยที่ไพรเวตคีย์จะเซ็นอะไรบางอย่าง จากนั้นจึงใช้คีย์สาธารณะเพื่อยืนยันความถูกต้อง จัดเก็บเวอร์ชันที่เซ็นชื่อและข้อความต้นฉบับ จากนั้นตรวจสอบให้แน่ใจว่าตรงกัน ลายเซ็นอาจมาจากคีย์ส่วนตัวเท่านั้น มีเหตุผล. เป็นไปได้ไหมที่จะแก้ไขโค้ดในโปรแกรมคอมไพล์? ฉันไม่ค่อยรู้เรื่องนั้นโดยพื้นฐานแล้วโปรแกรมใด ๆ สามารถแก้ไขได้และเป็นเพียงสิ่งที่นักพัฒนาต้องอยู่ด้วย?
poncho avatar
my flag
@Geoff: "เท่าที่โจมตี เป็นไปได้ไหมที่จะแก้ไขโค้ดในโปรแกรมที่คอมไพล์แล้ว"; ไม่ใช่เรื่องเล็กน้อย แต่สามารถทำได้โดยคนที่มีประสบการณ์เล็กน้อยและเครื่องมือที่เหมาะสม

โพสต์คำตอบ

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