Nie, nie ma sposobu, aby poprawić bezpieczeństwo hasła za pomocą JavaScript przeglądarki. Gorąco polecam przeczytanie tego artykułu . W twoim przypadku największym problemem jest problem jaja kurzego:
Na czym polega „problem z jajkiem kurzego” w dostarczaniu kryptografii JavaScript?
Jeśli nie ufasz sieci w zakresie dostarczania hasła lub, co gorsza, nie ufasz serwerowi, że nie zachowuje tajemnic użytkownika, nie możesz mu ufać, że dostarczy kod bezpieczeństwa. Ten sam napastnik, który węszył hasła lub czytał pamiętniki przed wprowadzeniem kryptografii, po prostu porywa kod kryptograficzny po tym, jak to zrobisz.
[…]
Dlaczego nie mogę użyć TLS / SSL do dostarczenia kodu kryptograficznego Javascript?
Możesz. To trudniejsze niż się wydaje, ale bezpiecznie przesyłasz krypto Javascript do przeglądarki używającej SSL. Problem w tym, że mając bezpieczny kanał z SSL, nie potrzebujesz już kryptografii Javascript; masz „prawdziwą” kryptografię.
Co prowadzi do tego:
Problem z uruchomieniem kodu kryptograficznego w Javascript polega na tym, że praktycznie każda funkcja, od której zależy krypto, może zostać po cichu przesłonięta przez dowolną treść użytą do zbudowania strony hostingowej. Zabezpieczenia kryptograficzne można cofnąć na wczesnym etapie procesu (generując fałszywe liczby losowe lub manipulując stałymi i parametrami używanymi przez algorytmy) lub później (przekazując kluczowy materiał z powrotem do atakującego) lub - w najbardziej prawdopodobnym scenariuszu --- pomijając całkowicie kryptowalutę.
Nie ma niezawodnego sposobu, aby jakikolwiek fragment kodu JavaScript mógł zweryfikować środowisko wykonawcze. Kod kryptograficzny Javascript nie może zapytać: „Czy naprawdę mam do czynienia z generatorem liczb losowych, czy z jakimś faksymileem dostarczonym przez atakującego?” I z pewnością nie można stwierdzić, że „nikomu nie wolno robić nic z tym krypto sekretem, chyba że w sposób, który ja, autor, zgadzam się”. Są to dwie właściwości, które często są udostępniane w innych środowiskach korzystających z kryptowalut i nie są dostępne w JavaScript.
Zasadniczo problem jest następujący:
- Twoi klienci nie ufają Twoim serwerom, więc chcą dodać dodatkowy kod bezpieczeństwa.
- Ten kod bezpieczeństwa jest dostarczany przez Twoje serwery (te, którym nie ufają).
Lub alternatywnie
- Twoi klienci nie ufają SSL, więc chcą, abyś użył dodatkowego kodu bezpieczeństwa.
- Ten kod bezpieczeństwa jest dostarczany przez SSL.
Uwaga: SHA-256 nie jest do tego odpowiedni, ponieważ tak łatwo jest brutalnie wymusić niesolone, nie iteracyjne hasła . Jeśli zdecydujesz się to zrobić tak, poszukaj realizacji bcrypt , scrypt lub PBKDF2 .