เคอร์เนล 5.1 ซึ่งเป็นปัจจุบันในขณะที่ฉันเขียนมีสองรูปแบบที่แตกต่างกันสำหรับสตริงตัวเลขรูปแบบ "เก่า" และรูปแบบ "ใหม่" ทุกอย่างในคำถามนี้และเห็นได้ชัดว่าเอกสารทั้งหมดเกี่ยวข้องกับรูปแบบ "เก่า" ดังนั้นฉันจะอธิบายที่นี่ นี่เป็นเพียงการเข้ารหัส หากใช้ integrity กับ dm-crypt ต้องพิจารณา ciphers ของ AEAD และมันซับซ้อนมากขึ้น
รูปแบบการแยกวิเคราะห์โดยเคอร์เนลคือ " cipher [ :keycount ] -โหมด-ivmode [ :ivopts ]" aes-xts-plain64ตัวอย่าง: blowfish-cbc-essiv:sha256, aes:64-cbc-lmk,
Cipher
เลขศูนย์ที่จะใช้ตัวอย่างaes,anubis,twofish,arc4ฯลฯ ไดรเวอร์ DM-ฝังศพใต้ถุนโบสถ์เคอร์เนลไม่ได้มีรายชื่อของยันต์ นี่คือการส่งผ่านไปยัง Linux Crypto API ดังนั้นรหัสที่เหมาะสมใด ๆ ที่สนับสนุนโดยเคอร์เนลสามารถใช้ได้
keycount
พลังงานทางเลือกของจำนวนสองปุ่มเพื่อใช้กับรหัส ค่าเริ่มต้นนี้เป็น 1 สำหรับทุกอย่างยกเว้นlmkivmode ซึ่งเป็นค่าเริ่มต้นที่ 64 ซึ่งใช้กับ LMK เท่านั้นและค่าอื่น ๆ ที่ไม่ใช่ 1 จะไม่ทำงานอย่างถูกต้องกับโหมดอื่น ๆ
mode โหมดบล็อกการเชื่อมต่อที่จะใช้กับรหัส ตัวอย่างเช่นecb,,cbc xtsนอกเหนือจากการรู้ว่าecbไม่มี IV แล้วไดรเวอร์ md-crypt จะส่งผ่านสิ่งนี้ไปยัง Linux Crypto API และสามารถใช้โหมดการโยงใด ๆ ที่เคอร์เนลสนับสนุน
ivmodeอัลกอริทึมที่ใช้ในการสร้างเวกเตอร์เริ่มต้น (IV) สำหรับแต่ละภาค ในการเข้ารหัสคีย์แบบสมมาตรทั่วไปซึ่งแตกต่างจาก DM-crypt, IV เป็นอีกบิตของข้อมูลที่ส่งผ่านไปยังตัวเลขพร้อมกับคีย์เมื่อทำการเข้ารหัสหรือถอดรหัส มีการส่งผ่าน IV เพียงครั้งเดียวสำหรับการดำเนินการทั้งหมด เนื่องจาก dm-crypt จำเป็นต้องสามารถอ่านและเขียนแต่ละส่วนได้จึงไม่เข้ารหัสดิสก์ทั้งหมดเป็นการดำเนินการเดียว แต่มี IV สำหรับแต่ละภาคส่วน แทนที่จะส่งผ่านข้อมูลเป็น IV อัลกอริทึมสำหรับการสร้าง IV จะถูกระบุที่นี่ นี่ไม่ใช่ส่วนหนึ่งของ Linux Crypto API เนื่องจากการสร้าง IV ไม่ได้ทำโดยการเข้ารหัสและค่า ivmode ที่อนุญาตถูกกำหนดไว้ในไดรเวอร์ dm-crypt พวกเขาคือ:
plain, plain64, plain64be, benbi
เหล่านี้ก็ใช้ตัวเลขภาคในรูปแบบต่างๆเช่นที่สี่ หมายถึงโหมดบล็อกเช่น XTS ที่ออกแบบมาเพื่อต่อต้านการโจมตีเช่นลายน้ำเมื่อใช้ IV ที่ง่ายและคาดการณ์ได้ plain64ดูเหมือนจะแนะนำมากที่สุด
nullIV เป็นศูนย์เสมอ สำหรับการทดสอบและความเข้ากันได้แบบย้อนหลังคุณไม่ควรใช้สิ่งนี้
lmk เข้ากันได้กับรูปแบบการเข้ารหัส Loop-AES
tcw เข้ากันได้กับ TrueCrypt
essivใช้หมายเลขเซ็กเตอร์ที่เข้ารหัสด้วยแฮชของคีย์ ความหมายสำหรับโหมดเช่น CBC, ที่ไม่ทนต่อการโจมตีต่างๆเมื่อใช้ IV plain64ง่ายๆเช่น
ivoptsแฮชที่จะใช้กับessiv ivmode จะถูกข้ามสำหรับโหมดอื่น ๆ ทั้งหมด
ในกรณีพิเศษ " cipher-plain " หรือเพียงแค่ " cipher " ถูกตีความว่าเป็น " cipher-cbc-plain " อีกกรณีพิเศษคือecbโหมดนั้นไม่มีโหมดivmodeให้ระบุ
สิ่งนี้เกี่ยวข้องกับ /proc/crypto
ด้วยความเคารพ/proc/cryptoเฉพาะตัวเลขและโหมดมีความเกี่ยวข้อง DM-crypt พร้อมสร้าง Crypto API ของรูปแบบ " โหมด(ตัวเลข) " และร้องขอสิ่งนี้จากเคอร์เนล นี่คือสิ่งหนึ่งที่ควรมองหาใน/proc/cryptoขณะที่สำหรับname skcipherตัวอย่าง:
name : xts(aes)
driver : xts-aes-aesni
module : kernel
priority : 401
refcnt : 1
selftest : passed
internal : no
type : skcipher
async : yes
blocksize : 16
min keysize : 32
max keysize : 64
ivsize : 16
chunksize : 16
walksize : 16
typeของskcipherบ่งชี้นี้ตัวเลขที่สำคัญสมมาตรสิ่ง DM-ฝังศพใต้ถุนโบสถ์การใช้งานและชื่อของxts(aes)จะถูกเขียนaes-xtsเมื่อระบุไว้กับ DM-ฝังศพใต้ถุนโบสถ์ keysizeสาขานอกจากนี้ยังบอกเราว่าขนาดของคีย์ที่สามารถนำมาใช้กับการเข้ารหัสนี้
หากนี่มาจากโมดูลชื่อโมดูลอาจปรากฏขึ้นในmoduleบรรทัด อย่างไรก็ตาม ciphers จำนวนมาก (โดยปกติแล้วจะอยู่ในซอฟต์แวร์ที่ไม่มีรหัสเฉพาะฮาร์ดแวร์) ถูกนำไปใช้เป็นตัวเลขทั่วไปที่รวมกับรหัสบล็อกผูกมัดทั่วไปเพื่อสร้าง skcipher สุดท้าย ตัวอย่างเช่น:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
ในกรณีนี้การเข้ารหัสสุสานจะถูกรวมกับ XTS เคอร์เนลบล็อกผูกมัดรหัสโหมดการผลิตตัวเลขสุดท้ายซึ่งได้รับมอบหมายโมดูลของxts(anbuis) kernelแต่เพื่อให้มีสิ่งนี้เราต้องใช้รหัสสุสานทั่วไปซึ่งมาจากanubisโมดูล ciphers ส่วนใหญ่มีนามแฝงของโมดูล " crypto-cipher " ที่สามารถใช้ในการโหลดได้เช่นmodprobe crypto-anubisจะโหลดโมดูลที่ให้การเข้ารหัสของสุสาน
เมื่อใช้cryptsetup benchmarkคำสั่งเฉพาะตัวเลขและโหมดมีความสำคัญเนื่องจากนั่นคือทั้งหมดที่เป็นเกณฑ์มาตรฐาน หากไม่ได้ระบุโหมดไว้จะใช้ค่าเริ่มต้นเป็น CBC ivmodeจะถูกละเว้นทั้งหมด ดังนั้นสำหรับการเปรียบเทียบaes, aes-cbcและaes-cbc-foobarเทียบเท่าทุก
/lib/modules/*/kernel/crypto/เป็นสถานที่ที่น่ามอง แต่โมดูลสามารถอยู่ที่ใดก็ได้ในระบบไฟล์