Blockchain (blockchain)da hashing nima?

Butun dunyodagi yangi va o‘rta darajadagi kripto o‘rganuvchilar uchun hashing blockchainga (blockchain) qanday xavfsizlik beradi – tushunarli tarzda.

Odamlar blockchainlar (blockchain) haqida "o‘zgarmas" yoki "buzib bo‘lmaydigan" deb gapirganda, aslida hashing haqida gapirishadi. Hash – bu maxsus formula yordamida yaratiladigan qisqa kod bo‘lib, u tranzaksiya, fayl yoki butun blok kabi ma’lumotni noyob tarzda ifodalaydi. Ko‘pincha u raqamli barmoq iziga o‘xshatiladi: asl ma’lumotdan uni yaratish oson, lekin bu koddan orqaga qaytib, asl ma’lumotni tiklash amalda imkonsiz. Kiritilgan ma’lumotdagi bitta belgi o‘zgarsa ham, barmoq izi (hash) butunlay o‘zgaradi va har qanday o‘zgartirishni darhol sezilarli qiladi. Hashing tufayli minglab blockchain tugunlari (node) markaziy hokimiyatsiz bir xil tarixga kelisha oladi. U bloklarni bir-biriga bog‘laydi, proof‑of‑work mayningini quvvatlaydi va foydalanuvchilarga barcha ichki ma’lumotlarni ko‘rmasdan turib ham ma’lumot yaxlitligini tekshirishga yordam beradi. Ushbu qo‘llanmada biz formulalarga emas, g‘oyalarga e’tibor qaratamiz. Hashing amalda qanday ishlashini, ayniqsa Bitcoin kabi tizimlarda, ko‘rasiz, shunda siz uni sodda qilib tushuntira olasiz va bu atamalarni noto‘g‘ri yoki firibgarlik maqsadida ishlatadigan da’volarni ajrata olasiz.

Qisqa xulosa: Blockchain (blockchain)da hashing bir qarashda

Xulosa

  • Istalgan kirishni (tranzaksiya, fayl, xabar) o‘zgarmas uzunlikdagi, o‘sha ma’lumotni noyob ifodalovchi hash kodiga aylantiradi.
  • Bir yo‘nalishli: ma’lumotdan hashga o‘tish oson, lekin hashdan asl ma’lumotni qaytarib bo‘lmaydi.
  • Juda sezgir: kirishdagi juda kichik o‘zgarish ham butunlay boshqa hash natijasini beradi.
  • Har bir blokning hashini keyingi blok ichida saqlab, bloklarni bir-biriga bog‘laydi va buzib o‘zgartirishni oshkor va qimmat qiladi.
  • Proof‑of‑work mayningini ta’minlaydi, bunda maynerlar murakkablik talabiga mos keladigan hash topish uchun musobaqalashadi.
  • Foydalanuvchilar va tugunlarga ma’lumot yaxlitligini ("bu o‘zgarmagan") barcha ichki ma’lumotlarga ishonmasdan yoki ularni ko‘rmasdan turib tekshirish imkonini beradi.

Hashing asoslari: Formulasiz tushuncha

Hash funksiyasi – bu istalgan raqamli kirishni qabul qilib, hash deb ataladigan qisqa, o‘zgarmas uzunlikdagi natija beradigan qoida. Kirish bir nechta belgidan iborat bo‘lishi ham, butun tranzaksiyalar bloki bo‘lishi ham mumkin, lekin hash har doim bir xil o‘lchamda bo‘ladi. Tasavvur qiling, bu juda izchil ishlaydigan blender retsepti: qancha meva solsangiz ham, oxirida har doim aynan bitta stakan smuzi olasiz. Smuzi (hash) barcha ingredientlarga (ma’lumotga) bog‘liq, lekin stakanga qarab, asl mevalarni aniq tiklay olmaysiz. Hashingda siz kiritayotgan ma’lumot kirish yoki xabar deb ataladi, natija esa hash yoki digest deyiladi. Asosiy g‘oya shuki, funksiya deterministik (bir xil kirish – har doim bir xil chiqish), lekin amalda teskari yo‘nalishda yechib bo‘lmaydi va kirishdagi juda kichik o‘zgarish ham chiqishni butunlay boshqa ko‘rinishga keltiradi.
Maqola tasviri
Ma’lumotdan hashga
  • Kirish ma’lumotlari qanchalik katta yoki kichik bo‘lishidan qat’i nazar, o‘zgarmas o‘lchamdagi natija ishlab chiqaradi.
  • Deterministik: bir xil kirish har doim aynan bir xil hash natijasini beradi.
  • Amalda bir yo‘nalishli: hashdan foydalangan holda asl ma’lumotni amaliy vaqt ichida qayta tiklab bo‘lmaydi.
  • Lavina xulqini ko‘rsatadi: kirishdagi bitta bitni o‘zgartirish ham yakuniy hashni butunlay o‘zgartiradi.
  • To‘qnashuvlarga chidamli bo‘lishi uchun yaratilgan, ya’ni bir xil hash beradigan ikki xil kirishni topish nihoyatda qiyin.

Kriptodan tashqari hashing: Kundalik hayotdagi qo‘llanishlar

Hashing faqat blockchainlar (blockchain)ga xos emas; u zamonaviy kompyuter tizimlarining asosiy qurilish g‘ishtlaridan biridir. Ehtimol siz har kuni hash funksiyalariga tayanyapsiz, lekin buni sezmayapsiz. Dasturiy ta’minot yoki mobil ilova yuklab olayotganda, sayt faylning hashini e’lon qilishi mumkin. Kompyuteringiz yuklab olingan faylni hash qilib, natijani e’lon qilingan hash bilan solishtiradi va fayl yo‘lda buzilmaganini yoki o‘zgarmaganini tasdiqlaydi. Veb-saytlar ham sizning haqiqiy parolingiz o‘rniga hash qilingan parollarni saqlaydi, shuning uchun ma’lumotlar bazasi sizib chiqqan taqdirda ham hujumchilar oddiy matn ko‘rinishidagi parollarni qo‘lga kirita olmaydi. Fayl tizimlari va zaxira nusxa olish vositalari hashlar yordamida dublikat fayllarni aniqlaydi va eski zaxiralar vaqt o‘tishi bilan yashirincha o‘zgarmaganini tekshiradi.
  • Yuklab olingan fayllarni ularning hashini dastur ishlab chiquvchisi e’lon qilgan ishonchli qiymat bilan solishtirib tekshirish.
  • Ma’lumotlar bazasi sizib chiqqanda faqat chalg‘itilgan qiymatlar oshkor bo‘lishi uchun xom parollar o‘rniga parol hashlarini saqlash.
  • To‘liq mazmunini solishtirish o‘rniga hashlarini taqqoslab, dublikat suratlar, videolar yoki hujjatlarni aniqlash.
  • Zaxira nusxalar yoki bulut xotirasidagi ma’lumot yaxlitligini fayllarni qayta hash qilib va ularni avvalgi hashlar bilan solishtirib tekshirish.
  • Kontentga asoslangan saqlash tizimlarini ta’minlash, bunda fayllar inson tanlagan nom o‘rniga ularning hashi orqali chaqirib olinadi.

Hashing blockchainlarni (blockchain) qanday himoya qiladi

Blockchain (blockchain)da har bir blok ichidagi barcha ma’lumotlarni – tranzaksiyalar, vaqt tamg‘alari va boshqa sarlavha maydonlarini – jamlab turuvchi o‘z blok hashiga ega. Bu hash butun blok uchun barmoq izi vazifasini bajaradi. Eng muhimi, har bir blok o‘z sarlavhasida oldingi blokning hashini ham saqlaydi. Ya’ni N-blok N‑1‑blokni ko‘rsatadi, N‑1‑blok N‑2‑blokni ko‘rsatadi va hokazo – shunday qilib, birinchi blokgacha cho‘zilgan hashlar zanjiri hosil bo‘ladi. Kimdir o‘tmishdagi tranzaksiyani o‘zgartirishga harakat qilsa, o‘sha blokning hashi o‘zgaradi, bu esa keyingi blok bilan, undan keyingisi bilan va hokazo bog‘lanishni buzadi. Buzib o‘zgartirishni yashirish uchun hujumchi o‘sha blok va undan keyingi barcha bloklarning hashlarini qayta hisoblashiga to‘g‘ri keladi; buni proof‑of‑work kabi qat’iy konsensus qoidalari ostida qilish kerak bo‘ladi va bu juda katta hisoblash quvvatini talab qiladi.
Maqola tasviri
Bloklarni bog‘layotgan hashlar
  • Zanjirni amalda o‘zgarmas qiladi: bitta blokni o‘zgartirish keyingi barcha hashlarni buzadi va buzg‘unchilikni fosh qiladi.
  • Tugunlarga qabul qilingan blok kutilgan blok hashiga mos kelishini hamma narsani qayta yuklamasdan tezda tekshirish imkonini beradi.
  • Yengil mijozlarga (SPV walletlar) to‘liq blockchainni yuklamasdan, blok va Merkle daraxt hashlaridan foydalanib tranzaksiyalarni tekshirish imkonini beradi.
  • Minglab tugunlarning sinxron bo‘lib turishiga yordam beradi, chunki ular hashlarni solishtirib, zanjir tarixiga samarali tarzda kelisha oladi.

Pro Tip:Block explorerga qaraganingizda, "block hash" yoki "transaction hash" deb belgilangan uzun qatorlar aynan mana shu raqamli barmoq izlaridir. Ular ma’lumotni noyob tarzda jamlab berishini tushunsangiz, o‘z tranzaksiyalaringizni ishonch bilan kuzatishingiz, qaysi blokda ekanini tasdiqlashingiz va kimdir sizga haqiqiy zanjirga mos kelmaydigan soxta skrinshot ko‘rsatayotganini payqashingiz mumkin bo‘ladi.

Kriptodagi keng tarqalgan hash funksiyalari (SHA-256, Keccak va boshqalar)

Faqat bitta universal hash funksiyasi mavjud emas. Aksincha, turli maqsadlar – xavfsizlik darajasi, tezlik va apparat samaradorligi – uchun yaratilgan ko‘plab hash algoritmlari (yoki oilalari) bor. Bitcoin SHA‑256ni tanlagan, u SHA‑2 oilasiga mansub bo‘lib, Bitcoin ishga tushgan paytda yaxshi o‘rganilgan, xavfsiz va samarali edi. Ethereum o‘zining asosiy protokolida Keccakning (ko‘pincha Keccak‑256 deb ataladi) variantidan foydalanadi. Boshqa loyihalar BLAKE2 yoki SHA‑3 kabi yangi yoki tezroq funksiyalar, yoki mayning uchun xotira talab qiluvchi algoritmlar bilan tajriba o‘tkazadi. Odatdagi foydalanuvchi uchun eng muhimi – jiddiy blockchainlar yaxshi ko‘rib chiqilgan, zamonaviy hash funksiyalarini tanlashi va agar ular zaiflashsa, yangilanish imkoniyatiga ega bo‘lishidir.

Key facts

SHA-256
SHA‑2 oilasiga mansub keng qo‘llaniladigan kriptografik hash; Bitcoin blok sarlavhalari va tranzaksiya identifikatorlari uchun ikki marta SHA‑256dan foydalanadi.
Keccak-256
Ethereum manzillar, tranzaksiya hashlari va ko‘plab smart contract amallari uchun ishlatadigan hash funksiyasi (standartlashtirilgan SHA‑3 bilan yaqindan bog‘liq).
SHA-3 (standard)
SHA‑2 o‘rnini bosuvchi sifatida ishlab chiqilgan yangi NIST standart hash oilasi; ayrim yangi protokollar va vositalar uzoq muddatli xavfsizlik uchun undan foydalanadi.
BLAKE2
SHA‑2dan sodda va tezroq, lekin yuqori xavfsizlikni saqlagan holda yaratilgan tezkor, zamonaviy hash funksiyasi; ayrim altcoinlar va xavfsizlik vositalarida qo‘llaniladi.
Scrypt / memory-hard variants
Xotira va protsessor resurslarini birgalikda qimmat qiladigan hash algoritmlari; ayrim proof‑of‑work coinlarida ASIC mayning ustunligini kamaytirish uchun ishlatiladi.

Hashing va Proof of Work: Mayning bitta rasmda

Bitcoin kabi proof‑of‑work tizimlarida maynerlar hashingdan lotereyaga o‘xshash musobaqada ishtirok etish uchun foydalanadi. Ular kutilayotgan tranzaksiyalarni yig‘ib, nomzod blok tuzadilar va shu blok uchun maxsus hash topishga harakat qilishadi. Buning uchun ular blok sarlavhasiga nonce deb ataladigan o‘zgaruvchan son qo‘shadi va uni hash funksiyasidan o‘tkazadi. Agar olingan hash yetarlicha "past" bo‘lmasa (masalan, talab qilingancha nol bilan boshlanmasa), ular nonce qiymatini o‘zgartirib, yana urinib ko‘rishadi. Bu jarayon butun tarmoq bo‘ylab milliardlab yoki trillionlab marta takrorlanadi, to biror mayner joriy murakkablik maqsadiga mos keladigan hash topmaguncha. Boshqa tugunlar esa g‘olib hashni bir marta tekshirib, o‘sha blokni yaratishga katta hajmdagi ish sarflanganini tezda tasdiqlashi mumkin.
Maqola tasviri
Mayningni quvvatlayotgan hashing
  • Aldash qimmatga tushadi, chunki hujumchi tarixni qayta yozish va baribir murakkablik talabiga javob berish uchun ulkan miqdorda hashing ishini qayta bajarishi kerak bo‘ladi.
  • Tarmoq murakkablikni muntazam ravishda sozlab turadi, shunda umumiy mayning quvvati o‘zgarib turgan bo‘lsa ham, bloklar o‘rtacha barqaror tezlikda topiladi.
  • Tekshirish arzon: boshqa tugunlar blok sarlavhasini bir marta hash qilib, natija murakkablik qoidasiga mos kelishini tekshirishlari kifoya.
  • Mana shu nomutanosiblik – yaroqli hashni topish qiyin, lekin uni tekshirish oson – proof of workni kuchli buzib o‘zgartirishga qarshi mexanizmga aylantiradi.

Case study / Hikoya

Hindistondagi frilanser veb-dasturchi Ravi mijozlardan SHA‑256 va tranzaksiya hashlariga oid gaplarni tez-tez eshitardi, lekin topgan tushuntirishlarining barchasi formulalarga to‘la edi. U hashingni tushunmasa, mijozlar so‘rayotgan kripto loyihalaridagi xavfli jihatlarni payqamay qolishidan xavotirda edi. Bir hafta oxiri u matematikaga emas, tushunchaga e’tibor qaratishga qaror qildi. Bitcoin block explorerini ochdi, real tranzaksiyani kuzatdi va har bir tranzaksiya hamda blokda har qanday detal o‘zgarsa butunlay o‘zgarib ketadigan uzun hash borligini payqadi. Oradan ko‘p o‘tmay, yangi loyiha unga murojaat qildi va foydalanuvchilarga isbot sifatida tranzaksiya hashini ko‘rsatgani uchun "buzib bo‘lmaydigan shifrlash"ga ega ekanini da’vo qildi. Ravi darhol chalkashlikni anglab yetdi: hash ma’lumot yaxlitligini isbotlaydi, lekin maxfiylikni yoki egalikni emas. U ishni rad etdi va mijozga farqini tushuntirib berdi. Bu tajriba unga boshqalarga sodda qilib tushuntirish usulini berdi: hashlar – bu buzib o‘zgartirishni darhol ko‘rsatadigan raqamli barmoq izlari, kalitlar va imzolar esa kirish va shaxsni tasdiqlashni boshqaradi. Unga murakkab kriptografiya emas, balki hashing blockchain ma’lumotini qanday "langarlashi" haqida aniq aqliy model kifoya edi.
Maqola tasviri
Ravi hashingni o‘rganadi

Hashingning xatarlari, cheklovlari va xavfsizlik jihatlari

Asosiy xavf omillari

Hashing kuchli vosita, lekin u mo‘jizaviy xavfsizlik changi emas. Hash faqat ma’lumot o‘zgarmaganini ko‘rsatadi; u ma’lumotni yashirmaydi va uni kim yaratganini isbotlamaydi. Ko‘plab buzilishlar dasturchilar hashingdan noto‘g‘ri foydalangani uchun sodir bo‘ladi. Masalan, parollarni tuz (salt) yoki sekin parol-hashing funksiyasiz oddiy SHA‑256 hash ko‘rinishida saqlash, ma’lumotlar bazasi sizib chiqqanda ularni oson buziladigan qiladi. MD5 yoki SHA‑1 kabi buzilgan algoritmlardan yangi tizimlar uchun foydalanish ham xavfli, chunki ularda ma’lum zaifliklar bor. Foydalanuvchilar ham ko‘rgan narsalarini noto‘g‘ri talqin qilishlari mumkin. Tranzaksiya hashi – parol yoki private key emas va uni ulashish hech kimga sizning mablag‘laringiz ustidan nazorat bermaydi. Bu cheklovlarni tushunish sizga yomon xavfsizlik amaliyotlarini payqash va kriptografik atamalarni noto‘g‘ri ishlatadigan loyihalardan qochishga yordam beradi.

Primary Risk Factors

Buzilgan hash algoritmlaridan foydalanish
MD5 yoki SHA‑1 kabi funksiyalarda ma’lum to‘qnashuv hujumlari mavjud, shuning uchun qat’iyatli hujumchilar ba’zan bir xil hash beradigan turli ma’lumotlarni yaratishi mumkin.
Zaif parol hashingi
Parollarni tezkor hash (masalan, oddiy SHA‑256) va tuzsiz saqlash, ma’lumotlar sizib chiqqanda hujumchilarga soniyasiga milliardlab taxminlarni sinab ko‘rish imkonini beradi.
Protokol darajasidagi nozik jihatlar
Ba’zi hash konstruktsiyalari maxsus protokollarda noto‘g‘ri qo‘llansa, uzunlikni kengaytirish yoki shunga o‘xshash hujumlarga zaif bo‘lishi mumkin.
Tranzaksiya hashlarini noto‘g‘ri talqin qilish
Tranzaksiya hashini kvitansiya yoki to‘lov isboti deb qabul qilish chalg‘ituvchi bo‘lishi mumkin; haqiqiy isbot – bu tranzaksiyaning yaroqli blokda tasdiqlanishidir.
Bitta funksiyaga haddan tashqari tayanish
Bitta hash funksiyasiga abadiy tayanish xavfli bo‘lishi mumkin; barqaror tizimlar vaqt o‘tishi bilan funksiyaning xavfsizligi pasaysa, yangilanishni rejalashtiradi.

Xavfsizlik bo‘yicha eng yaxshi amaliyotlar

Hashing, shifrlash va raqamli imzolar: farqi nimada?

Hashing, shifrlash va raqamli imzolarni adashtirish oson, lekin ular turli muammolarni hal qiladi. Hashing yaxlitlikka qaratilgan: ma’lumotdagi har qanday o‘zgarishni aniqlash. Shifrlash maxfiylik haqida. U o‘qiladigan ma’lumotni kalit yordamida o‘qib bo‘lmaydigan shifrlangan matnga aylantiradi va to‘g‘ri kalit bilan bu jarayonni teskari qilish mumkin. Raqamli imzolar esa haqiqiylik va inkor etib bo‘lmaslikni ta’minlaydi: ular xabarni ma’lum bir private key egasi yuborganini va u o‘zgarmaganini tekshirish imkonini beradi. Blockchainlarda bu vositalar birgalikda ishlaydi. Hashing ma’lumotni jamlaydi, shifrlash (ishlatilganda) mazmunni yashiradi, imzolar esa tranzaksiyani kim tasdiqlaganini ko‘rsatadi. Ularning rollarini tushunish hashning o‘zi ma’lumotni shifrlaydi, imzolaydi yoki egalikni isbotlaydi deb noto‘g‘ri o‘ylashdan saqlaydi.
Maqola tasviri
Kriptodagi uchta asosiy qurilish g‘ishti

Pro Tip:Bir yangi foydalanuvchi "qo‘llab-quvvatlash" chatida firibgar soxta to‘lovni "tuzatish" uchun undan "kalit" so‘raganidan so‘ng, o‘z tranzaksiya hashini ulashgan. Yaxshiyamki, hashning o‘zi kirish huquqini bermaydi, lekin bu atamalar qanchalik oson aralashib ketishini ko‘rsatdi. Hashlar, kalitlar va imzolar o‘rtasidagi farqni bilish bunday hiylalarni erta payqashga yordam beradi.

Blockchain (blockchain)da hashingning amaliy qo‘llanishlari

Hech qachon smart contract kodi yozmasangiz ham, kriptodan foydalanganingizda hashlar bilan ishlaysiz. Ular blockchaindagi deyarli har bir ma’lumot bo‘lagini yashirincha belgilab va himoya qilib turadi. Tranzaksiya identifikatorlaridan tortib NFT metadata’larigacha, hashlar walletlar, explorerlar va dApplarga aynan qaysi ma’lumot haqida gap ketayotganiga kelishishga yordam beradi. Buni bilish ekrandagi ma’lumotni yaxshiroq tushunishingizga va uni soxtalashtirish nega qiyinligini anglashga yordam beradi.

Qo‘llanish sohalari

  • Har bir on-chain tranzaksiyani noyob aniqlab beradigan tranzaksiya hashlarini (TXID) yaratish.
  • Bloklarni barcha ma’lumotni jamlab beradigan va uni oldingi blok bilan bog‘laydigan blok hashlari bilan belgilash.
  • Merkle daraxtlarini qurish, bunda ko‘plab tranzaksiya hashlar bitta Merkle ildiziga birlashtiriladi va u blok sarlavhasida saqlanadi.
  • NFT metadatasini himoya qilish – san’at fayllari yoki JSON metadata’larni hash qilib, marketplace’lar kontent o‘zgargan-o‘zgarmaganini aniqlashi uchun.
  • Off-chain faoliyat isboti sifatida asosiy zanjirga ixcham holat hashlarini yuboradigan kross-chain bridge va layer‑2 tizimlarini qo‘llab-quvvatlash.
  • Off-chain ma’lumotlarni (masalan, hujjatlar yoki datasetlar) on-chain tekshirish – ularning joriy hashini smart contractda saqlangan hash bilan solishtirish orqali.

FAQ: Blockchain (blockchain)da hashing

Asosiy xulosalar: Hashingni matematikasiz tushunish

Quyidagilar uchun mos bo‘lishi mumkin

  • Chuqur matematikasiz ham texnik da’volarni baholamoqchi bo‘lgan kripto investorlar
  • Mahsulotlariga wallet, NFT yoki to‘lovlarni integratsiya qilayotgan veb va ilova dasturchilari
  • Originality va fayl yaxlitligini isbotlashni istaydigan NFT yaratuvchilari va raqamli rassomlar
  • Block explorer va walletlar ko‘rsatadigan ma’lumotni tushunishni istaydigan xavfsizlikka e’tiborli foydalanuvchilar

Quyidagilar uchun unchalik mos emas

  • Rasmiy kriptografik isbotlar yoki batafsil matematik konstruktsiyalarni izlayotgan o‘quvchilar
  • O‘z hash funksiyalarini yozish bo‘yicha implementatsiya darajasidagi ko‘rsatmalarga muhtoj bo‘lganlar
  • Faqat narxlar savdosi bilan qiziqib, blockchainlar ichki qanday ishlashiga qiziqmaydigan foydalanuvchilar

Hashing – blockchain (blockchain) xavfsizligining sokin, lekin asosiy dvigatelidir. Hash funksiyasi istalgan hajmdagi ma’lumotni deterministik, bir yo‘nalishli va o‘zgarishga nihoyatda sezgir bo‘lgan o‘zgarmas uzunlikdagi raqamli barmoq iziga aylantiradi. Har bir blok va tranzaksiyaga alohida hash berish va bloklarni oldingi blok hashlar orqali bog‘lash orqali blockchainlar buzib o‘zgartirishni oshkor va qimmat qiladi. Proof‑of‑work tizimlari hashingga asoslangan lotereyani qo‘shadi, bunda yaroqli hashni topish qiyin, lekin boshqalar uchun uni tekshirish oson bo‘ladi va bu markaziy hokimiyatsiz ishonchsiz konsensusni ta’minlaydi. Birinchi tomondan, hashingning aniq cheklovlari bor: u ma’lumotni shifrlamaydi, tranzaksiyani kim yuborganini o‘zi bo‘lib isbotlamaydi va noto‘g‘ri algoritm tanlovi yoki yomon implementatsiya uni zaiflashtirishi mumkin. Agar hashlarni yaxlitlik uchun raqamli barmoq izi sifatida eslab qolsangiz va buni kalitlar hamda imzolar haqidagi tushunchangiz bilan birlashtirsangiz, kriptodagi yanada chuqur mavzularni o‘rganish uchun allaqachon kuchli aqliy modelga egasiz.

© 2025 Tokenoversity. Barcha huquqlar himoyalangan.