Хеширане

Съхраняване на пароли в сървърите

Представете си следния проблем.

Когато потребителите искат да влязат в техните компютри, те трябва да въведат своите пароли, нали?

Следователно паролите трябва да се съхраняват някъде в компютъра, нали?

Администраторът на компютъра има пълен достъп и може да види паролите, нали?

Обикновено потребителите използват едни и същи пароли и за други цели – електронна поща, електронно банкиране и т.н., нали?

Тогава какъв е проблемът администраторът да получи достъп до техните електронни пощи и електронно банкиране? Проблемът се нарича хеширане.

Хеш и пароли

За да се предпазим от кражба на самоличността от страна на системните администратори, паролите биват хеширани, когато се съхраняват на сървъра за първи път.

Хеширане означава преобразуването на изходно съобщение в друга форма, от която оригиналното съобщение не може да бъде получено. Това е много подобно на криптирането, но забележете думите не може. Криптираният текст може да бъде декриптиран. Хешираният не може.

Второто изискване към алгоритмите за хеширане е да генерират различен резултат за всички различни изходни съобщения.

Следователно когато имате парола и генерирате съответния й хеш, от никоя друга парола не може да се получи същата хеш стойност. А оригиналната парола не може да бъде възстановена, ако разполагаме само с хеша.

Когато компютърът съхранява само хеша на паролата, той винаги може да сравнява въведената парола с хеша. Той прави това, като изчислява хеша на току-що въведената парола и го сравнява със съхранената хеш стойност.

Пример за хеш

Да разгледаме следния прост пример за хеширащ алгоритъм:

Да генерираме хеш стойността, като сумираме всички символи от паролата (т.е. техните позиции в азбуката):

Парола: hello

Позиции на символите: h = 8, e = 5, l = 12, o = 15
Сума на позициите: 8 + 5 + 12 + 12 + 15 = 52
Хеш стойност: 52

Компютърът съхранява получената хеш стойност. Когато влиза потребител, той просто проверява въведената парола по същия алгоритъм:

Неправилна парола: bye
Позиции на символите: b = 2, y = 25, e = 5
Сума на позициите: 2 + 25 + 5 = 32
Резултат: паролата не е валидна, тъй като хеш стойностите са различни
Малък проблем на точно този алгоритъм е, че прекалено лесно се генерират валидни пароли, знаейки само хеша:
Хеш стойност: 52
Произволна сума от позиции, равна на 52: 10 + 10 + 10 + 10 + 10 + 2 = 52
Позиции от сумата: 10 = j, 2 = b
Паролата е: jjjjjb

Този алгоритъм не е добър за реалния живот, но за примери може да се използва.