ส่วนที่ท้าทายส่วนใหญ่เกี่ยวกับการประมวลผลภาพ และไม่มากเกี่ยวกับการเข้ารหัสลับ
คุณต้องการดึงเอนโทรปีที่เพียงพอออกจากรูปภาพในแบบที่เชื่อถือได้
เกี่ยวข้องกับวิธีการใช้รูปภาพและรูปแบบฝ่ายตรงข้ามของคุณเป็นอย่างมาก
หากฝ่ายตรงข้ามของคุณไม่รู้อะไรเลยเกี่ยวกับรูปภาพ คุณลักษณะหยาบๆ ง่ายๆ บางอย่างอาจเพียงพอ หากฝ่ายตรงข้ามของคุณรู้มากเกี่ยวกับรูปภาพ เช่น ได้เหลือบมองภาพนั้นแล้ว หรือรู้ว่าถ่ายจากที่ใด คุณต้องระมัดระวังให้มากขึ้น ข้อมูลใดที่ดึงออกมาจากภาพ และจะต้องใช้คุณสมบัติภาพที่มีเกรนละเอียดกว่า ซึ่งยากต่อการดึงออกมาอย่างคงที่
ถ้าทุกครั้งที่ใช้ภาพจะถูกสแกนด้วยเครื่องสแกนคุณภาพสูงเครื่องเดียวกัน และระหว่างการใช้งานก็เก็บไว้อย่างปลอดภัย ไม่ให้สีซีด ยับ หรือมีฝุ่นสะสม มันจะง่ายกว่าที่จะสแกนใกล้กันและมีเพียง การจัดตำแหน่งอัตโนมัติอย่างง่ายและการแยกส่วน (เชิงพื้นที่และสี) เพื่อให้ได้ลำดับบิตเกือบเท่ากันในแต่ละครั้ง
ถ้าอย่างนั้น คำถามก็คือ โมเดลข้อผิดพลาดที่เรามีสำหรับผลการสแกนคืออะไร? เราคาดหวังเสียงเกาส์หรือไม่? เกลือและพริกไทย? เสียงจัดตำแหน่ง? การหมุน? เพิ่มเสียงชิ้นใหญ่อย่างต่อเนื่อง? แสงรบกวน?
เสียงรบกวนแต่ละประเภทสามารถจัดการได้แตกต่างกัน
โครงร่างทั่วไปสำหรับวิธีแก้ปัญหา: เราใช้เทคนิคการประมวลผลภาพเพื่อลดสัญญาณรบกวนให้เหลือน้อยที่สุดเพื่อย้ายไปยังการแสดงซึ่งกำจัดสัญญาณรบกวนส่วนใหญ่ จากนั้นคุณจึงจำกัดพื้นที่ให้เหลือเพียงจุดที่ถูกต้องบางจุด และเลือกจุดที่ถูกต้องที่ใกล้ที่สุดกับสิ่งที่เราต้องลดสัญญาณรบกวนลง เป็นศูนย์
เราจะแยกแยะอย่างจริงจังเพียงพอและเลือกจุดที่ถูกต้องให้เบาบางพอที่จะทำให้เรามีจุดรบกวนเป็นศูนย์ได้อย่างน่าเชื่อถือ ณ จุดนี้ เรายังควรมีความยาวของคีย์มากเกินกว่าที่กำหนด แต่ในพื้นที่ที่ยังมีความเกี่ยวข้องอย่างใกล้ชิดกับภาพต้นฉบับ และด้วยเหตุนี้ บิตจะถูกเอนเอียงและสัมพันธ์กัน
การใช้แฮชการเข้ารหัสกับข้อมูลนั้นควรแยกแยะและทำให้เรามีเนื้อหาคีย์คุณภาพสูงเพียงพอที่ได้มาอย่างน่าเชื่อถือ และได้รับคีย์เดียวกันทุกครั้งที่คุณสแกน สามารถใช้เป็นคีย์ AES ได้
หากคุณต้องการสร้างคีย์ RSA คุณจะต้องใช้บิตสุ่มเพิ่มเติม อย่างไรก็ตาม คุณสามารถแยกบิตได้มากเท่าที่คุณสามารถแยกออกได้ในขณะที่ยังคงได้รับบิตเดิมทุกครั้ง และใช้สิ่งนั้นเพื่อเพาะ PRNG ที่เข้ารหัสและใช้เพื่อสร้างคีย์ส่วนตัว RSA
แก้ไข: ฉันไม่ได้พยายามใช้วิธีแก้ปัญหาทั้งหมด แต่ฉันเปิดโน้ตบุ๊กและเล่นกับโมเดลเสียงรบกวนที่แนะนำ สัญญาณรบกวนแบบเกาส์เซียนและการเปลี่ยนแปลง ฉันเชื่อว่าแก้ไขได้ง่าย ดังนั้นฉันจึงตรวจสอบว่าจะเกิดอะไรขึ้นหากฉันหมุนภาพ (ด้วยจินตนาการ interpolations) 2 องศาและหมุนกลับ 1.8 องศา ฉันได้ความแตกต่างสูงสุด (บนภาพด้านบน) ที่ 33% สิ่งนี้สนับสนุนคำกล่าวอ้างของฉันที่ว่าโดยการระบุการหมุนและการเลื่อนตัวนับที่ดีที่สุด การลดความละเอียดและการหาปริมาณอย่างจริงจังโดยไม่สนใจขอบ เราควร สามารถรับ 1-2 บิตต่อแชนเนลต่อ ~25 พิกเซล สำหรับภาพด้านบนนั้นออกมาอย่างน้อย 36K บิต และหลังจากแฮชแล้ว ฉันพนันได้เลยว่านี่จะมีเอนโทรปีจริง 128 บิต
แก้ไข 2: ฉันดาวน์โหลดรูปภาพสแกนสเกลสีเทาที่ให้มา และเล่นกับพวกเขา ฉันจัดแนวกึ่งอัตโนมัติเมื่อหมุนรูปภาพสองรูปแรก
img = io.imread("สแกน/scan078.tif")
img2 = io.imread("สแกน/scan079.tif")
imgr = transform.rotate (img,มุม = -0.78)
imgr2 = แปลงร่างหมุน (img2, มุม = -0.805)
tr1=transform.rescale(imgr[:-10,:-6],0.1)[20:-20,20:-20]
tr2=transform.rescale(imgr2[10:,6:],0.1)[20:-20,20:-20]
การอ่านนี้จะหมุนการจัดตำแหน่งแต่ละรายการและครอบตัด สุ่มตัวอย่าง 10x และครอบตัดเพื่อกำจัดขอบที่อาจมีสิ่งแปลกปลอม
สิ่งนี้ให้ความแตกต่างสูงสุดน้อยกว่า 6% ต่อค่าพิกเซล ซึ่งค่อนข้างดี อย่างไรก็ตาม ความแตกต่าง 6% นี้สามารถอยู่รอบๆ จุดตัดใดๆ ที่เราเลือกได้อย่างง่ายดาย ดังนั้นแม้แต่การหาปริมาณเชิงรุกก็ไม่ทำให้เกิดข้อผิดพลาด 0
bin1 = tr1> 0.5
bin2 = tr2> 0.5
สิ่งนี้ทำให้เกิดความแตกต่างใน 103 บิตจาก 27248 บิตหรือ 0.37% ข้อผิดพลาดเหล่านี้ดูเหมือนจะกระจายออกไปพอสมควร
การปรับขนาดและการหาปริมาณที่รุนแรงนี้ทำให้สูญเสียข้อมูลจำนวนมาก แต่เราอาจยังมีเพียงพอ
นี่คือลักษณะของภาพ:
ข้อผิดพลาดจะกระจายออกไปค่อนข้างดี (และเราสามารถใช้การเรียงสับเปลี่ยนแบบตายตัวหรือใช้สัญลักษณ์ที่ใหญ่ขึ้นได้เสมอหากจำเป็น) ตอนนี้เราสามารถใช้ขั้นตอนแก้ไขข้อผิดพลาดใดก็ได้ (เช่น Reed Solomon) เราจะใช้ขั้นตอนการถอดรหัส (ไม่ได้ทำสิ่งนี้จริง ๆ ) และเราควรได้ผลลัพธ์เดียวกันจากภาพที่มีความเป็นไปได้สูงและยังมีบิตประมาณ 20K
ถ้าเราลดขนาดลง 5x แทนที่จะเป็น 10x เราจะได้ 816 บิตที่แตกต่างกัน แต่ได้บิตมากถึง 4x ที่ความแตกต่าง 0.6% สามารถเล่นกับสิ่งนี้และค้นหาที่เหมาะสม
เราอาจทำได้ดีกว่านี้ในขั้นตอนการหาปริมาณและเก็บรักษาข้อมูลเพิ่มเติมได้อย่างน่าเชื่อถือ การกำหนดปริมาณที่รุนแรงที่ฉันใช้จะใช้ได้ผลกับภาพถ่ายที่มีความสมดุลพอสมควรเท่านั้น ภาพที่เปิดรับแสงมากเกินไปจะออกมาเป็นค่าเดียวทั้งหมด เราสามารถเพิ่มการประมวลผลล่วงหน้าเพื่อจัดการกับสถานการณ์นี้ได้