ML-KEM
ML-KEM нь торлог бүтцийн математик бодлогод суурилсан, квант компьютерт тэсвэртэй байхаар боловсруулсан нууц түлхүүрийг капсулжуулах механизм юм.
- Стандарт
- FIPS 203
- Түлхүүрийн урт
- ML-KEM-512 / 768 / 1024; Shared secret: 256 bit
Чухал анхааруулга
- ML-KEM нь квант компьютерт тэсвэртэй байхаар бүтээгдсэн ч аюулгүй байдал нь хэрэгжүүлэлт болон ашиглах аргаас мөн хамаарна.
- Нийтийн түлхүүрийг баталгаажуулах: Халдагчийн түлхүүрийг ашиглахаас сэргийлнэ.
- Хувийн түлхүүрийг хамгаалах: Нууц түлхүүрийг зөвшөөрөлгүй хандалт, алдагдлаас хамгаална.
- Shared secret-ийг зөв ашиглах: Протоколын зааврын дагуу KDF ашиглан криптографийн түлхүүр гарган авна.
- Хажуугийн сувгийн халдлагаас хамгаалах: Гүйцэтгэх хугацаа, алдааны мэдээллээр нууц түлхүүр задрахаас сэргийлнэ.
- Стандарт хэрэгжүүлэлт ашиглах: Өөрийн криптографийн схем зохиохгүй, шалгагдсан сан болон стандарт протокол ашиглана.
- Анхаарах нь: Пост-квант алгоритм ашиглах нь хэрэгжүүлэлтийн алдаа, түлхүүрийн алдагдал болон ирээдүйн криптоанализын эрсдэлийг бүрэн арилгахгүй.
Юу вэ?
ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism) нь торлог бүтцийн математик бодлогод суурилсан, пост-квант криптографийн түлхүүр капсулжуулах механизм юм. NIST нь үүнийг FIPS 203 стандартаар баталсан бөгөөд өмнө нь CRYSTALS-Kyber нэрээр хөгжүүлж байсан алгоритмын стандартчилсан хувилбар юм.
ML-KEM-ийн зорилго нь хоёр талын хооронд нууц түлхүүрийг аюулгүйгээр тохиролцох явдал юм. Энэ нь дараах гурван үндсэн үйлдэлтэй:
- KeyGen: нийтийн түлхүүр (encapsulation key) болон хувийн түлхүүр (decapsulation key) үүсгэнэ. - Encapsulate: илгээгч хүлээн авагчийн нийтийн түлхүүрийг ашиглан ciphertext болон нийтлэг нууц утга (shared secret) үүсгэнэ. - Decapsulate: хүлээн авагч хувийн түлхүүр болон ciphertext-ийг ашиглан ижил shared secret-ийг сэргээнэ.
ML-KEM нь Module Learning With Errors (Module-LWE) бодлогын тооцооллын хүндрэлд суурилдаг. Энэ нь ердийн аргаар шийдэхэд хэцүү, алдаатай шугаман хамаарлууд бүхий торлог бүтцийн бодлого юм.
ML-KEM нь өгөгдлийг өөрөө шууд шифрлэдэггүй. Үүссэн shared secret-ийг түлхүүр гарган авах функцээр боловсруулж, AES-GCM эсвэл ChaCha20-Poly1305 зэрэг симметрик шифрлэлтийн алгоритмын түлхүүр үүсгэхэд ашиглаж болно.
ML-KEM нь хангалттай хүчин чадалтай квант компьютерын эсрэг уламжлалт RSA болон эллиптик муруйн криптографийн аргуудаас илүү тэсвэртэй байхаар бүтээгдсэн. Гэхдээ энэ нь бүх төрлийн халдлагад үнэмлэхүй дархлаатай гэсэн үг биш; хэрэгжүүлэлт болон түлхүүрийн удирдлага мөн чухал.
Хэрхэн ажилладаг вэ?
ML-KEM нь нууц утгыг сүлжээгээр шууд дамжуулахгүйгээр хоёр талд ижил shared secret үүсгэдэг.
Түлхүүрийн хос үүсгэх (KeyGen)
Хүлээн авагч ML-KEM ашиглан нийтийн encapsulation key болон хувийн decapsulation key үүсгэнэ. Нийтийн түлхүүрийг илгээгчид дамжуулж болох бол хувийн түлхүүрийг нууц хадгална.
Нууц утга болон ciphertext үүсгэх (Encapsulate)
Илгээгч хүлээн авагчийн нийтийн түлхүүрийг ашиглан encapsulation үйлдэл гүйцэтгэнэ. Үүний үр дүнд:
- Shared secret үүснэ. - Encapsulation ciphertext үүснэ.
Илгээгч shared secret-ийг өөртөө хадгалж, ciphertext-ийг хүлээн авагч руу дамжуулна.
Нууц утгыг сэргээх (Decapsulate)
Хүлээн авагч өөрийн хувийн түлхүүр болон хүлээн авсан ciphertext-ийг ашиглан decapsulation үйлдэл гүйцэтгэнэ. Ингэснээр илгээгчийн үүсгэсэнтэй ижил shared secret гарган авна.
Шифрлэлтийн түлхүүр гарган авах
Хоёр тал ижил shared secret-тэй болсны дараа протоколын шаардлагад нийцсэн түлхүүр гарган авах функц ашиглан өгөгдөл шифрлэх түлхүүр үүсгэнэ.
Баталгаажуулалт ба хамгаалалт
ML-KEM нь дангаараа хэнтэй харилцаж байгааг баталгаажуулахгүй. Нийтийн түлхүүрийн эзэмшигчийг баталгаажуулахын тулд сертификат, тоон гарын үсэг эсвэл найдвартай протокол шаардлагатай. Ciphertext өөрчлөгдсөн тохиолдолд decapsulation нь хүлээгдсэн shared secret-ээс өөр утга гаргаж болох тул дараагийн баталгаажуулалттай шифрлэлтийн протоколыг зөв хэрэгжүүлэх нь чухал.
Хаана ашиглагддаг вэ?
- **Пост-квант TLS холболт** TLS-д ML-KEM-ийг түлхүүр тохиролцооны механизм болгон ашиглаж
- ирээдүйн квант халдлагын эрсдэлийг бууруулах боломжтой. Бодит хэрэглээ нь браузер
- сервер
- TLS сан болон холболтын тохиргооны дэмжлэгээс хамаарна. **Гибрид түлхүүр тохиролцоо** X25519 зэрэг уламжлалт түлхүүр солилцооны алгоритмыг ML-KEM-тэй хослуулсан схем ашиглаж болно. Ингэснээр сонгодог болон пост-квант криптографийн хамгаалалтыг хамтад нь ашиглах боломж бүрдэнэ. Гэхдээ гибрид схемийг зөвхөн стандартчилагдсан протокол
- тохирох хэрэгжүүлэлтээр ашиглах ёстой. **VPN болон аюулгүй сүлжээ** Пост-квант криптографийн дэмжлэг нэвтрүүлж буй VPN болон бусад сүлжээний протоколд ML-KEM-ийг түлхүүр тохиролцооны хэсэг болгон ашиглаж болно. **Урт хугацааны нууцлал шаардсан харилцаа** Өнөөдөр шифрлэсэн өгөгдлийг хадгалаад ирээдүйд квант компьютер ашиглан тайлах оролдлого хийх “harvest now
- decrypt later” эрсдэлийг бууруулахад ML-KEM тусалж болно. Гэхдээ энэ хамгаалалт нь өгөгдөл хадгалалт
- түлхүүрийн удирдлага болон протоколын бусад хэсгээс мөн хамаарна.
Түгээмэл алдаа
- - **ML-KEM-ийг өгөгдөл шифрлэх алгоритм гэж ойлгох:** ML-KEM нь shared secret тохиролцох зориулалттай KEM юм.
- - **Encapsulation ciphertext-ийг shared secret гэж андуурах:** эдгээр нь өөр өөр өгөгдөл; ciphertext-ийг хүлээн авагчид дамжуулж, shared secret-ийг нууц хадгална.
- - **Нийтийн түлхүүрийг шалгахгүй ашиглах:** энэ нь халдагчийн түлхүүрийг ашиглах эрсдэл үүсгэнэ.
- - **Shared secret-ийг шууд шифрлэлтийн түлхүүр болгох:** зориулалтын түлхүүр гарган авах механизм болон протоколын шаардлагыг мөрдөнө.
- - **Хувийн түлхүүрийг сүлжээгээр дамжуулах:** decapsulation key-г хүлээн авагчийн талд нууц хадгалах ёстой.
- - **Гибрид криптографийг дур мэдэн нэгтгэх:** X25519 болон ML-KEM-ийг стандартчилагдсан схемээс гадуур өөрөө нийлүүлж болохгүй.
- - **Буруу хувилбар сонгох:** ML-KEM-512, ML-KEM-768, ML-KEM-1024 нь өөр өөр аюулгүй байдлын түвшин болон өгөгдлийн хэмжээтэй.
Жишээ код
# ML-KEM-768 — ойлголтын жишээ, псевдокод
# Хүлээн авагч түлхүүрийн хос үүсгэнэ
encapsulation_key, decapsulation_key = ML_KEM_768.keygen()
# Илгээгч нийтийн түлхүүрээр shared secret болон
# дамжуулах ciphertext үүсгэнэ
ciphertext, sender_secret = ML_KEM_768.encapsulate(
encapsulation_key
)
# Ciphertext-ийг хүлээн авагчид дамжуулна
# Хүлээн авагч хувийн түлхүүрээр ижил нууц утгыг сэргээнэ
receiver_secret = ML_KEM_768.decapsulate(
decapsulation_key,
ciphertext
)
assert sender_secret == receiver_secret
# Бодит системд shared secret-ийг
# стандартчилагдсан протоколын дагуу боловсруулж ашиглана.