They are deterministic

|
They are deterministic
|
bet | 1/18 | Sana | 12.02.2024 | Hajmi | 1,82 Mb. | | #155128 |
Bog'liq MD5
MD5 algoritmi qanday ishlaydi?
Keling, MD5 algoritmi qanday ishlashini misol orqali ko'rsatamiz. Bizning "They are deterministic" degan ma'lumot MD5 xesh funksiyasi orqali o'rnatilganda butunlay boshqacha bo'ladi. Biz kafolat bera oladigan yagona narsa shundaki, u 128 bit uzunlikda bo'ladi, bu 32 belgigacha ishlaydi. Qanday qilib MD5 algoritmi istalgan uzunlikdagi ma'lumotlarni qabul qilib, ularni tasodifiy ko'rinadigan, belgilangan uzunlikdagi satrlarga aylantira oladi?
Ma'lumotlarni binarga aylantirish
MD5 xesh-funksiyasiga “They are deterministic” so‘zini qo‘y-ganimizda, birinchi bo‘lib u binarga aylantiriladi. Bu ma'lumot almashish uchun Amerika standart kodeksiga (ASCII) muvofiq amalga oshiriladi , bu biz asosan inson o'qiy oladigan matnni kompyuterlar o'qiy oladigan ikkilik kodga aylantirish uchun foydalanadigan standartdir .
ASCII jadvalidan foydalanib , biz "T" bosh harfi ikkilik tizimda "01010100" sifatida yozilganligini ko'ramiz. Kichik “h” “01101000”, kichik “e” “01100101”, kichik “y” esa “01111001”. Bo'sh joy (SP) uchun ikkilik kod "00100000" dir. Siz uni ikkinchi ustunning yuqori qismidagi 32 o'nlik soniga mos keladigan jadvalda ko'rishingiz mumkin.
Agar biz shu tarzda davom etadigan bo'lsak, "Ular deterministik" kiritishimiz ikkilik tizimda quyidagicha yozilganligini ko'ramiz:
M=01010100 01101000 01100101 01111001 00100000 01100001 01110010 01100101 00100000 01100100 01100101 01110100 01100101 01110010 01101101 01101001 01101110 01101001 01110011 01110100 01101001 01100011
MD5 algoritmida to'ldirish
MD5'dagi keyingi qadam to'ldirishni qo'shishdir . MD5-dagi kirishlar 512-bitli bloklarga bo'linadi, blokdagi qolgan bo'sh joyni to'ldirish uchun to'ldirish qo'shiladi . Bizning kiritishimiz bo'shliqlarni o'z ichiga olgan holda 22 ta belgidan iborat va har bir belgi 8 bit uzunlikda. Bu shuni anglatadiki, kirish jami 176 bitni tashkil qiladi. Faqat 176 bitli kirish va to'ldirilishi kerak bo'lgan 512 bitli blok bilan blokni bajarish uchun bizga 336 bitli to'ldirish kerak bo'ladi.
MD5 ning to'ldirish sxemasi juda g'alati ko'rinadi. Bizning kirishimizni ifodalovchi dastlabki 176 bitli ikkilik faylni joylashtirgandan so'ng, blokning qolgan qismi bitta bilan to'ldiriladi, so'ngra uni 448 bit uzunlikka etkazish uchun etarli nolga ega. Shunday qilib:
448 – 1 – 176 = 271
Shunday qilib, ushbu blok uchun to'ldirish bitta, keyin qo'shimcha 271 nolni o'z ichiga oladi . Biz uni faqat 448 bitgacha (512 o'rniga) to'ldirishimiz kerakligining sababi, oxirgi 64 bit (512 - 64 = 448) xabar uzunligini ikkilik formatda ko'rsatish uchun ajratilgan. Bunday holda, 176 raqami ikkilik 10110000 ni tashkil qiladi . Bu to'ldirish sxemasining oxirini tashkil qiladi, oldingi 56 bit (64 minus 10110000 ni tashkil etuvchi sakkiz bit) hammasi nol bilan to'ldirilgan.
Xabar uzunligi ko'proq sonli bitlarni egallagan hollarda, nollar kamroq bo'ladi. Agar dastlabki kiritish uzunligi 64 bitdan uzun bo'lsa (agar u 264 dan katta bo'lsa, bu o'nlik kasrda 18,446,744,073,709,551,616 ga teng bo'lsa), u holda faqat eng kam ahamiyatli 64 bit ishlatiladi.
"Eng kam ahamiyatli bitlar" atamasi asosan eng to'g'ri raqamlarni anglatadi. Misol tariqasida, agar biz 0101 1110 kabi tasodifiy ikkilik sonning to'rtta eng muhim bitini xohlasak, biz 1110 ni nazarda tutgan bo'lardik va boshlang'ich 0101 ga e'tibor bermagan bo'lardik.
To'ldirish sxemasi tugallangandan so'ng, biz quyidagi 512 bitli satr bilan yakunlaymiz:
01010100 01101000 01100101 01111001 00100000 01100001 01110010 01100101 00100000 01100100 01100101 01110100 01100101 01110010 01101101 01101001 01101110 01101001 01110011 01110100 01101001 01100011 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10110000
Birinchi 176 bit (uzunlik dastlabki kiritishga qarab o'zgaradi) ikkilik tizimda "Ular deterministik" ni dastlabki kiritishimizni ifodalaydi. Keyingi 272 bit bittadan keyin 271 noldan iborat. Yakuniy 64 bit - bu ikkilik tizimda yozilgan dastlabki kirishimizning uzunligi (176 bit). Qolgan 64 bitni to'ldirish uchun uning oldiga nollar qo'yiladi. Toʻldirilgan kiritishning uchta komponenti har biri qayerda boshlanib, qayerda tugashini koʻrishni osonlashtirish uchun qalin va oddiy matn oʻrtasida boʻlingan.
|
| |