63
6 КРИПТОГРАФИЯЛЫҚ ХЕШ-ФУНКЦИЯЛАР
Бұл бөлімде хеш-функция ұғымы тұжырымдалған, және хеш-функцияны
құрастыру алгоритмдардың қысқа шолуы берілген. Одан басқа, хеш-функцияны
құрастыру үшін шифрлау блокты алгоритмның пайдалану мүмкіндігі қарастырылған.
Бөлім мақсаты: «хеш-функция» ұғымымен және осындай функцияның жұмыс
принципімен таңысу.
6.1 Хеш-функция ұғымы
Хеш-функция (hash function) - бұл кез келген ұзындығы бар жол үшін кейбір
бүтін мәнді немесе кейбір тіркелген ұзындығы бар басқа жолды есептейтің
математикалық немесе басқа функция. Математикалық түрде былай жазуға болады:
h =
H(
M),
мұндағы
М – бастапқы хабар (кейде болашақ үлгісі деп аталады);
h – нәтиже, хеш-
функция мәні деп аталады (және де хеш-коды немесе хабар дайджесы – ағыл.
message
digest).
Хеш-функцияның мағынасы болашақ үлгінің сиппаты белгісін - хеш-функция
мәнің анықтау. Әдетте бұл мәнде тіркелген өлшемі болады, мысалы, 64 немесе 128 бит.
Хеш-кодты әрі қарай кейбір есепті шешу үшін талдауға болады. Мысалы, хеширлау
деректерді салыстыру үшін қолданылу мүмкін: егер екі деректер массивінде хеш-коды
әртүрлі болса, массивтер міндетті түрде әртүрлі; егер бірдей болса – массивтер де бірдей.
Жалпы жағдайда бастапқы деректер мен хеш-коды арасында бір мәнді сәйкестік жоқ,
өйткені хеш-функция мәндерінің саны кіру деректер варианттарынан әрқашан кем.
Сондықтан, бірдей хеш-кодты беретің кіру хабардың бірнеше көптігі бар (осындай
жағдайды
коллизия деп атайды). Коллизияның болу ықтималдығы хеш-функцияның
сапасын бағалауда үлкен роль ойнайды.
Хеш-функциялар қазіргі криптографияда жиі қолданылады.
Ең қарапайым хеш-функция «модулі 2 бойынша қосынды» операцияны
пайдалануымен құрастырылу мүмкін: кіру жолды аламыз, модулі 2 бойынша барлық
байтты қосамыз және байт-нәтижені хеш-функция мәні ретінде қайтарамыз. Хеш-функция
мәнің ұзындығы бұл
жағдайда, кіру хабардың өлшеміне тәуелсіз, 8 бит болады.
Мысалы, цифрлық түрге айналдырған бастапқы хабар келесі болсын (он алтылық
форматта):
3E 54 A0 1F B4
Хабарды екілік түрге ауыстырайық, байттарды бір бірінің астында жазайық және
әрбір бағанда биттерді модулі 2 бойынша қосайық:
0011 1110
0101 0100
1010 0000
0001 1111
1011 0100
----------
0110 0101
Нәтиже (0110 0101
(2)
немесе 65
(16)
) хеш-функцияның мәні болып табылады.
Бірақ мұндай хеш-функцияны криптографиялық мақсаты үшін пайдалануға
болмайды, мысалы, электронды қолды құрастыру үшін, өйткені бақылау қосындыны
өзгертпей қол қойылған хабардың мазмұның өзгерту оңай.
Сондықтан қарастырылған хеш-функция криптографиялық қолдануға келмейді.
Криптографияда хеш-функция жақсы деп саналады, егер бірдей хеш-функция мәні бар екі
64
болашақ үлгіні жасауға қиын болса, және де егер функция шығуының кіруден анық
тәуелділігі жоқ болса.
Криптографиялық хеш-функцияларға қойылатын талаптарды тұжырымдайық:
- хеш-функция кез келген өлшемі бар хабарларға қолданылу
болу керек;
- функция мәнің есептеуі жеткілікті
тез орындалу керек;
- хеш-функция мәні белгілі болғанда, сәйкес болашақ үлгіні
М табу қиын (мүмкін
емес) болу керек;
- хабар
М белгілі болғанда, осындай хеш-функция мәні бар басқа хабарды
M табу
қиын болу керек;
- қандай да болса кездейсоқ әртүрлі бірдей хеш-функция мәні бар жұп хабарды
табу қиын болу керек.
Айтылған талаптарға қанағаттандырылатын хеш-функцияны жасау оңай емес. Есте
сақтау қажет, функция кіруіне кез келген өлшемі бар деректер түседі, ал хеш-нәтижесі
олар үшін бірдей болмау керек.
Қазіргі уақытта тәжірибеде хеш-функция ретінде кіру хабарды блок блокпен
өңдейтің және кіру хабардың әрбір
M
i
блогы үшін хеш-мәнің
h
i
есептейтің функциялар
қолданылады
h
i
=
H(
M
i
,
h
i-1
),
мұндағы
h
i-1
– кіру деректердің бұрыңғы блогы үшін хеш-функцияны есептеу нәтижесі.
Нәтижесінде хеш-функциянын шығуы
h
n
кіру хабардың барлық
n блоктарының
функциясы болып табылады.
6.2 Хеш-функцияны құрастыру үшін шифрлау блокты алгоритмды пайдалану
Хеш-функция ретінде симметриялық шифрлаудың блокты алгоритмын
пайдалануға болады. Егер пайдаланатын блокты алгоритм криптографиялық
берікті болса,
онда оның негізіндегі хеш-функция да сенімді болады.
Хеш-кодты алу үшін блокты алгоритмды пайдалануының ең қарапайым тәсілі -
CBC тәртіпте хабарды шифрлау. Бұл жағдайда хабар, ұзындығы шифрлау алгоритмның
блок ұзындығына тең блок тізбегі ретінде беріледі. Қажет болғанда, керекті ұзындығы бар
блокты алу үшін соңғы блок оң жағынан нөлмен толтырылады. Хеш-мәні мәтіннің соңғы
шифрланған блогы болады. Сенімді блокты шифрлау алгоритмды пайдаланғанда алынған
хеш-мәннің келесі қасиеті болады:
- шифрлау кілтті білмей, берілген ашық ақпарат массивы үшін хеш-мәнің есептеу
мүмкін емес;
- шифрлау кілтті білмей, берілген хеш-функцияның мәні үшін ашық деректерді
іріктеп алу мүмкін емес.
Осылай құрастырылған хеш-мәнің әдетте
еліктеу ендірме немесе
аутентификатор
деп атайды және хабардың тұтастығын тексеру үшін пайдаланылады. Сонымен, еліктеу
ендірме – бұл ашық деректерге және құпиялы кілттік ақпаратқа тәуелді бақылау
комбинациясы. Еліктеу ендірменің пайдалану мақсаты ақпарат масивінде барлық
кездейсоқ немесе әдейі өзгертулерді табу. Кіру хабарды өңдегенде хеш-функциямен
алынған мәні хабарға қосылады, егер хабар дұрыстығы белгілі болса. Алушы хабардың
еліктеу ендірмесін есептеп және алынған хеш-кодпен салыстырып хабар тұтастығын
тексереді. Хеш-коды қауіпсіздік тәсілмен берілу керек, мысалы, еліктеу ендірмені
жіберушінің жабық кілтімен шифрлау, яғни қолды жасау. Алынған хеш-кодты
симметриялық шифрлау алгоритмы мен де шифрлауға болады, егер жіберуші мен
алушыда симметриялық шифрлаудың ортак кілті болса.
Көрсетілген еліктеу ендірмені алу және пайдалану процесі ресей стандартында
ГОСТ 28147-89 бейнеленген. Стандарт берілетің хабар тұтастығын тексеру үшін, тіркелу
тіртібінде барлық хабарды шифрлаудың шығуында алынған блоктың, кіші 32 битын