คำตอบสั้น ๆ คือ "ใช่ การตั้งค่านี้มีช่องโหว่" หากคุณต้องการคณิตศาสตร์ คุณสามารถอ่านคำอธิบายด้านล่าง
ใน XTS คีย์ทั้งสองเป็นอิสระจากกัน ดังนั้นจึงมีความปลอดภัย 512 บิตอยู่แล้ว (ไม่มีการโจมตีในขณะนี้ ซึ่งลดจำนวนนี้ลง*) ฉันจะอธิบายว่าทำไมจึงต้องใช้การเข้ารหัสสองครั้งในโหมด XTS ไม่เพิ่มขึ้น ความปลอดภัย.
มาดูสมการการเข้ารหัสอย่างใกล้ชิดด้วยโหมด XTS:
$$
c_i = f(m_i, (K_1, K_2)) = T_i\oplus E_{K_1}(m_1)\oplus T_i \
T_i=E_{K_2}(SN)\otimes\alpha^{i-1}
$$
ที่ไหน $SN$ เป็นหมายเลขภาค $(K_1,K_2)$ - คีย์เข้ารหัส $m_i, ค_i$ - บล็อกข้อความธรรมดาและข้อความเข้ารหัสตามลำดับและ $\alpha$ เป็นองค์ประกอบดั้งเดิมของ $GF(2^l)$ ($|m_i|=l$).
ตอนนี้ให้พิจารณาฟังก์ชันการเข้ารหัสแบบบล็อกรหัส:
$$
E_K=\pi_{q_{r+1}}\circ\varphi_{q_r}\circ...
\circ\varphi_{q_1}\circ\delta_{q_0}
$$
ที่ไหน $r$ เป็นจำนวนรอบ $q_i,i=\โอเวอร์ไลน์{1,r}$ เป็นคีย์กลม (มาจากคีย์เข้ารหัสโดยใช้ชุดฟังก์ชันพิเศษที่เรียกว่า "กำหนดการคีย์") $\varphi_{q_i},i=\overline{1,r}$ เป็นฟังก์ชันกลม $\pi_{q_{r+1}}, \delta_{q_0}$ เป็นฟังก์ชันเอาต์พุตและอินพุตด้วยคีย์ตามลำดับ (ฟังก์ชันทั้งสองนี้อาจไม่ได้ขึ้นอยู่กับคีย์)
การมีอยู่ของฟังก์ชันอินพุตและเอาต์พุตเหล่านี้เป็นกุญแจสำคัญสำหรับคำถามของคุณ ลองพิจารณาบล็อกรหัสที่มีสมการการเข้ารหัสต่อไปนี้:
$$
E_{K_1,K_2} = \underbrace{\pi'_{q_{r+1}}\circ
\pi^{\varepsilon}_{q_{r+1}}}_{\pi_{q_{r+1}}}
\circ\overbrace{\varphi^{\varepsilon}_{q_r}\circ...
\circ\varphi^{\varepsilon}_{q_1}}^{\varphi_{q_r}\circ...
\circ\varphi_{q_1}}
\circ\underbrace{\delta^{\varepsilon}_{q_0}\circ
\delta'_{q_0}}_{\delta_{q_0}},\ q_0=q_{r+1}=(K_2,SN)
$$
ที่ไหน $\varphi^{\varepsilon}_{q_i}=\varphi_{q_i}, i=\overline{1,r}$ - ฟังก์ชันปัดเศษของรหัสบล็อกพื้นฐาน $\varepsilon$ (AES ในกรณีของคุณ), $\pi^{\varepsilon}_{q_{r+1}}, \delta^{\varepsilon}_{q_0}$ - ฟังก์ชั่นเอาต์พุตและอินพุตของรหัสบล็อกพื้นฐานและ $\pi'_{q_{r+1}}(x)=E_{K_2}(SN)\oplus x$, $\delta'_{q_0}(x)=E_{K_2}(SN)\oplus x$.
มีปัญหาบางอย่างกับสมการนี้ในกรณีที่มีการพึ่งพาจริงของ $\pi^{\varepsilon}_{q_{r+1}}$ และ $\delta^{\varepsilon}_{q_0}$ บนคีย์ของพวกเขา (ซึ่งแตกต่างกัน) แต่สามารถกำจัดได้อย่างง่ายดายโดยการเลือกฟังก์ชั่นกำหนดการคีย์ที่เหมาะสม ฉันจะไม่ทำอย่างนั้นในตอนนี้เพื่อป้องกันความซับซ้อนมากเกินไป
ในที่สุดเราก็ได้รหัสบล็อกที่สร้างขึ้นจากรหัสที่มีอยู่โดยแก้ไขฟังก์ชันเอาต์พุตและอินพุต
ในกรณีที่ง่ายที่สุดของการโจมตีแบบ Meet-in-the-middle ให้สร้างสองตาราง:
$$
s_i = E_{K_1,K_2}(m_i) \
s'_i = E^{-1}_{K'_1,K'_2}(c_i)
$$
หลังจากนั้นคุณมองหาค่าที่เท่ากัน $s_i=s'_i$. อัลกอริทึมนี้เหมาะสำหรับการเข้ารหัสแบบบล็อกใดๆ และสำหรับรหัสของเราด้วย ดังนั้นโครงสร้างที่สร้างขึ้นในขณะนี้จึงเสี่ยงต่อการถูกโจมตี เพียงเพราะ XTS ไม่ได้เพิ่มอะไรพิเศษให้กับการเข้ารหัสแบบบล็อก กล่าวคือ คุณสามารถถือว่าการเข้ารหัสในโหมด XTS เป็นบล็อก - การเข้ารหัสที่ชาญฉลาด เมื่อแต่ละบล็อกถูกเข้ารหัสด้วยคีย์ของตัวเอง
เมื่อทราบหมายเลขเซกเตอร์และตำแหน่งบล็อก คุณจะสร้างตารางสองตารางตามที่อธิบายไว้ข้างต้นสำหรับบล็อกนี้โดยเฉพาะ และค้นหาคีย์การเข้ารหัส ในกรณีที่เลวร้ายที่สุด คุณต้องระบุคู่ของคีย์ทั้งหมด $(K_1, K_2)$ สองครั้ง. ดังนั้นจึงไม่มีการรักษาความปลอดภัยเพิ่มขึ้น
* - มีการโจมตีที่ช่วยให้คุณได้รับการปรับแต่งแต่ละครั้ง เมื่อมีบล็อกที่แตกต่างกันสองบล็อกในเซกเตอร์เดียวกันโดยมีเงื่อนไขบางอย่างสำหรับ ciphertexts และ plaintexts แต่ไม่สามารถกู้คืนคีย์ปรับแต่งได้ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการโจมตีนี้ได้ในความคิดเห็นสาธารณะเกี่ยวกับ XTS-AES