Кіріспе

Криптографияда тұз – бұл бір бағытты функцияға (хэш функциясы) қосымша кіріс ретінде берілетін кездейсоқ дерек. Тұз қолдану, алдын ала есептелген кестелерді (мысалы, радуга кестелерін) пайдаланатын шабуылдарға қарсы қорғауға көмектеседі, өйткені сәтті шабуыл үшін қажетті кесте мөлшерін едәуір арттырады. Бұл деректер базасында бірнеше рет кездесетін парольдерді де қорғайды, себебі әр пароль үшін жаңа тұз қолданылады. Тұз қолдану киберқауіпсіздікте кеңінен қолданылады, Unix жүйесінің тіркелгіштерінен бастап интернет қауіпсіздігіне дейін. Тұздар криптографиялық нонстармен байланысты.

Тұзды қайта пайдалану

Барлық құпия сөздер үшін бірдей тұзды қолдану қауіпті, себебі тұзды ескеретін алдын ала есептелген кесте тұздың мәнін жояды. Әрбір құпия сөз үшін ерекше тұз қолданылған дерекқорлар үшін алдын ала есептелген кестелер жасау, оны жасауға кететін есептеу ресурстарының көптігіне байланысты мүмкін емес. Бірақ, егер барлық жазбалар үшін ортақ тұз қолданылса, онда мұндай кесте жасау (тұзды ескеретін) тиімді және табысқа жететін шабуылға айналуы мүмкін. Тұзды қайта қолдану салдарынан бірдей құпия сөзді пайдаланушылардың хэштері бірдей болуы мүмкін, сондықтан бір хэштің бұзылуы басқа құпия сөздердің де бұзылуына әкелуі мүмкін.

Тұз ұзындығы

Егер тұз тым қысқа болса, шабуылшы әрбір мүмкін парольға қосылған барлық мүмкін тұздардың тізімін алдын ала есептеп шығаруы мүмкін. Ұзын тұзды қолдану мұндай тізімнің тым үлкен болуын қамтамасыз етеді.

Артықшылықтары

Бір парольді және бірнеше парольді бұзудың айырмашылығын түсіну үшін пайдаланушылар мен олардың хэштері бар парольдері сақталған файлды қарастырайық. Егер файл тұзсыз болса, шабуылшы бір жолды таңдап, оны «attempt» деп атайды, содан кейін оның хэшін есептей алады. Файлда сақталған хэші бар пайдаланушының паролі «attempt»-ке сәйкес келуі де, келмеуі де мүмкін. Бірақ, егер «attempt» нақты пароль болмаса да, ол қабылданады, себебі жүйе кіргізілген парольдің хэшін есептеп, оны файлдағы сақталған хэшпен салыстыру арқылы ғана парольдерді тексеруге болады. Осылайша, әрбір сәйкестік бір пайдаланушының паролін бұзады, ал сәйкестік болу ықтималдығы файлдағы парольдер саны артумен бірге өседі. Керісінше, тұз қолданылса, шабуылшы hash(attempt[0] || salt[a]) есептеп, оны A жазбасымен салыстыруы керек, содан кейін hash(attempt[0] || salt[b]) есептеп, оны B жазбасымен салыстыруы керек, және т.с.с. Бұл тұзды қайта пайдаланудан сақтану арқылы бір әрекеттің бірнеше парольді бұзуына жол бермейді. Тұз парольдерді бұзу үшін алдын ала есептелген кестелерді қолдануға да қарсы тұрады. Мұндай кестелерде жиі қолданылатын парольдер мен олардың хэштері тізімделген немесе одан да күрделі алгоритмдер қолданылып, хэш тізбектерінің бастапқы және соңғы нүктелері сақталуы мүмкін. Қай жағдайда болса да, тұздау хэштерді ұзарту және оларды үлкенірек символдар жиынтығынан құру арқылы алдын ала есептелген кестелерді пайдаланудан қорғайды, нәтижесінде кестедегі хэштердің қапталу ықтималдығы төмендейді. Атап айтқанда, алдын ала есептелген кестеге тек «attempt» жолын ғана қамту жеткіліксіз болады.

Қазіргі заманғы көлеңкелі пароль жүйесі, онда парольдердің хэштері мен басқа да қауіпсіздік деректері қоғамға жарияланбаған файлда сақталады, бұл мәселелерді аздап жеңілдетеді. Дегенмен, олар көп серверлі орналасуларда, орталықтандырылған парольді басқару жүйелерін пайдаланып, парольдерді немесе парольдердің хэштерін бірнеше жүйеге жібергенде де маңызды болып қалады. Мұндай жағдайларда әрбір жеке жүйенің түбірлік есептік жазбасы орталықтандырылған парольдік жүйе әкімшілеріне қарағанда аз сенімді деп есептелуі мүмкін, сондықтан парольді хэштеу алгоритмінің қауіпсіздігін, соның ішінде бірегей тұздық мәндерді жасауды қамтамасыз ету маңызды болып қалады. Тұздың тағы бір (аз маңызды) артықшылығы бар: екі пайдаланушы бірдей жолды пароль ретінде таңдауы мүмкін. Тұз болмаса, бұл пароль пароль файлында бірдей хэш ретінде сақталады. Бұл екі шоттың бірдей парольді қолданатынын ашып береді, соның салдарынан бір шоттың паролін білетін кез келген адам екінші шотқа кіре алады. Парольдерді екі кездейсоқ символмен тұздау арқылы, тіпті екі шот бірдей парольді қолданса да, ешкім оны тек хэштерді қарап анықтай алмайды. Тұздау сонымен қатар бір адамның бірнеше жүйеде бірдей парольді қолданғанын анықтауды өте қиын жасайды.

1970-1980 жылдар

Unix-тің бұрынғы нұсқалары тұздалған парольдердің хэштерін (екі таңбалы кездейсоқ тұзбен басталатын парольдер) сақтау үшін /etc/passwd пароль файлына жүгінген. Unix-тің осы ескі нұсқаларында тұз, тұздалған парольдің хэшімен бірге passwd файлында (ашық мәтін түрінде) сақталған. Пароль файлы жүйедегі барлық пайдаланушыларға оқуға қолжетімді болған. Бұл, пайдаланушы құқықтары бар бағдарламалық құралдардың пайдаланушы есімдерін және басқа да ақпаратты табуы үшін қажет болды. Сондықтан парольдердің қауіпсіздігі тек мақсатқа сәйкес қолданылатын бір бағытты функциялар (шифрлау немесе хэштеу) арқылы қорғалған. Unix-тің алғашқы нұсқалары парольдерді сегіз таңбамен шектеген және 12 биттік тұз қолданған, бұл 4096 мүмкін тұз мәніне мүмкіндік берді. Бұл 1970-ші жылдардағы есептеу және жад құнына қатысты дұрыс тепелдік болды.

1980 жылдар - қазіргі уақыт

Көлеңкелік пароль жүйесі хэштер мен тұзға қол жеткізуді шектеу үшін пайдаланылады. Тұз сегіз таңбадан, хэш 86 таңбадан тұрады, ал пароль ұзындығының өзі шектелмейді, тек стек асып кету қатесі тудырмаса.

Веб-қосымшаларды іске асыру

Веб-қосымшалардың деректер базасында пайдаланушы паролінің хэш-мәнін сақтауы жиі кездесетін жағдай. Тұз қолданылмаса, сәтті SQL инъекциясы шабуылы оңай бұзылатын парольдерге әкелуі мүмкін. Көптеген пайдаланушылар бірнеше сайт үшін бірдей парольді қайта қолданатындықтан, тұзды пайдалану – веб-қосымшаның жалпы қауіпсіздігінің маңызды бөлігі болып табылады. Пароль хэштерін қорғау үшін тұзды пайдалану туралы қосымша ақпаратты нақты тілдерде немесе кітапханаларда (PHP, .NET кітапханалары және т.б.) төмендегі сыртқы сілтемелер бөлімінен табуға болады.