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