Заслужава ли си хеширане на пароли от страна на клиента

Когато искам да внедря система за влизане, винаги сравнявам MD5 на дадената парола с нейната стойност в таблицата с потребители от страна на сървъра.

Въпреки това, мой приятел ми каза, че "ясна" парола може да бъде надушена от мрежов софтуер.

Така че въпросът ми е: добра идея ли е да хеширате паролата от страна на клиента? По-добре ли е от хеширането от страната на сървъра?


person Zakaria    schedule 15.09.2010    source източник
comment
Мислех да хеширам паролата от страна на клиента, но само за да мога да бъда сигурен, че паролата на клиента никога не съществува като ясен текст от страната на сървъра, което означава, че те могат да се чувстват по-лесно, знаейки, че не знам действителната им парола или не може лесно да се откаже от него, ако бъде компрометиран. луд ли съм   -  person Cyclone    schedule 24.09.2012
comment
Само за пълнота, тъй като говорим за сигурност и MD5 беше споменат в OP: Човек винаги трябва да използва сол, когато шифрова парола. Използването на обикновен, неосолен MD5 е малко по-добро от съхраняването на пароли в обикновен текст във вашата база данни.   -  person sffc    schedule 02.11.2013
comment
@Cyclone Хеширането САМО от страна на клиента определено е лоша идея, тъй като ако атакуващият по някакъв начин знае хеша, той може да го използва, за да влезе, сякаш знае паролата, заобикаляйки кода за хеширане от страна на клиента.   -  person Teejay    schedule 01.02.2016
comment
@Teejay: Ето защо не изпращате хеша ясно. Сървърът изпраща произволна сол на клиента, вие добавяте хеша на паролата и хеширате всичко отново, след което го изпращате обратно на сървъра, който прави същото изчисление. Атаката за повторение е неуспешна, защото солта ще бъде различна   -  person MSalters    schedule 22.04.2016
comment
@MSalters Ако е внедрено, както казахте, всичко е наред. Но не това каза циклонът.   -  person Teejay    schedule 22.04.2016
comment
Не трябва ли този въпрос да приключи на security.stackexchange.com?   -  person efr4k    schedule 31.05.2016
comment
@sab669: Защото това би означавало, че клиентът ще изпрати несоления хеш по мрежата. Нападателят може да прихване това и да извърши повторна атака. Но ако клиентът изпраща само осолени хешове, нападателят ще трябва да дехешира съобщението, за да промени солта за повторна атака. И правилните хеш функции не могат да бъдат дехеширани. (Коментарът току-що ли беше изтрит?)   -  person MSalters    schedule 14.06.2017


Отговори (11)


По принцип вашият приятел е прав. Но простото хеширане на паролата от страна на клиента е просто по-добро от изпращането й като обикновен текст на сървъра. Някой, който може да слуша вашите пароли с обикновен текст, със сигурност също може да слуша хеширани пароли и сам да използва тези уловени хешове, за да се удостовери срещу вашия сървър.

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

На сървъра:

  • генерирайте няколко бита случайни
  • изпрати тези битове (в чист текст) на клиента

На клиента:

  • генерирайте няколко произволни бита
  • свържете паролата, произволните битове на сървъра и произволните битове на клиента
  • генериране на хеш от горното
  • подайте произволни битове (в ясен текст) и хеш на сървъра

Тъй като сървърът знае собствената си произволна информация, както и произволните битове на клиента (получи ги като ясен текст), той може да извърши по същество същата трансформация. Този протокол гарантира, че никой, който слуша в този разговор, не може да използва информацията по-късно, за да се удостовери фалшиво, като използва записаната информация (освен ако не е използван много слаб алгоритъм...), стига и двете страни да генерират различни "битове шум" всеки път, извършва се ръкостискане.

Редактиране Всичко това е податливо на грешки и е досадно и донякъде трудно за правилно (прочетете: сигурно). Ако някога е възможно, обмислете използването на реализации на протокол за удостоверяване, които вече са написани от знаещи хора (за разлика от мен! Горното е само по спомен за книга, която прочетох преди време.) Наистина не искате да пишете това сами обикновено.

person Dirk    schedule 15.09.2010
comment
Как може да се удостовери с хеширана парола в системата за влизане, след като тя ще бъде хеширана отново? - person Zakaria; 15.09.2010
comment
Ако съхранявате паролите си в хеширана форма на сървъра (както трябва), тогава клиентът ще трябва да хешира паролата два пъти: първо, само паролата, така че да съвпада с представата на сървъра за света, и след това, както е описано по-горе за в името на протокола. - person Dirk; 15.09.2010
comment
@Dirk, тъй като нападателят може да подуши и в двете посоки, произволните битове ще бъдат подушени заедно. След това нападателят може да анализира (да се чете: груба сила) двойката заявка и отговор офлайн, за да намери оригиналната парола. - person Pacerier; 18.07.2012
comment
@Parcerier, да, разбира се. Но тук не става дума за това. Същото може да се каже за всякакъв вид схема за хеширане на пароли (осоляване срещу дъгови таблици и т.н.) Случайният шум се добавя, за да направи отговорните атаки трудни (както в: надяваме се, че е твърде скъпо да се разбива с груба сила), но не може да се изобрази те невъзможни. - person Dirk; 18.07.2012
comment
concatenate password, произволните битове на сървъра и произволните битове на клиента трябва да четат concatenate password hash, ако целта ви е да съхраните паролата в нейната хеш форма на сървъра и да я комбинирате с този протокол - person AaronLS; 01.04.2014
comment
Въпреки това, за целите на изпращане на парола или хеш на парола, често се използва асиметричен процес като Diffie-Hellman за установяване на криптиращ ключ, който позволява на двете страни да обменят информация, без шпионска страна да може да я дешифрира. Точно това прави SSL и е причината повечето сайтове да имат страницата си за вход на HTTPS/SSL. SSL вече защитава срещу повторни атаки. Бих препоръчал да използвате SSL, вместо да създавате свой собствен протокол. Въпреки че съм съгласен с солиране+хеширане на клиентската страна на паролата, но ги изпращайте през установена SSL връзка. - person AaronLS; 01.04.2014
comment
Не че процесът по-горе е очевидно погрешен, но е по-добре да използвате установен публичен протокол, който е щателно прегледан и проверен, след което да опитате да създадете свой собствен и да рискувате грешка, която ще компрометира вашия сайт. Правилно внедреният SSL ще защити и от голямо разнообразие от други атаки. - person AaronLS; 01.04.2014
comment
Само за да бъде ясно: ако не използвате HTTPS, няма значение какъв javascript изпълнявате на клиента; MITM би могъл да модифицира съдържанието на вашата страница, преди тя да достигне до клиента. HTTPS е единственото решение. - person aidan; 13.08.2015
comment
Въпрос за пояснение: използването на тази схема е възможно само ако паролите се съхраняват от страната на сървъра без сол, нали? Когато се използва сол, клиентът трябва да знае солта, преди да хешира паролата с произволни байтове. И разрешаването на клиента да получава сол от сървъра е риск за сигурността? Или не е голям риск (при условие, че по някакъв начин успея да създам постоянни фалшиви соли за несъществуващи потребители)? - person Kuba Wyrostek; 12.09.2015
comment
Обърнете внимание, че въпреки че HTTPS е добър като защита за кражби в реално време, той не е срещу атака срещу регистрационни файлове, независимо дали са регистрационни файлове за отстраняване на грешки от страна на сървъра или прозрачни регистрационни файлове на прокси сървъри, които компаниите са законово задължени да поддържат в повечето страни. Изпращането на пароли в ясен вид ги разкрива всеки път, когато тези регистрационни файлове изтекат (или поради небрежност, или след като са били поискани за правно разследване) - person Eric Grange; 13.01.2017
comment
За да предотвратите повторни атаки, при които нападателят използва повторно използван преди това хеш+сол, добавете nonce. За използване на salt+nonce в процес на удостоверяване при влизане вижте този отговор: stackoverflow.com/a/24978909/43615 - person Thomas Tempelmann; 16.05.2019

Първо, това НЕ подобрява сигурността на вашето приложение (ако приемем, че е уеб приложение).

Използвайте SSL (или всъщност TLS, който обикновено се нарича SSL), всъщност не е скъп (измерете времето, което използвате, за да намерите начини да го заобиколите, и го умножете по минималната заплата, закупуването на сертификат печели почти винаги).

Причината за това е проста. TLS решава проблем (когато се използва с купени сертификати, а не самоподписани), който е доста голям в криптографията: Как да разбера, че сървърът, с който говоря, е сървърът, с който мисля, че говоря? TLS сертификатите са начин да се каже: „Аз, сертифициращият орган, доверен от вашия браузър, удостоверявам, че уебсайтът на [url] има този публичен ключ със съответния частен ключ, който (личен ключ) само сървърът знае, вижте Подписах се върху целия документ, ако някой го е променял, можете да видите".

Без TLS всяко криптиране става безсмислено, защото ако седя до вас в кафене, мога да накарам вашия лаптоп/смартфон да мисли, че аз съм сървърът, а MiTM (Man in The Middle) вас. С TLS вашият лаптоп/смартфон ще крещи „НЕДОВЕРЕНА ВРЪЗКА“, защото нямам сертификат, подписан от сертифициращ орган, който да съответства на вашия сайт. (Шифроване срещу удостоверяване).

Отказ от отговорност: потребителите са склонни да щракат точно през тези предупреждения: „Ненадеждна връзка? Какво? Искам само моите снимки на котенца! Добавяне на изключение Щракнете Потвърди Щракнете УРА! Котенца!“

Въпреки това, ако наистина не искате да закупите сертификат, все пак Въведете хеширане на javascript от страна на клиента (и използвайте standford библиотеката (SJCL) за това, НИКОГА НЕ ВНЕДРЯВАЙТЕ САМИ КРИПТО ).

Защо? Повторно използване на парола! Мога лесно да открадна сесийната ви бисквитка (която ми позволява да се преструвам пред вашия сървър, че съм вие) без HTTPS (вижте firesheep). Ако обаче добавите javascript към вашата страница за вход, който преди изпращане хешира паролата ви (използвайте SHA256 или дори по-добре използвайте SHA256, изпратете им публичен ключ, който сте генерирали, и след това шифровайте хеширана паролата с това, не можете да използвате сол с това) и след това изпраща хешираната/шифрована парола на сървъра. РЕХЕХАЙТЕ хеша на вашия сървър със сол и го сравнете с това, което се съхранява във вашата база данни (съхранявайте паролата така:

(SHA256(SHA256(password)+salt))

(запазете солта и като обикновен текст в базата данни)). И изпратете паролата си така:

RSA_With_Public_Key(SHA256(password))

и проверете паролата си така:

if SHA256(RSA_With_Private_Key(SHA256(sent_password))+salt_for_username) == stored_pass: login = ok

Защото, АКО някой надуши вашия клиент, той ще може да влезе като ваш клиент (отвличане на сесия), но НИКОГА няма да види паролата в обикновен текст (освен ако не промени вашия javascript , обаче хакерът на Starbucks вероятно няма да знае как да/се интересува от това.) Така че те ще получат достъп до вашето уеб приложение, но не и до своя имейл/фейсбук/и т.н. (за което вашите потребители вероятно ще използват една и съща парола). (Имейл адресът или ще бъде тяхното име за вход, или ще бъде намерен в техния профил/настройки на вашето уеб приложение).

person FriendlyCryptoNeighbor    schedule 09.05.2014
comment
Мисля, че това е добър отговор, но вероятно се нуждае от още информация за това как да солите правилно и че е по-добре да използвате функция за бавно хеширане, преди да съхраните паролата на сървъра (като bcrypt). - person Neyt; 23.11.2018
comment
Да, вместо да използвате директно SHA256, използвайте bcrypt или дори по-сигурната реализация на argon2. - person T. Salim; 19.08.2020

Вероятно е добре да не се тревожите за това - както Дирк споменава, дори ако хеширате паролите, злонамерен потребител може да е в мрежа и да види изпращането на хеша и може просто да изпрати същия хеш.

Това е малко по-добро, тъй като не позволява на злонамерения потребител да разбере каква е паролата, но тъй като той все още може да влезе (или потенциално реконструирайте оригиналната парола), това не е толкова полезно.

Като цяло, ако сте загрижени за безопасността на паролите и данните на вашия потребител (и трябва да сте!), ще искате да използвате защитен SSL сървър. Ако това не ви притеснява по някаква причина, може и да не се занимавате с хеширане; това е просто сигурност чрез неизвестност.


Редактиране август 2014 г.: Google настоява все по-силно уебсайтовете да превключете към HTTPS навсякъде, тъй като защитата на самата комуникация е единственият начин за предотвратяване на атаки за подслушване на мрежата. Опитите за прикриване на предадените данни само ще попречат, но не и ще спрат, специализиран нападател и могат да дадат на разработчиците опасно фалшиво чувство за сигурност.

person dimo414    schedule 15.09.2010
comment
Мисля, че вашето мнение, че хеширането от страна на клиента е само малко по-добро, е вярно, ако сте единствено фокусирани върху получаването на паролата на x потребител и достъпа до една услуга. Ако вземете предвид колективния ефект, бих казал, че е много по-добър; защото предотвратява изграждането на големи бази данни за търсене на пароли, използвани за груба сила на солени хешове в множество услуги. ИМО. Вижте какво прави AWS Cognito в клиента за справка. - person f1lt3r; 06.09.2018

Всъщност не съм съгласен, че хеширането от страна на клиента е по-сигурно в този случай. Мисля, че е по-малко сигурно.

Целият смисъл на съхраняването на хеш на паролата във вашата база данни за разлика от истинската парола (или дори криптирана парола) е, че е математически невъзможно да се получи оригиналната парола от хеш (въпреки че теоретично е възможно да се получи сблъсък въвеждане на хеш, чиято трудност зависи от силата на сигурността на алгоритъма за хеширане). Възможният вектор на атака тук е, че ако потенциален нападател по някакъв начин компрометира вашата база данни за съхранение на пароли, той/тя все още няма да може да получи оригиналните пароли на вашите потребители.

Ако вашият механизъм за удостоверяване изпраща хеш на паролата, тогава в този сценарий за нарушаване на сигурността нападателят не трябва да знае истинската парола - те просто изпращат хеша, който имат, и хей, скоро, те имат достъп до акаунта на определен потребител, и като разширение, цялата ви система. Това напълно обезсмисля смисъла на съхраняването на хеширана парола на първо място!

Наистина сигурният начин да го направите е да изпратите на клиента еднократен публичен ключ, за да шифрова паролата, след което да я дешифрирате и хеширате отново от страна на сървъра.

Между другото, този тип въпроси вероятно ще получат повече експертни отговори в Security StackExchange.

person Adam Burley    schedule 17.01.2014
comment
Напълно съгласен с това. За да работи подходът от страна на клиента, човек също трябва да изпрати солта на клиента, което би обезсилило цялата цел на осоляването! - person James Wright; 09.07.2015
comment
@JamesWright: Въпросът е изпращането на произволна сол за всяко използване, което предотвратява незаконното повторно използване на съобщения за влизане. (Форма на повторни атаки). Изпращането на една и съща сол всеки път наистина е безсмислено. - person MSalters; 14.06.2017
comment
Това, което трябва да направите, е да използвате nonce (en.wikipedia.org/wiki/Cryptographic_nonce) . По този начин сървърът също контролира солта и прави това защитено. Хеширането от страна на клиента също е важно, така че инжектираният JS код да не може лесно да го намери по-късно. Повече тук: stackoverflow.com/a/21716654/43615 - person Thomas Tempelmann; 16.05.2019
comment
За използване на salt+nonce в процес на удостоверяване при влизане вижте този отговор: stackoverflow.com/a/24978909/43615 - person Thomas Tempelmann; 16.05.2019
comment
Очевидно, ако го хеширате от страната на клиента, ще трябва да го хеширате отново от страната на сървъра, за да предотвратите това, което правите. Както посочват други обаче, за поверителност вече искате криптиране от страна на клиента. - person Daniel Methner; 28.02.2020
comment
Изпращане на еднократен публичен ключ... не прави ли това SSL?? - person user1034912; 22.06.2020
comment
@user1034912 да, вярно, но предположих, че OP не иска да разчита само на SSL за сигурност. Някои мрежи, особено корпоративни, имат SSL терминатор при някакъв балансьор на натоварването, което означава, че паролата в обикновен текст е видима за мрежови компоненти, различни от обслужващото приложение. Обикновено използваме криптиране от страна на клиента, за да избегнем това и да осигурим e2e криптиране между клиента и обслужващото приложение. - person Adam Burley; 05.07.2020
comment
Хеширането от страна на клиента не е безсмислено. Трябва да помислите за поверителността на милиони потребители, а не само за един. Не разбирам защо хората биха си помислили, че един хакер е в състояние да прихване защитената връзка на милиони хора наведнъж към сървъра, предоставящ техните хеширани пароли. Това не е просто практически възможно. Дори и да е възможно, те биха били достатъчно умни, за да имат достъп сами до сървърите, които хешират паролата с ясен текст на потребителя и сега могат да видят хешираната парола и да я използват срещу сървъра. Няма разлика хеш или не от страна на клиента. Но хеширането от страна на клиента е много по-безопасно. - person S To; 18.04.2021

Обърнете внимание, че защитата на паролите срещу трети страни не е всичко.

Веднага след като поверителността е намесена (и кога изобщо не е, в наши дни?), вие не искате да знаете паролата. Не можете да злоупотребявате или да издавате това, което нямате, така че и вие, и вашите клиенти можете да спите по-добре, ако никога не виждате паролите им в ясен текст.

Следователно хеширането/криптирането от страна на клиента има смисъл.

person Raphael    schedule 30.08.2018
comment
Съгласен! Много хора пропускат тази точка. Ако изтегля вашата база данни с пароли със солени хеширани пароли и мога да разбия само една, използвайки база данни за търсене на хеш, тогава шансовете са, че мога да разбия всички. След като имам 50 хиляди оригинални пароли, сега имам ключа за x потребители на n услуги, които криптират само на сървъра. Ако всяка услуга уникално хешира паролата, преди да напусне клиента, голямата база данни от пароли между услуги става много, много по-малка. Проверете трафика си за влизане в AWS, вижте какво правят. Това е вероятно, скъпи ми Уотсън. - person f1lt3r; 06.09.2018
comment
Напълно съм съгласен, хеширането от страна на клиента е много по-логично по много причини. Ако хакер иска да знае действителната хеширана парола, ще му е трудно да я разбере. Просто е напълно глупаво и направо тъпо да изпращате пароли с ясен текст през защитена връзка. В света на хакерството няма такова нещо като защитена връзка. Хеширането на паролата на потребителя от страна на потребителя може да доведе до нови алгоритми за сигурност, които ще бъдат изключително трудни за хакерите да изглеждат като истинския потребител, като задействат откриването от сървъра. - person S To; 18.04.2021

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

погледнете връзката Криптиране на парола от страна на клиента

person SmAxlL    schedule 30.06.2011

Наскоро GitHub и Twitter обявиха, че паролите се съхраняват във вътрешни регистрационни файлове. Случвало ми се е това по невнимание в доклади за грешки и други регистрационни файлове, които са попаднали в splunk и т.н. За twitter, ако паролата на Тръмп беше там, може да е голяма работа за администратора да „види“, за други сайтове вероятно не като голяма работа, тъй като администраторите няма да имат голяма полза от него. Независимо от това, че като администратори не ни харесва да виждаме паролите, нали.

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

Шифроването не е лоша идея, защото разработчиците поне трябва да прескочат някои обръчи и ако откриете, че паролите са попаднали в регистрационни файлове, можете просто да промените ключа за криптиране, да унищожите оригинала и тези данни стават безполезни. Още по-добре завъртете ключовете всяка нощ и това може значително да намали прозорците.

Можете също да хеширате хеш във вашия потребителски запис. Изтеклите пароли ще бъдат хеширани пароли с обикновен текст. Сървърът ще съхранява хеширана версия на хеша. Разбира се, хешът става парола, но освен ако нямате фотографска памет, няма да запомните bcyrpt от 60 символа. Сол с потребителското име. Ако можете да съберете нещо за потребителя по време на процеса на влизане (без да излагате, че потребителският запис съществува), можете да добавите и това, като създадете по-стабилен хеш, който не може да бъде споделен между сайтове. Никой човек по средата не би могъл просто да изреже и постави уловения хеш между сайтовете.

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

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

person Eric Twilegar    schedule 03.05.2018
comment
Точно моя грижа. Ако сървърът влезе по някакъв начин случайно поради лошо внедряване или злонамерено намерение, тогава е възможно друг акаунт на потребителя да бъде компрометиран, ако той използва повторно пароли. - person Dan; 26.06.2018

Напоследък работя много по това, IRL има два проблема с хеширане / симетрично криптиране от страна на клиента, което наистина убива идеята: 1. Трябва да върнете солта обратно на сървъра НЯКАК... и за да го шифровате от страна на клиента, ще ви трябва парола... което проваля целта. 2. Разкривате своето хеширане (не е ГОЛЯМА сделка, тъй като повечето сайтове използват един от 3 или 4 алгоритма за хеширане), което прави атаката по-лесна (тъй като просто трябва да опитате един, а не n).

Това, към което в крайна сметка отидох, беше асиметрично криптиране на клиента, използвайки OpenPGP.js или подобен... Това разчита на импортиран или генериран от страна на клиента ключ на клиента и сървъра, изпращащ своя публичен ключ. Само публичният ключ на клиента може да бъде изпратен обратно на сървъра. Това предпазва от MIM атаки и е толкова сигурно, колкото и устройството (в момента съхранявам частния ключ на клиента по подразбиране в localStore, това е демонстрация).

ОСНОВНОТО предимство на това е, че никога не се налага потребителски данни да се съхраняват / дори в паметта некриптирани на моя сървър / хранилище за данни (и личният ключ на моя сървър е физически отделен)

Основата на това беше да се предостави на хората начин за сигурна комуникация там, където HTTPS е ограничен (напр. Иран / Северна Корея и др.), а също и просто забавен експеримент.

Далеч не съм първият, който се сеща за това, http://www.mailvelope.com/ използва това

person ScottGal    schedule 09.06.2013

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

Паролите са предварително хеширани от страна на клиента, преди да бъдат изпратени на сървъра. (Сървърът съхранява друга хеширана и осолена стойност на този хеш, изпратена от браузъра).

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

Потребителските данни са криптирани и от страна на браузъра.

А, така че атака на посредник би получила криптираните данни, но няма да може да ги дешифрира без действителната парола, използвана за влизане. (потребителска парола, съхранявана в DOM на браузъра, когато са влезли). Така че истинският потребител ще види дешифрираното съдържание, но посредникът не може. Това също означава, че която и да е NSA или друга агенция няма да може да поиска от вас/компанията/хостинг доставчика да дешифрира тези данни, тъй като за тях също би било невъзможно да направят това.

Някои малки примери и за двата метода са в моя блог http://glynrob.com/javascript/client-side-hashing-and-encryption/

person GlynRob    schedule 20.10.2013

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

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

person n8isjack    schedule 05.04.2020

Помислете за това: -

Клиентът изпраща заявка до сървъра „Имам парола за проверка“.

Сървърът изпраща на клиента само еднократен произволен низ. R$

Клиентът вгражда паролата на потребителя в този низ (въз основа на всички (променливи) правила, които искате да приложите).

Клиентът изпраща низа до сървъра и ако паролата е ОК, сървърът влиза в системата.

Ако сървърът получи друга заявка за влизане с помощта на R$, потребителят се отписва и акаунтът се замразява в очакване на разследване.

Очевидно всички други (нормални) предпазни мерки за сигурност ще бъдат взети.

person cneeds    schedule 04.11.2017