เคอร์เนล 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 สำหรับทุกอย่างยกเว้นlmk
ivmode ซึ่งเป็นค่าเริ่มต้นที่ 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
ดูเหมือนจะแนะนำมากที่สุด
null
IV เป็นศูนย์เสมอ สำหรับการทดสอบและความเข้ากันได้แบบย้อนหลังคุณไม่ควรใช้สิ่งนี้
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/
เป็นสถานที่ที่น่ามอง แต่โมดูลสามารถอยู่ที่ใดก็ได้ในระบบไฟล์