การจัดเก็บคีย์ความปลอดภัยในหน่วยความจำของอุปกรณ์ฝังตัว


10

ฉันกำลังทำงานกับอุปกรณ์ฝังตัวซึ่งส่ง / รับข้อมูลและเก็บไว้ในโหมด ciphertext (โหมดเข้ารหัส) ตอนนี้วิธีการที่ดีที่สุดในการจัดเก็บคีย์ (ฉันใช้ ARM CORTEX M series MCU) คืออะไร

1- การจัดเก็บคีย์ในหน่วยความจำ SRAM และในแต่ละลำดับการบูตให้ฉีดคีย์เข้ากับ MCU ในตัวและเก็บไว้ในหน่วยความจำ SRAM มันเป็นวิธีที่ดีที่สุดที่ฉันคิดว่าจากนั้นเมื่อการรับรู้ของ MCU (ด้วยเซ็นเซอร์การงัดแงะหรือ ... ) มันสามารถลบ SRAM ได้อย่างรวดเร็วและรีเซ็ตตัวเอง ข้อเสีย: หากผู้โจมตีประสบความสำเร็จในการส่งแทมเปอร์และเข้าถึงอุปกรณ์หน่วยความจำ SRAM นั้นปลอดภัยเพียงใด (เทียบกับการสร้างโค้ด) ฉันไม่สามารถค้นหาความสามารถด้านความปลอดภัยสำหรับหน่วยความจำนี้ใน MCU

สร้าง 2 คีย์และเก็บไว้ในหน่วยความจำแฟลชในการตั้งโปรแกรม MCU การสนับสนุนหน่วยความจำแฟลชของ MCU CRP (การป้องกันการอ่านรหัส) ซึ่งป้องกันจากการขุดรหัสและด้วยความช่วยเหลือของเครื่องยนต์ AES ภายในและเครื่องยนต์ RNG (การสร้างหมายเลขสุ่ม) เราสามารถสร้างคีย์สุ่มและเข้ารหัสหน่วยความจำแฟลช หน่วยความจำที่ตั้งโปรแกรมได้เพียงครั้งเดียว - หน่วยความจำที่เข้ารหัส 128 บิต) จากนั้นในการประมวลผลโค้ดเราถอดรหัสหน่วยความจำแฟลชด้วยปุ่ม RNG และการเข้าถึงรหัสเริ่มต้นและรหัส ข้อเสีย: คีย์ที่เก็บไว้ในหน่วยความจำแบบไม่ลบเลือนแทมเพอร์จะไร้ประโยชน์และผู้โจมตีมีเวลามากมายในการใช้คีย์

คีย์ 3-Stored ในหน่วยความจำ EEPROM การรวมกันของ 2 วิธีข้างต้นคีย์ที่เก็บไว้ในหน่วยความจำแบบไม่ลบเลือน

ฉันพิจารณา LPC18S57FBD208 (cortex m3 ที่มีหน่วยความจำแฟลช 1MB, 180MHZ, 136KB SRAM, 16KB EEPROM และตัวควบคุม TFT LCD ซึ่งฉันต้องขับ 7 "TFT LCD และ AES 128 bit crypto engine) สำหรับข้อเสนออื่น ๆ

คำตอบ:


18

ไม่มีตัวเลือกใดที่ดีกว่าหรือแย่กว่าตัวเลือกอื่นโดยเฉพาะเพราะมันไม่ปลอดภัยอย่างยิ่ง ฉันจะไปกับตัวเลือก 4

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

  2. อย่าเก็บกุญแจไว้ในหน่วยความจำแบบไม่ลบเลือนคุณถูกต้องแล้ว ไม่สำคัญว่าคุณจะป้องกัน EEPROM หรือหน่วยความจำแฟลชไม่ให้อ่าน ฟิวส์ป้องกันการอ่านรหัสนั้นกลับด้านได้ง่าย ผู้โจมตีต้องการเพียงแค่ decap (ลบหรือทำลายสารเคมีออกไปบรรจุภัณฑ์อีพ็อกซี่สีดำเพื่อให้ซิลิกอนตายภายใน) ณ จุดนี้พวกเขาสามารถปกปิดส่วนหนึ่งของตายที่ไม่ใช่เซลล์หน่วยความจำที่ระเหยได้ (ส่วนเหล่านี้เป็นปกติมากและในขณะที่เซลล์หน่วยความจำส่วนบุคคลมีขนาดเล็กถึงขนาดใหญ่โครงสร้างขนาดใหญ่สามารถเป็นได้) และชิ้นส่วนเล็ก ๆ ทึบแสงเป็นรังสียูวีจะถูกซ่อนอยู่เหนือส่วนนั้น จากนั้นผู้โจมตีสามารถส่องแสง UV บนชิปได้ประมาณ 5-10 นาทีและรีเซ็ตฟิวส์ทั้งหมดรวมถึงฟิวส์ CRP หน่วยความจำ OTP สามารถอ่านได้โดยโปรแกรมเมอร์มาตรฐานทุกคน

หรือถ้าพวกเขาได้รับเงินสนับสนุนอย่างดี (กล่าวว่าการรับกุญแจเหล่านั้นมีค่ามากกว่า $ 1,000 ถึงใครบางคน) พวกเขาสามารถอ่านเซลล์หน่วยความจำโดยตรงด้วยกล้องจุลทรรศน์อิเล็กตรอนหลายชนิด

เพื่อความปลอดภัยกุญแจจะต้องถูกลบไม่ถูกปกปิด

  1. ไม่ด้วยเหตุผลเดียวกันข้างต้น

ตอนนี้ไปที่ตัวเลือก 4:

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

อย่างไรก็ตามมีปัญหาซึ่งไม่มีอะไรยกเว้น CPU มีความคิดว่ารหัสลับคืออะไร ไม่มีปัญหา: ใช้การเข้ารหัสคีย์สาธารณะ สิ่งที่คุณเก็บไว้ในหน่วยความจำ OTP คือกุญแจสาธารณะของคุณ กุญแจนี้สามารถอ่านได้โดยทุกคนคุณสามารถโพสต์ไว้บนสแต็คแลกเปลี่ยนคุณสามารถวาดมันที่ด้านข้างของเรือบรรทุกน้ำมันในตัวอักษรสูง 5 ฟุตมันไม่สำคัญ สิ่งที่ยอดเยี่ยมเกี่ยวกับการเข้ารหัสรหัสสาธารณะคือมันไม่สมมาตร กุญแจสำคัญในการเข้ารหัสบางสิ่งไม่สามารถถอดรหัสได้ซึ่งต้องใช้รหัสส่วนตัว และในทางกลับกันกุญแจในการถอดรหัสบางอย่างที่ถูกเข้ารหัสโดยกุญแจสาธารณะนั้นไม่สามารถใช้ในการเข้ารหัสบางอย่างได้ ดังนั้นซีพียูจึงสร้างคีย์ลับใช้คีย์สาธารณะที่คุณเก็บไว้เพื่อเข้ารหัสคีย์ลับและส่งมันผ่านทาง USB หรือ RS232 หรืออะไรก็ตามที่คุณต้องการ การอ่านรหัสลับต้องใช้รหัสส่วนตัวของคุณ ซึ่งไม่จำเป็นต้องจัดเก็บส่งหรือเกี่ยวข้องกับชิปเลย เมื่อคุณมีรหัสลับที่ถอดรหัสด้วยรหัสส่วนตัวของคุณ (ที่อื่นนอกชิป) คุณจะถูกตั้งค่า คุณมีรหัสลับที่ส่งอย่างปลอดภัยซึ่งถูกสร้างขึ้นทั้งหมดภายในชิปโดยไม่ต้องเก็บอะไรเลยยกเว้นกุญแจสาธารณะซึ่งตามที่ระบุไว้ก่อนหน้านี้ไม่จำเป็นต้องได้รับการปกป้องจากการอ่าน

กระบวนการนี้เรียกว่าการเจรจาสำคัญอย่างเป็นทางการและทุกสิ่งใช้มัน วันนี้คุณใช้มันหลายครั้ง มีทรัพยากรและไลบรารีมากมายให้จัดการ ได้โปรดอย่าเคย 'ฉีด' กุญแจเข้าไปในสิ่งใด

สิ่งสุดท้ายที่ต้องพูดถึง: ทั้งหมดนี้คือ moot เพราะคีย์ AES สามารถกู้คืนได้ง่ายโดยใช้การโจมตีช่องทางด้านข้างซึ่งนั่งบนแหล่งจ่ายไฟและวัดการเปลี่ยนแปลงนาทีในการดึงปัจจุบันและเวลาระหว่างการเปลี่ยนแปลงที่เกิดจากบิตพลิกใน CPU เป็นทะเบียน เมื่อรวมกับความรู้เกี่ยวกับวิธี AES (หรือชุดใดชุดหนึ่งของอัลกอริทึมการเข้ารหัสที่เป็นไปได้ที่สามารถใช้งานได้) ทำให้มันค่อนข้างง่ายและราคาไม่แพงในการกู้คืนกุญแจ ไม่อนุญาตให้อ่านคีย์ แต่สามารถ จำกัด พื้นที่ของคีย์ให้เล็กลงอย่างน่าขันเช่น 255 คีย์ที่เป็นไปได้ ชิปนั้นไม่สามารถตรวจจับได้เพราะมันอยู่ในแนวต้นน้ำ

สิ่งนี้ได้เอาชนะตัวตักการบูต AES-256 บนตัวประมวลผล crypto 'ปลอดภัย' และมันก็ไม่ได้ยากขนาดนั้น เท่าที่ฉันรู้ไม่มีตัวนับฮาร์ดแวร์ที่แท้จริงในการโจมตีครั้งนี้ อย่างไรก็ตามมันเป็นอัลกอริทึมการเข้ารหัสด้วยตนเองและวิธีที่พวกเขาต้องการให้ CPU พลิกบิตซึ่งเป็นสาเหตุของความเสี่ยงนี้ ฉันสงสัยว่าอัลกอริธึมการต้านทานด้านข้างหรือการพิสูจน์ช่องสัญญาณด้านข้างจะต้องได้รับการพัฒนา (และหวังว่าจะเป็น)

ดังนั้นเมื่อถึงตอนนี้คำตอบที่แท้จริงในการจัดเก็บคีย์ (หรือเพียงแค่ใช้คีย์ชั่วคราว) บนอุปกรณ์ฝังตัวอย่างปลอดภัยก็คือคุณไม่สามารถทำได้

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

สร้างปุ่มและเก็บไว้เป็นเวลาสั้น ๆ เท่าที่จะทำได้


ขอบคุณ Metacollin ที่รักจริงๆสำหรับการล้างฉัน แต่โครงการของฉันประกอบด้วยผู้อ่านจำนวนมาก (มี mcu) และ MCU เป้าหมายจำนวนมากผู้อ่านแต่ละคนจะต้องสามารถอ่านเป้าหมายใด ๆ และเป้าหมายใด ๆ ต้องสามารถอ่านได้โดยผู้อ่านคนใดคนหนึ่งเพราะ ฉันคิดว่าพวกเขาจะต้องเห็นด้วยกับคีย์เฉพาะสำหรับการขนส่งข้อมูล และจากคำตอบของคุณฉันคิดว่ามีความแตกต่างไม่มากนักเช่น LPC18S57 Secure cortex m3 และ STM32F429 cortex m4 ทั่วไปและแม้แต่ LPC1788 cortex m3 (ทางเลือกที่ถูกกว่า) ฉันไม่ได้ทำโครงการลับสุดยอด แต่ฉันต้องการทำ ปลอดภัยเท่าที่ฉันจะทำได้
Mahmoud Hosseinipour

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

2
หากกุญแจไม่ควรถูกเก็บไว้ในแฟลชจากนั้นรหัสเดียวกันจะสร้างรหัส ... เพียงแค่ต้องแปลรหัส op เป็นแอสเซมเบลอร์แล้วคุณมีกุญแจ
Lundin

The wonderful thing about private key cryptography is that it is asymmetric. แม้ว่าจะชัดเจนจากการโพสต์ของคุณที่คุณรู้ว่าฉันจะพูดถึงมันสำหรับผู้อ่านคนอื่น ๆ ... s / ส่วนตัว / สาธารณะในการอ้างถึง
เรเดียน

คุณอาจสามารถรักษาความปลอดภัยช่องสัญญาณระหว่างอุปกรณ์สองเครื่องใด ๆ โดยใช้วิธีที่ 4 อย่างไรก็ตามหากไม่มีความลับที่ใช้ร่วมกันคุณไม่สามารถรับประกันความถูกต้องของอุปกรณ์ที่คุณกำลังสื่อสารอยู่ได้ หากกรณีการใช้งานของคุณต้องการการรับรองความถูกต้องคุณจะไม่สามารถแลกเปลี่ยนคีย์ได้ดีไปกว่านี้หากคุณเก็บข้อมูลลับที่แชร์ไว้ในแฟลช หากคุณต้องการความปลอดภัยที่ดีขึ้นควรใช้ชิป crypto
เกร็ก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.