ไม่มีตัวเลือกใดที่ดีกว่าหรือแย่กว่าตัวเลือกอื่นโดยเฉพาะเพราะมันไม่ปลอดภัยอย่างยิ่ง ฉันจะไปกับตัวเลือก 4
SRAM เป็นสถานที่ที่ปลอดภัยที่สุดในการเก็บกุญแจ แต่คุณจะต้องไม่ฉีดมันจากโลกภายนอก พวกเขาจะต้องถูกสร้างขึ้นภายในโปรเซสเซอร์เสมอในระหว่างการบู๊ต การทำสิ่งอื่นจะทำให้ส่วนที่เหลือเป็นโมฆะทันทีโดยอัตโนมัติ - มันไม่ปลอดภัยโดยอัตโนมัติ
อย่าเก็บกุญแจไว้ในหน่วยความจำแบบไม่ลบเลือนคุณถูกต้องแล้ว ไม่สำคัญว่าคุณจะป้องกัน EEPROM หรือหน่วยความจำแฟลชไม่ให้อ่าน ฟิวส์ป้องกันการอ่านรหัสนั้นกลับด้านได้ง่าย ผู้โจมตีต้องการเพียงแค่ decap (ลบหรือทำลายสารเคมีออกไปบรรจุภัณฑ์อีพ็อกซี่สีดำเพื่อให้ซิลิกอนตายภายใน) ณ จุดนี้พวกเขาสามารถปกปิดส่วนหนึ่งของตายที่ไม่ใช่เซลล์หน่วยความจำที่ระเหยได้ (ส่วนเหล่านี้เป็นปกติมากและในขณะที่เซลล์หน่วยความจำส่วนบุคคลมีขนาดเล็กถึงขนาดใหญ่โครงสร้างขนาดใหญ่สามารถเป็นได้) และชิ้นส่วนเล็ก ๆ ทึบแสงเป็นรังสียูวีจะถูกซ่อนอยู่เหนือส่วนนั้น จากนั้นผู้โจมตีสามารถส่องแสง UV บนชิปได้ประมาณ 5-10 นาทีและรีเซ็ตฟิวส์ทั้งหมดรวมถึงฟิวส์ CRP หน่วยความจำ OTP สามารถอ่านได้โดยโปรแกรมเมอร์มาตรฐานทุกคน
หรือถ้าพวกเขาได้รับเงินสนับสนุนอย่างดี (กล่าวว่าการรับกุญแจเหล่านั้นมีค่ามากกว่า $ 1,000 ถึงใครบางคน) พวกเขาสามารถอ่านเซลล์หน่วยความจำโดยตรงด้วยกล้องจุลทรรศน์อิเล็กตรอนหลายชนิด
เพื่อความปลอดภัยกุญแจจะต้องถูกลบไม่ถูกปกปิด
- ไม่ด้วยเหตุผลเดียวกันข้างต้น
ตอนนี้ไปที่ตัวเลือก 4:
- เพียงแค่ใช้การเข้ารหัส การกระจายคีย์เป็นปัญหาที่แก้ไขแล้ว ดังนั้นใช้วิธีแก้ปัญหาที่พร้อมใช้งาน ชิพควรใช้ RNG และควรทำการพิจารณาอื่น ๆ อีกมากมายเพื่อให้แน่ใจว่ามีปริมาณเอนโทรปีเพียงพอและบูตโหลดเดอร์ควรบูตโดยตรงในโปรแกรมที่สร้างรหัสลับที่จำเป็นซึ่งควรเป็นวัตถุประสงค์ทั่วไป ลงทะเบียนและย้ายไปที่ SRAM โดยตรงซึ่งจะอยู่จนกว่าจะถูกลบ
อย่างไรก็ตามมีปัญหาซึ่งไม่มีอะไรยกเว้น CPU มีความคิดว่ารหัสลับคืออะไร ไม่มีปัญหา: ใช้การเข้ารหัสคีย์สาธารณะ สิ่งที่คุณเก็บไว้ในหน่วยความจำ OTP คือกุญแจสาธารณะของคุณ กุญแจนี้สามารถอ่านได้โดยทุกคนคุณสามารถโพสต์ไว้บนสแต็คแลกเปลี่ยนคุณสามารถวาดมันที่ด้านข้างของเรือบรรทุกน้ำมันในตัวอักษรสูง 5 ฟุตมันไม่สำคัญ สิ่งที่ยอดเยี่ยมเกี่ยวกับการเข้ารหัสรหัสสาธารณะคือมันไม่สมมาตร กุญแจสำคัญในการเข้ารหัสบางสิ่งไม่สามารถถอดรหัสได้ซึ่งต้องใช้รหัสส่วนตัว และในทางกลับกันกุญแจในการถอดรหัสบางอย่างที่ถูกเข้ารหัสโดยกุญแจสาธารณะนั้นไม่สามารถใช้ในการเข้ารหัสบางอย่างได้ ดังนั้นซีพียูจึงสร้างคีย์ลับใช้คีย์สาธารณะที่คุณเก็บไว้เพื่อเข้ารหัสคีย์ลับและส่งมันผ่านทาง USB หรือ RS232 หรืออะไรก็ตามที่คุณต้องการ การอ่านรหัสลับต้องใช้รหัสส่วนตัวของคุณ ซึ่งไม่จำเป็นต้องจัดเก็บส่งหรือเกี่ยวข้องกับชิปเลย เมื่อคุณมีรหัสลับที่ถอดรหัสด้วยรหัสส่วนตัวของคุณ (ที่อื่นนอกชิป) คุณจะถูกตั้งค่า คุณมีรหัสลับที่ส่งอย่างปลอดภัยซึ่งถูกสร้างขึ้นทั้งหมดภายในชิปโดยไม่ต้องเก็บอะไรเลยยกเว้นกุญแจสาธารณะซึ่งตามที่ระบุไว้ก่อนหน้านี้ไม่จำเป็นต้องได้รับการปกป้องจากการอ่าน
กระบวนการนี้เรียกว่าการเจรจาสำคัญอย่างเป็นทางการและทุกสิ่งใช้มัน วันนี้คุณใช้มันหลายครั้ง มีทรัพยากรและไลบรารีมากมายให้จัดการ ได้โปรดอย่าเคย 'ฉีด' กุญแจเข้าไปในสิ่งใด
สิ่งสุดท้ายที่ต้องพูดถึง: ทั้งหมดนี้คือ moot เพราะคีย์ AES สามารถกู้คืนได้ง่ายโดยใช้การโจมตีช่องทางด้านข้างซึ่งนั่งบนแหล่งจ่ายไฟและวัดการเปลี่ยนแปลงนาทีในการดึงปัจจุบันและเวลาระหว่างการเปลี่ยนแปลงที่เกิดจากบิตพลิกใน CPU เป็นทะเบียน เมื่อรวมกับความรู้เกี่ยวกับวิธี AES (หรือชุดใดชุดหนึ่งของอัลกอริทึมการเข้ารหัสที่เป็นไปได้ที่สามารถใช้งานได้) ทำให้มันค่อนข้างง่ายและราคาไม่แพงในการกู้คืนกุญแจ ไม่อนุญาตให้อ่านคีย์ แต่สามารถ จำกัด พื้นที่ของคีย์ให้เล็กลงอย่างน่าขันเช่น 255 คีย์ที่เป็นไปได้ ชิปนั้นไม่สามารถตรวจจับได้เพราะมันอยู่ในแนวต้นน้ำ
สิ่งนี้ได้เอาชนะตัวตักการบูต AES-256 บนตัวประมวลผล crypto 'ปลอดภัย' และมันก็ไม่ได้ยากขนาดนั้น เท่าที่ฉันรู้ไม่มีตัวนับฮาร์ดแวร์ที่แท้จริงในการโจมตีครั้งนี้ อย่างไรก็ตามมันเป็นอัลกอริทึมการเข้ารหัสด้วยตนเองและวิธีที่พวกเขาต้องการให้ CPU พลิกบิตซึ่งเป็นสาเหตุของความเสี่ยงนี้ ฉันสงสัยว่าอัลกอริธึมการต้านทานด้านข้างหรือการพิสูจน์ช่องสัญญาณด้านข้างจะต้องได้รับการพัฒนา (และหวังว่าจะเป็น)
ดังนั้นเมื่อถึงตอนนี้คำตอบที่แท้จริงในการจัดเก็บคีย์ (หรือเพียงแค่ใช้คีย์ชั่วคราว) บนอุปกรณ์ฝังตัวอย่างปลอดภัยก็คือคุณไม่สามารถทำได้
แต่อย่างน้อยถ้าคุณสร้างคีย์ใหม่ทุกครั้งที่ใช้การเจรจาคีย์ในตัวเลือกที่ 4 การโจมตีช่องทางด้านข้างสามารถประนีประนอมคีย์ของช่องทางที่ใช้งานอยู่เท่านั้นและหากพวกเขามีเวลาสักครู่เพื่อตรวจสอบพลังงานในขณะที่มันเข้ารหัสข้อมูล . หากคุณต่อรองคีย์ใหม่ที่สร้างขึ้นภายในบ่อยครั้งสิ่งนี้อาจทำให้เกิดความปลอดภัยได้
สร้างปุ่มและเก็บไว้เป็นเวลาสั้น ๆ เท่าที่จะทำได้