Кіріспе

Деректер құрылымының түрі Криптография және компьютерлік ғылым салаларында хэш ағашы немесе Меркл ағашы – әрбір "жапырақ" түйіні дерек блогының криптографиялық хэшімен белгіленген, ал жапырақ емес түйін (тарау, ішкі түйін немесе inode деп аталады) өзінің дочерлік түйіндерінің белгілерінің криптографиялық хэшімен белгіленген ағаш. Хэш ағашы үлкен деректер құрылымының мазмұнын тиімді және қауіпсіз тексеруге мүмкіндік береді. Хэш ағашы – хэш тізімі мен хэш тізбегінің жалпылама түрі. Берілген бинарлық хэш ағашының бір бөлігі екенін көрсету үшін жапырақ түйінінің ағаштағы жапырақ түйіндері санының логарифміне пропорционал хэштерді есептеу қажет. Керісінше, хэш тізімінде бұл сан жапырақ түйіндерінің санына пропорционалды. Сондықтан Меркл ағашы – криптографиялық міндеттеме схемасының тиімді мысалы, онда ағаштың түбірі міндеттеме ретінде қарастырылады және жапырақ түйіндерін ашуға болады, олар бастапқы міндеттеменің бөлігі екенін дәлелдеуге болады. Хэш ағашының түсінігін 1979 жылы оны патенттеген Ральф Мерклдің есімімен атады.

Шолу

Хаш-ағаш – хэштер ағашы, онда жапырақтар (яғни, жапырақ түйіндері, кейде «жапырақтар» деп те аталады) файл немесе файлдар жиынтығы сияқты дерек блоктарының хэштері болып табылады. Ағаштың жоғарырақ орналасқан түйіндері – олардың тиісті балаларының хэштері. Мысалы, жоғарыдағы суретте 0 хэші – 0 0 және 0 1 хэштерінің қосылуының хэштеу нәтижесі. Яғни, хэш 0 = хэш(хэш 0 0 + хэш 0 1), мұнда "+" қосылуды білдіреді. Көптеген хаш-ағаш жүзеге асырулары екілік (әр түйіннің астында екі бала түйін) болып келеді, бірақ әр түйіннің астында одан да көп бала түйіндерін пайдалануға болады. Әдетте, хэштеу үшін SHA 2 сияқты криптографиялық хэш-функция қолданылады. Егер хаш-ағаш тек қасақана зақымданудан қорғау үшін ғана қажет болса, CRC сияқты сенімсіз тексеру сомаларын қолдануға болады. Хаш-ағаштың жоғарғы жағында жоғарғы хэш (немесе түбір хэш немесе бас хэш) орналасқан. P2P желісінде файлды жүктемес бұрын, көбінесе жоғарғы хэш сенімді дереккөзден, мысалы, дос немесе жүктеуге ұсынылатын файлдары бар веб-сайттан алынады. Жоғарғы хэш қолжетімді болған кезде, хаш-ағашты P2P желісіндегі кез келген сенімсіз дереккөзден, мысалы, кез келген қатысушыдан алуға болады. Содан кейін алынған хаш-ағаш сенімді жоғарғы хэшпен салыстырылады, және егер хаш-ағаш зақымдалған немесе жалған болса, бағдарлама жоғарғы хэшпен сәйкес келетін хаш-ағашты тапқанша басқа дереккөзден хаш-ағаш іздейді. Хаш тізімінен басты айырмашылығы – хаш-ағаштың бір тармағын бір уақытта жүктеуге болады және бүкіл ағаш әлі қолжетімді болмаса да, әр тармақтың тұтастығын дереу тексеруге болады. Мысалы, суретте L2 дерек блогының тұтастығын дереу тексеруге болады, егер ағашта 0 0 және 1 хэштері болса, дерек блогын хэштеу арқылы және нәтижені 0 0 хэшімен, содан кейін 1 хэшімен біріктіріп, соңында нәтижені жоғарғы хэшпен салыстыру арқылы. Сол сияқты, L3 дерек блогының тұтастығын ағашта 1 1 және 0 хэштері болса тексеруге болады. Бұл тиімді, өйткені файлдарды өте кішкентай дерек блоктарына бөлуге болады, сондықтан олар зақымдалған жағдайда тек кішкентай блоктарды қайта жүктеу қажет. Хэштелген файл үлкен болса, мұндай хаш тізімі немесе хаш тізбегі өте үлкен болады. Бірақ егер ол ағаш болса, бір кішкентай тармақты жылдам жүктеуге болады, тармақтың тұтастығын тексеруге болады, содан кейін дерек блоктарын жүктеу басталады.

Екінші преимажға шабуыл

Меркл хэш түбірі ағаштың тереңдігін көрсетпейді, бұл шабуылшыға бастапқы құжаттан өзге, бірақ сол Меркл хэш түбіріне ие құжат жасауға мүмкіндік беретін екінші преобраз атағына жол ашады. Мысалы, шабуылшы екі дерек блогынан тұратын жаңа құжатты құруы мүмкін, онда бірінші блок – хэш 0 0 + хэш 0 1, ал екінші блок – хэш 1 0 + хэш 1 1 болады. Осы мәселені шешудің қарапайым жолы «Сертификат ашықтығы» стандартында көрсетілген: жапырақ түйіндерінің хэшін есептегенде, хэш деректеріне 0x00 байты қосылады, ал ішкі түйіндердің хэшін есептегенде 0x01 қосылады. Tiger tree хэштері Gnutella, Gnutella2 және Direct Connect P2P файл алмасу протоколдарында, сондай-ақ Phex, BearShare, LimeWire, Shareaza, DC++ және gtk gnutella сияқты файл алмасу бағдарламаларында қолданылады.