Кіріспе
Хеш алгоритмі (Message digest hashing algorithm) MD5 хабардың дайындықтарын алу алгоритмі – 128 биттік хэш-мәнді шығаратын кеңінен қолданылатын хэш-функция. MD5 1991 жылы Рональд Ривест бұрынғы MD4 хэш-функциясын алмастыру үшін әзірлеген, ал 1992 жылы RFC 1321 ретінде сипатталған. MD5 деректердің түгелдігін кездейсоқ зақымданудан тексеру үшін бақылау сомасы ретінде қолданылуы мүмкін. Тарихи тұрғыдан ол криптографиялық хэш-функция ретінде кеңінен қолданылған; алайда, оның көптеген осалдықтары бар екені анықталды. Ол криптографиялық емес мақсаттар үшін де қолданылуы мүмкін, мысалы, бөлінген деректер базасында белгілі бір кілт үшін бөлімді анықтау үшін, және жаңа Secure Hash алгоритмдеріне қарағанда есептеу талаптары аз болғандықтан артықшылыққа ие болуы мүмкін.
The MD5 message digest algorithm is a widely used hash function producing a 128 bit hash value. MD5 was designed by Ronald Rivest in 1991 to replace an earlier hash function MD4, and was specified in 1992 as RFC 1321. MD5 can be used as a checksum to verify data integrity against unintentional corruption. Historically it was widely used as a cryptographic hash function; however it has been found to suffer from extensive vulnerabilities. It remains suitable for other non cryptographic purposes, for example for determining the partition for a particular key in a partitioned database, and may be preferred due to lower computational requirements than more recent Secure Hash Algorithms.
Тарих және криптоанализ
MD5 — профессор Рональд Ривесттің (Rivest, 1992) MIT-де жасаған хабарлама дайджест алгоритмдерінің бірі. Аналитикалық жұмыстар MD5-тің алдыңғы нұсқасы MD4 қауіпсіз емес екенін көрсеткенде, Ривест 1991 жылы MD5-ті қауіпсіз алмастыру ретінде жобалады. (Ханс Доббертин кейін MD4-те әлсіздіктерді тапты.) 1993 жылы Ден Боер және Босселер MD5 компрессиялық функциясының «жалған соқтығысуын» табудың алғашқы, бірақ шектеулі нәтижесін берді; яғни, екі түрлі бастамалау векторы бірдей дайджест шығарады. 1996 жылы Доббертин MD5 компрессия функциясының соқтығысуын жариялады (Доббертин, 1996). Бұл толық MD5 хэш-функциясына шабуыл болмаса да, криптографтарға SHA 1 (кейіннен ол да бұзылды) немесе RIPEMD 160 сияқты алмастыруға көшуді ұсынды. Хэш-мәнінің мөлшері (128 бит) туған күн шабуылын қарастыруға жеткілікті. MD5CRK — 2004 жылдың наурыз айында MD5-тің іс жүзінде қауіпсіз еместігін көрсету үшін, туған күн шабуылын қолданып соқтығысуды табу мақсатымен басталған үлестірілген жоба. MD5CRK 2004 жылдың 17 тамызынан кейін аяқталды, осы кезде Сяоюнь Ванг, Дэнго Фэн, Сюэцзя Лай және Хонгбо Ю толық MD5 үшін соқтығысулар жариялады. Олардың аналитикалық шабуылы IBM p690 кластерінде бір сағатқа созылды. 2005 жылдың 1 наурызында Арьен Ленстра, Сяоюнь Ванг және Бенне де Вегер әртүрлі ашық кілттерімен және бірдей MD5 хэш-мәні бар екі X.509 сертификатын жасауды көрсетті, бұл нақты соқтығысу. Бұл құрылымға екі ашық кілт үшін жеке кілттер де кірді. Бірнеше күннен кейін Властимил Клима бір ғана ноутбукте бірнеше сағат ішінде MD5 соқтығысуларын жасауға болатын жақсартылған алгоритмді сипаттады. 2006 жылдың 18 наурызында Клима «туннельдеу» деп аталатын әдісті қолданып, бір ноутбукте бір минут ішінде соқтығысуды табуға болатын алгоритмді жариялады. MD5-ке қатысты әртүрлі RFC түзетулері жарияланды. 2009 жылы АҚШ Кибер Команды өздерінің ресми эмблемасының бір бөлігі ретінде өздерінің миссиялық мәлімдемесінің MD5 хэш-мәнін пайдаланды. 2010 жылдың 24 желтоқсанында Тао Шие және Дэнго Фэн MD5 бір блоктық (512 биттік) соқтығысуды жариялады. (Бұрынғы соқтығысулар көп блоктық шабуылдарға негізделген.) «Қауіпсіздік себептерімен» Ши мен Фэн жаңа шабуыл әдісін жарияламады. Олар криптографиялық қауымдастыққа 2013 жылдың 1 қаңтарына дейін 64 байттық басқа соқтығысуды бірінші тапқанға 10 000 АҚШ долларын сыйлық ретінде ұсынды. Марк Стивенс бұл шақыруға жауап берді және соқтығысқан бір блоктық хабарламаларды, сондай-ақ құрылым алгоритмін және көздерін жариялады. 2011 жылы MD5 және HMAC MD5 қауіпсіздігін жаңарту үшін ақпараттық RFC 6151 мақұлданды.
Қауіпсіздік
Кез келген криптографиялық хэш-функцияның негізгі талаптарының бірі – екі әртүрлі хабарды бірдей мәнге хэштейтіндей есептеу арқылы табу мүмкін болмауы керек. MD5 бұл талапты катастрофалық түрде орындамайды. 2008 жылдың 31 желтоқсанында CMU Бағдарламалық инженерия институты MD5 негізінен «криптографиялық тұрғыдан бұзылған және одан әрі пайдалануға жарамсыз» деген қорытындыға келді. MD5-тің әлсіздіктері 2012 жылы Flame деген зиянды бағдарламасымен пайдаланылды. 2019 жылға дейін MD5 өзінің жақсы құжатталған әлсіздіктеріне және қауіпсіздік сарапшыларының қолдануын тоқтату ұсыныстарына қарамастан, кеңінен қолданыла береді. Бұдан басқа, белгілі бір префикстермен соқтығысуға қол жеткізуге мүмкіндік беретін шабуыл да бар, ол стандартты компьютерлік жабдықтарды пайдалана отырып, секунд ішінде екі кіріс үшін берілген префикстермен соқтығысуды тудырады (күрделілігі 239). Соқтығыстарды табу мүмкіндігіне GPU-ларды қолдану арқасында үлкен көмек көрсетілді. NVIDIA GeForce 8400GS графикалық процессорында секундтық 16-18 миллион хэш есептеуге болады. NVIDIA GeForce 8800 Ultra секундтық 200 миллионнан астам хэш есептей алады. Бұл хэш және соқтығысу шабуылдары әртүрлі жағдайларда, соның ішінде соқтығысатын құжат файлдары мен цифрлық сертификаттар арқылы көпшілыққа көрсетілді. 2019 жылғы мәліметтер бойынша, кеңінен қолданылатын контентті басқару жүйелерінің төрттен бірі әлі де құпия сөзді хэштей үшін MD5 қолданып жатыр.
Қауіпсіздік мәселелерінің жалпы көрінісі
1996 жылы MD5 дизайнында қателік табылды. Бұл сол кезде өлімге алып келетін әлсіздік деп есептелмесе де, криптографтар SHA 1 сияқты басқа алгоритмдерді қолдануға кеңес берді, бірақ ол да кейіннен осал екені анықталды. 2004 жылы MD5 соқтығысуға төзімді емес екені көрсетілді. Осы себепті, MD5 сандық қауіпсіздіктің осы қасиетіне сүйенетін SSL сертификаттары немесе цифрлық қолтаңбалар сияқты қолданбалар үшін қолайлы емес. Зерттеушілер MD5-те одан да ауыр кемшіліктерді анықтады және MD5 бірдей тексеру сомасын шығаратын екі дерек кірістіруді жасауға мүмкіндік беретін соқтығысу шабуылын сипаттады. MD5-ті бұзу бойынша 2005, 2006 және 2007 жылдары одан да көп жетістіктерге қол жеткізілді. 2008 жылдың желтоқсан айында зерттеушілер тобы осы әдісті пайдаланып SSL сертификатының жарамдылығын жалғандады. 2010 жылға қарай CMU Бағдарламалық инженерия институты MD5-ті "криптографиялық тұрғыдан бұзылған және одан әрі пайдалануға жарамсыз" деп санайды, ал АҚШ үкіметінің көптеген қолданбалары енді SHA 2 хеш функцияларының отбасын талап етеді. 2012 жылы Flame вирусы MD5-тің осалдығын пайдаланып Microsoft цифрлық қолтаңбасын жалғандады.
Тездетудің осал жақтары
1996 жылы MD5 қысу функциясында соқтығысулар табылды, ал Ханс Доббертин RSA Laboratories техникалық бюллетенінде былай деп жазды: "Бұл шабуыл әлі MD5-тің практикалық қолданысына қауіп төндірмейді, бірақ болашақта соқтығысуға төзімді хэш-функциясы қажет болған жағдайларда MD5 енді қолданылмауы керек". 2005 жылы зерттеушілер бірдей хэшпен PostScript құжаттары мен X.509 сертификаттарының жұптарын жасауға қол жеткізді. Сол жылы MD5-тің авторы Рон Ривест "md5 және sha1 екеуі де (соқтығысуға төзімділік тұрғысынан) анық бұзылған" деп мәлімдеді. 2008 жылдың 30 желтоқсанында зерттеушілер тобы 25-ші Хаос коммуникациясы конгресінде MD5 соқтығысуларын пайдаланып, MD5 хэшімен тексерілгенде заңды болып көрінетін аралық сертификат беру органының сертификатын қалай жасағанын жариялады. Бұл RapidSSL шығарған әдеттегі SSL сертификатын осы эмитент үшін жұмыс істейтін CA сертификатына айналдыруға, содан кейін RapidSSL шығарған заңды болып көрінетін басқа сертификаттарды жасауға мүмкіндік берді. RapidSSL сертификаттарын шығарушы VeriSign компаниясы, бұл осалдық туралы хабарланғаннан кейін RapidSSL үшін MD5 тексеру алгоритмі ретінде жаңа сертификаттарды шығаруды тоқтатқанын мәлімдеді. VeriSign MD5 арқылы қол қойылған сертификаттарды қайтарып алудан бас тартса да, олардың жауабы эксплойт авторлары (Александр Сотиров, Марк Стивенс, Джейкоб Аппельбаум, Арьен Ленстра, Дэвид Молнар, Даг Арне Освик және Бенне де Вегер) тарапынан жеткілікті деп танылды. SSL зерттеушілері: "Біздің күткен әсеріміз – сертификаттау органдары жаңа сертификаттарды шығаруда MD5 қолдануды тоқтатуы керек. Сондай-ақ, MD5-тің басқа да қолданыстарын қайта қарастыруға үміттенеміз". Екі үлгінің арасындағы айырмашылық – әр нибблдің ең басты биті ауысқан. Мысалы, жоғарғы үлгідегі 20-шы байты (оффсет 0x13), 0x87, екілік санауда 10000111 болып көрсетілген. Байттың басты биті (сонымен қатар бірінші нибблдің басты биті) 00000111 жасау үшін ауыстырылады, бұл 0x07-ге тең, төменгі үлгіде көрсетілгендей. Кейіннен екі файлдың арасында жеке таңдалған префикстермен соқтығысуды жасауға болатыны анықталды. Бұл техника 2008 жылы жалған CA сертификатын жасауда қолданылды. 2014 жылы Антон Кузнецов MPI-ді пайдаланып, параллельді соқтығысу іздеудің жаңа әдісін ұсынды, ол есептеу кластерінде 11 сағат ішінде соқтығысуды табуға мүмкіндік берді.
Премидждегі осалдық
2009 жылдың сәуір айында MD5 алгоритмінің алдын ала бейнеге тұру қабілетін бұзатын шабуыл жарияланды. Бұл шабуыл әзірге тек теориялық, толық алдын ала бейне табу үшін есептеу күрделілігі 2123,4-ке жетеді.
Қолданбалар
MD5 дайджесттері бағдарламалық әлемде файлдың толық келгеніне сенімділік беру үшін кеңінен қолданылды. Мысалы, файл серверлері көбінесе файлдар үшін алдын ала есептелген MD5 (md5sum деп аталады) тексеру сомасын ұсынады, сонда пайдаланушы жүктелген файлдың тексеру сомасын онымен салыстыра алады. Unix негізіндегі операциялық жүйелердің көпшілігі өздерінің тарату пакеттерінде MD5 сомасын есептейтін құралдарды қамтиды; Windows пайдаланушылары қосылған PowerShell функциясы "Get-FileHash", "certutil hashfile <filename> md5" командалық жол функциясын пайдалана алады, Microsoft құралын орната алады немесе үшінші тараптың бағдарламаларын қолдана алады. Android ROM-дары да осы типтегі тексеру сомасын пайдаланады. MD5 түйіспелерін жасау оңай болғандықтан, файлды жасаған адам сол тексеру сомасы бар екінші файлды жасау мүмкін, сондықтан бұл техника кейбір зиянды бұрмалау түрлерінен қорғамайды. Кейбір жағдайларда тексеру сомасына сенуге болмайды (мысалы, егер ол жүктелген файлмен бірдей арна арқылы алынса), онда MD5 тек қателерді тексеру мүмкіндігін ғана қамтамасыз етеді: ол бұзылған немесе толық емес жүктемені анықтайды, бұл үлкен файлдарды жүктегенде жиі кездеседі. Тарихи тұрғыдан MD5 парольдің бір жақты хэшін, көбінесе кілтті созумен сақтау үшін қолданылды. NIST парольді сақтау үшін ұсынылатын хэштер тізіміне MD5-ті қоспайды. MD5 электрондық ашу саласында да қолданылады, заңдық ашу процесінде алмасылатын әрбір құжатқа бірегей идентификатор беру үшін. Бұл әдіс қағаз құжаттарын алмасу кезінде ондаған жылдар бойы қолданылып келген Бейтс нөмірлеу жүйесін алмастыру үшін пайдаланылуы мүмкін. Жоғарыда айтылғандай, соқтығысу шабуылдарының оңай болуына байланысты осы қолданыстан бас тарту керек.
Алгоритм
MD5 өзгермелі ұзындықты хабарды 128 биттік белгілі ұзындықты шығысқа өңдейді. Кіріс хабар 512 биттік блоктарға (он алты 32 биттік сөз) бөлінеді; хабардың ұзындығы 512-ге бөлінетіндей етіп, толықтырылады. Толықтыру келесідей жұмыс істейді: біріншіден, хабарламаның соңына 1 бит қосылады. Содан кейін хабарламаның ұзындығы 512-ге еселенгеннен кем 64 битке дейін жеткізу үшін қажетті нөлдер саны қосылады. Қалған биттер бастапқы хабарламаның ұзындығын көрсететін 64 битпен толтырылады, 264 модулі бойынша. MD5 негізгі алгоритмі 128 биттік күйде жұмыс істейді, ол A, B, C және D деп белгіленген 32 биттік төрт сөзден тұрады. Олар белгілі бір тұрақты мәндермен бастамаланады. Негізгі алгоритм әр 512 биттік хабарлама блогын кезекпен пайдаланып, күйін өзгертеді. Хабар блогын өңдеу төрт ұқсас кезеңнен тұрады, олар раундтар деп аталады; әр раунд F сызықтық емес функциясы, модульдік қосу және солға бұру негізінде 16 ұқсас операциядан құралады. 1-суретте бір раундтағы бір операция көрсетілген. Төрт мүмкін функция бар; әр раундта әртүрлісі қолданылады: тиісінше XOR, AND, OR және NOT операцияларын білдіреді.
denote the XOR, AND, OR and NOT operations respectively.