Blog

Głodny wiedzy? Na evoBlogu czekają artykuły napisane przez naszych specjalistów.

Hasła: poznaj ich znaczenie oraz sposoby przechowywania

Wyobraź sobie, że mieszkasz w apartamencie na strzeżonym osiedlu, które jest monitorowane przez szereg kamer, a ochrona ma za zadanie wpuszczać tylko osoby zawierające kartę dostępu. Każdy z tych elementów ma podnieść poziom Twojego bezpieczeństwa, a więc czy to oznacza, ze bez żadnych obaw możesz rozdawać kartę dostępową do swojego mieszkania lub po prostu go nie zamykać? Trudno sobie wyobrazić taką sytuację, prawda? Zatem dlaczego tak wielu z nas powiela takie zachowania w podejściu do zarządzania hasłami.

W cyberbezpieczeństwie hasła służą jako pierwsza linia obrony zarówno dla użytkowników indywidualnych, jak i ogromnych sieci korporacyjnych. Tak często lekceważymy znaczenie hasła, a odpowiedzialność za nasze bezpieczeństwo zrzucamy na wysokopoziomowe metody szyfrowania, jak SSL (Secure Sockets Layer) i jego następca TLS (Transport Layer Security), zaawansowane zapory ognioweoprogramowanie antywirusowe, które może wyeliminować najbardziej misternie opracowane złośliwe oprogramowanie i oszustwa pod postacią trojanów. Historia wielokrotnie pokazała, że bez początkowej bariery, jaką zapewniają hasła, ​​złośliwi użytkownicy z wystarczającą determinacją i odpowiednim doświadczeniem w zakresie kodowania i tworzenia exploitów mogą znaleźć drogę do większości infrastruktur sieciowych.

Pewnie zdarzyło Ci się westchnąć podczas rejestracji nowego konta, gdy ulubione hasło nie spełniało wymagań bezpieczeństwa serwisu, dlatego należało je zmodyfikować o nowe znaki specjalne lub liczbowe. Wytyczne dotyczące zasad tworzenia haseł stały się pewnego rodzaju normą — nie tylko dla korporacji czy serwisów zawierających poufne informacje, ale dotyczą każdego serwisu przechowującego jakiekolwiek poświadczenia użytkowników. Niestety do dnia dzisiejszego właściciele serwisów nie mają żadnego obowiązku, aby wymuszać na użytkownikach tworzenie silnych haseł, a przecież posiadanie silnego hasła nigdy dotąd nie grało tak ważnej roli. 

We współczesnych czasach prawie każdy z nas przeniósł część swojego życia do internetu – praca zdalna, możliwość załatwienia spraw urzędowych w formie elektronicznej, social media. Zatem zastanówmy się przez chwilę, jak wiele poufnych danych przetrzymujemy na swoich telefonach czy komputerach. Biorąc pod uwagę możliwości obliczeniowe dzisiejszego sprzętu, hakerzy są w stanie złamać słabe hasło w ciągu kilku chwil – a jeśli to samo hasło jest używane do różnych kont, przestępca może uzyskać dostęp do danych osobowych, danych bankowych, konta w mediach społecznościowych i innych niezliczonych systemów, które mogą prowadzić do kradzieży tożsamości, strat finansowych lub innych oszustw.

Używanie tego samego hasła do wielu kont jest nie lada ułatwieniem dla użytkownika, ale niesie za sobą duże zagrożenie dla naszych danych. Przejęcie jednego konta może prowadzić do utraty dostępu do wszystkich utworzonych profili. Jeśli chcesz dowiedzieć się więcej na temat mitygacji ryzyka związanego z wykorzystywaniem jednego hasła do wielu systemów, zapraszamy do zapoznania się z naszym poprzednim artykułem “OAuth – autoryzacja przez Google, Facebook”.

Sposoby szyfrowania haseł

Przed przejściem do zasad tworzenie haseł warto na samym początku wspomnieć, jak w ogóle są przechowywane nasze hasła, które tworzymy podczas rejestracji. W poprzednim artykule o logowaniu do systemów za pomocą portalów społecznościowych, wspominaliśmy jak istotne jest zaufanie do serwisu, któremu powierzamy nasze dane. Żaden serwis nie powinien przechowywać haseł w formie jawnej, niestety nadal słyszymy o przypadkach wycieku danych, gdzie hasła nie były odpowiednio zabezpieczone. 

Istotą uwierzytelniania jest zapewnienie użytkownikom zestawu poświadczeń, takich jak nazwa użytkownika i hasło, oraz weryfikacja, czy poświadczenia podane za każdym razem, gdy chcą uzyskać dostęp do aplikacji, są prawidłowe. Dlatego potrzebujemy sposobu na przechowywanie tych informacji w naszej bazie danych do przyszłych porównań. Jednak przechowywanie haseł jest trudnym zadaniem i niesie za sobą szereg zasad, wskazówek i opinii. W dalszej części artykułu przyjrzyjmy się mechanizmom, które sprawiają, że przechowywanie haseł jest bezpieczne i łatwiejsze.

Czarna skrzynka, czyli mechanizm logowania

Prostym podejściem do przechowywania haseł jest utworzenie tabeli w naszej bazie danych, która mapuje nazwę użytkownika z hasłem. Gdy użytkownik się loguje, serwer otrzymuje żądanie uwierzytelnienia zawierające nazwę użytkownika i hasło. Następnie system wyszukuje nazwę użytkownika w tabeli i porównuje podane hasło z zapisanym hasłem w bazie. Zgodność podanych poświadczeń nadaje użytkownikowi dostęp do aplikacji.

Siła zabezpieczeń i odporność tego modelu zależy od sposobu przechowywania hasła. Najbardziej prymitywnym, a tym samym najmniej bezpiecznym formatem przechowywania haseł jest zwykły tekst (termin ten odnosi się do czytelnych danych przesyłanych lub przechowywanych w postaci “jawnej”).

Przechowywanie haseł w postaci zwykłego tekstu jest równoznaczne z zapisaniem ich na kartce papieru cyfrowego. Jeśli atakujący miałby włamać się do bazy danych i ukraść tabelę haseł, mógł uzyskać dostęp do każdego konta użytkownika. Ten problem jest spotęgowany faktem, że wielu użytkowników ponownie używa tego samego hasła lub różnych jego odmian, potencjalnie umożliwiając atakującemu dostęp do innych usług niż ta, która została złamana. To wszystko brzmi jak koszmar bezpieczeństwa!

Pamiętajmy, że atak może również pochodzić z wewnątrz organizacji. Przykładem może być nieuczciwy inżynier oprogramowania z dostępem do bazy danych, który może nadużywać swoich kompetencji, pobierać dane uwierzytelniające w postaci zwykłego tekstu i uzyskiwać dostęp do dowolnego konta w systemie.

Bezpieczniejszym sposobem przechowywania hasła jest przekształcenie go w dane, których nie można przekonwertować z powrotem na oryginalne hasło, za pomocą kryptograficznej funkcji skrótu. Ten mechanizm nazywa się haszowaniem.

Haszowanie

W kryptografii funkcja skrótu jest algorytmem matematycznym, który mapuje dane o dowolnym rozmiarze na ciąg bitów o stałym rozmiarze. Dane wejściowe to oryginalny tekst, natomiast na wyjściu funkcji pojawia się ciąg znaków o stałym rozmiarze nazywany skrótem.

Bezpieczna kryptograficzna funkcja skrótu musi być: 

  • Deterministyczna
    Taka sama wiadomość zawsze wygeneruje taki sam hash.
  • Jednokierunkowa
    Uzyskanie oryginalnej wiadomości na podstawie znajomości jej skrótu jest zadaniem trudnym obliczeniowo.
  • Odporna na kolizje
    Znalezienie dwóch dowolnych wiadomości, które miałyby taki sam skrót jest zadaniem trudnym obliczeniowo.
  • Wysoce zrandomizowana
    Niewielka zmiana na wejściu powinna prowadzić do znaczącej i nieskorelowanej zmiany na wyjściu. Bez tej właściwości zastosowanie metod kryptoanalizy pozwoli na przewidywanie danych wejściowych na podstawie danych wyjściowych. 

Funkcje skrótu mają szerokie zastosowanie, to ich założenia są zazwyczaj niezmienne – obliczenie skrótu powinno być łatwe i praktyczne, ale „trudne lub niemożliwe jest ponowne wygenerowanie oryginalnych danych wejściowych, jeśli znana jest tylko wartość skrótu”. Tak więc, w przeciwieństwie do szyfrowania, haszowanie jest mechanizmem jednokierunkowym. zatem przed zapisaniem hasła użytkownika w bazie danych aplikacji, należy zastosować do niego kryptograficzną funkcję skrótu, której wynik zostanie zapisany w bazie danych. W tym miejscu pojawia się jeden problem – którą funkcję skrótu wykorzystać?

 Powszechnie używane algorytmy mieszające obejmują algorytmy Message Digest (MDx), takie jak MD5 i Secure Hash Algorithms (SHA), takie jak SHA-1 oraz  SHA-2 (obejmujący szeroko stosowany algorytm SHA-256). W dalszej części artykułu dowiemy się o sile tych algorytmów i o tym, jak niektóre z nich zostały przestarzałe z powodu szybkiego postępu obliczeniowego lub przestały być używane z powodu luk w zabezpieczeniach.

Ataki kolizyjne niszczą funkcje skrótu

Ponieważ funkcje skrótu mogą pobierać dane wejściowe o dowolnym rozmiarze, ale wytwarzać skróty, które są ciągami o stałym rozmiarze, zbiór wszystkich możliwych danych wejściowych jest nieskończony, podczas gdy zbiór wszystkich możliwych wyników jest skończony. Umożliwia to mapowanie wielu danych wejściowych do tego samego skrótu. Dlatego nawet gdybyśmy byli w stanie odwrócić hash, nie wiedzielibyśmy na pewno, że wynikiem jest wybrane dane wejściowe. Nazywa się to kolizją i nie jest to pożądany efekt.

Kolizja kryptograficzna występuje, gdy dwa unikalne dane wejściowe generują ten sam skrót. W konsekwencji atak kolizyjny jest próbą znalezienia dwóch danych wejściowych, które dają ten sam skrót. Osoba atakująca może wykorzystać taką kolizję do oszukania systemów, które opierają się na zahaszowanych wartościach, fałszując prawidłowy skrót przy użyciu nieprawidłowych lub złośliwych danych. W związku z tym funkcje skrótu kryptograficznego muszą być również odporne na atak kolizyjny, bardzo utrudniając atakującym znalezienie tych unikalnych wartości.

Rodzaje haszów kryptograficznych

Najpopularniejsze skróty kryptograficzne realizowane są w oparciu o dwa rodzaje algorytmów: MDx oraz SHA. Ze względu na dosyć łatwe odnalezienie kolizji, przedstawiciele pierwszej grupy (MD4, MD5) obecnie rzadko bywają rekomendowani. Zaleca się wykorzystywanie algorytmów drugiej grupy, przynajmniej w formie 256-bitowej wartości funkcji.

MD4

Funkcja MD4 od początku lat dziewięćdziesiątych była motywacją do stworzenia całej grupy funkcji skrótów MD/SHA. Rok 1992 postawił zasadność stosowania tego algorytmu pod znakiem zapytania z powodu udanego ataku na dwie ostatnie rundy algorytmu, a następnie wykazanie jednokierunkowości dwóch pierwszych rund oraz publikacja algorytmu znajdowania kolizj. Ostatecznie w 2004 roku dobiegł kres funkcji MD4, gdy zespół chiłskich badaczy pod przewodnictwem profesor Wang znaleźli i opublikowali wzór na generowanie kolizji.

MD5

Funkcja MD5, jako bezpośrednia następczyni MD4, została zaprezentowana już w 1991 roku. Jednak już dwa lata później znalezione zostają tzw. pseudokolizje, a w roku 1995 wykazane zostają kolizje dla jej funkcji kompresującej. Kolejne słabości ujawniono w 2004 roku (metoda otrzymania kolizji dla dwublokowych wiadomości) i w 2006, kiedy to miała miejsce publikacja algorytmu precyzującego kolizje z wykorzystaniem tzw. tunelowania (na znalezienie kolizji wystarczyła w tym przypadku zaledwie minuta).

SHA 0/ SHA 1/ SHA 2

Algorytm SHA 0 powstał w roku 1993. Publikowane z upływem lat informacje dotyczące wykazywania kolizji o coraz lepszych stopniach złożoności sprowokowały powstanie nowych generacji tej funkcji.

 SHA 1, która zastąpiła SHA 0, także wykazała się brakiem odporności na ataki, co sprowokowało do dalszych prac nad ulepszaniem algorytmu.

 SHA 2 przedstawiona została w 2001 roku. Posiadała trzy wersje generujące skróty o długości 256, 384 i 512 bitów. Ponieważ nie wykazano żadnych skutecznych prób złamania funkcji, w 2002 roku SHA 2 stała się zalecanym standardem (FIPS PUB 180-2). Biorąc jednak pod uwagę to, iż znalezienie kolizji może być jedynie kwestią czasu, w 2007 roku NIST rozpisała konkurs na opracowanie nowej funkcji skrótu pod roboczą nazwą SHA 3.

Jednak jednym z problemów projektowych związanych z rodzinami MD oraz SHA jest to, że zaprojektowano je tak, aby były szybkie obliczeniowo. To, jak szybko funkcja kryptograficzna może obliczyć skrót, ma natychmiastowy i znaczący wpływ na bezpieczeństwo hasła – szybsze obliczenia oznaczają szybsze ataki siłowe

Nowoczesny sprzęt w postaci procesorów komputerowych i procesorów graficznych może obliczyć miliony, a nawet miliardy skrótów SHA-256 na sekundę. Dlatego założenia kryptograficznej funkcji skrótu do hashowania haseł są odrobinę odmienne – potrzebujemy funkcji, która wolno haszuje hasła, aby prawie zatrzymać atakujących. Chcemy również, aby ta funkcja była adaptacyjna, abyśmy mogli zrekompensować przyszłe szybsze działanie sprzętu, dzięki czemu funkcja będzie działać wolniej.

Technologia szybko się zmienia. Zwiększenie szybkości i mocy komputerów może przynieść korzyści zarówno inżynierom próbującym budować systemy oprogramowania, jak i atakującym próbującym je wykorzystać. Niektóre programy kryptograficzne nie są zaprojektowane do skalowania wraz z mocą obliczeniową. Jak wyjaśniono wcześniej, bezpieczeństwo hasła zależy od tego, jak szybko wybrana funkcja skrótu kryptograficznego może obliczyć skrót hasła. Szybka funkcja działałaby szybciej na znacznie potężniejszym sprzęcie.

Szukasz wykonawcy, który jakość kodu stawia na pierwszym miejscu?

Zapraszamy do bezpłatnej konsultacji – porozmawiamy i sprawdzimy, czy możemy w tym pomóc.

Bcrypt

Na ratunek przychodzi funkcja Bcrypt. Jest to adaptacyjna funkcja mieszająca oparta na algorytmie kryptograficznym symetrycznego szyfru blokowego Blowfish i wprowadzająca współczynnik pracy (znany również jako współczynnik bezpieczeństwa).

Wartość współczynnika pracy określa, jak powolna będzie funkcja skrótu, co oznacza, że ​​różne współczynniki pracy będą generować różne wartości skrótu w różnym czasie, co czyni go wyjątkowo odpornym na ataki brute force. Biorąc pod uwagę dalszy postęp technologiczny, zakładamy, że komputery z roku na rok będą stawały się bardziej wydajne, ale my będziemy mogli zwiększyć współczynnik pracy, aby to zrównoważyć, tj. spowolnić atak.

Co oznacza słabe i silne hasło? 

Każdy z nas słyszał wielokrotnie o potrzebie tworzenia silnego hasła i o zagrożeniach płynących z wykorzystania haseł, które są słabe. Tak łatwo nam przychodzi posługiwanie się tymi przymiotnikami, ale czy tak naprawdę wiemy co oznaczają i jak rozróżnić SILNE i SŁABE hasło? Postaramy się choć odrobinę przybliżyć wspomnianą terminologię. 

Słabe hasło

Z uwagi na fakt, iż słabe hasła zawsze odgrywają główną rolę we włamaniach do systemów, warto wiedzieć czym cechuje się słabe hasło. Tak jak wspominaliśmy nie wszystkie systemy wymuszają na użytkowniku utworzenia złożonego, bezpiecznego hasła, w wyniku czego użytkownicy używają prostych ciągów znaków, takich jak haslo, haslo123, Haslo@123, 12345, QWERTY, które są niezwykle łatwe do złamania. 

 Jednakże słabe hasło nie zawsze musi cechować niewielka długość i użyte znaki, ale również oznacza zgadywalność. “Asia@1992” wygląda na dość skomplikowane, ale można je odgadnąć, dlatego nie używaj hasła związanego z nazwą, miejscem lub numerem telefonu komórkowego.

Aby utworzyć bezpieczne hasło, nigdy nie powinieneś używać swojego imienia i nazwiska, imion członków rodziny, ważnych dat, takich jak rocznice i urodziny, specjalne miejsca, słowa „hasło” lub sekwencyjne listy cyfr lub liter. Wszystkie są zbyt łatwe do złamania i należy ich unikać za wszelką cenę.

Pamiętaj również, aby hasło nie zawierało słów ze słownika. Kiedy hakerzy próbują uzyskać dostęp do twoich kont, wykorzystują różne słowniki przeciwko Twoim hasłom, próbując je złamać. Obejmuje to zarówno słowa z języka polskiego, angielskiego, jak i słowa obce i wzorce fonetyczne

Hakerzy są również w stanie wyszukiwać często używane podstawienia, zatem zamiana liter z „@” na „a” lub „!” na „l” nie pomaga. Przy brutalnym ataku losowe słowo z popularnymi zamiennikami i cyframi lub symbolami dodanymi na końcu zajęłoby tylko około 3 dni.

Cechy słabego hasła

  • Hasło zawiera mniej niż osiem znaków.
  • Hasło jest lub zawiera wyraz słownikowy (możemy je znaleźć w słowniku języka polskiego lub innym).
  • Wzorce słów lub liczb, takie jak aaabbb, qwerty, zyxwvuts, 123321 itp.
  • Zawiera datę urodzenia lub inne dane osobowe, takie jak adresy i numery telefonów.
  • Zawiera imiona rodziny, zwierząt domowych, przyjaciół, współpracowników, postaci z fantazji itp.
  • Każde z powyższych pisane od tyłu.
  • Każdy z powyższych poprzedzony lub zakończony cyfrą (np. haslo1, 1haslo). 

Silne hasło

Strategia tworzenia silnych haseł składa się z wielu elementów – najbardziej podstawowe to długość i różnorodność. Dłuższe hasło jest z natury silniejsze, ponieważ zawiera więcej znaków, co wpływa na zwiększenie liczby możliwych kombinacji. Hasło utworzone z wielkich i małych liter, cyfr oraz symboli specjalnych również wzmacnia bezpieczeństwo hasła. Korzystając z tych zasad znacznie utrudnisz złamanie hasła. Ta metoda może wydłużyć czas potrzebny na odgadnięcie hasła z kilku dni do ponad stu lat.

Zauważmy zatem, jak niewielkim kosztem podnieśliśmy bezpieczeństwo naszego hasła poprzez zmieszanie małych i wielkich liter, cyfr oraz znaków specjalnych. Warto w tym miejscu wspomnieć, że hasło “niemożliwe do złamania” zazwyczaj oznacza, że czas jego złamania jest nieopłacalny dla hakera. Wszystko zależy od struktury i długości hasła, rodzaju skrótu kryptograficznego oraz sprzętu cyberprzestępcy. To wszystko wpływa na złożoność hasła i moc obliczeniową sprzętu, co sprowadza się do liczby możliwych kombinacji znaków, z których może być utworzone hasło oraz czas, w którym wszystkie kombinacje mogą zostać sprawdzone. Więcej na ten temat w dalszej części artykułu. 🙂

Rozważmy liczbę możliwych kombinacji przy haśle 6-znakowych, przy wykorzystaniu poszczególnych znaków:

  • Wyłącznie cyfry (0-9)
________________________________________________
liczba możliwych postawień101010101010
W106= 106 = 1 000 000
możliwych haseł do utworzenia
  • Wyłącznie małe litery
________________________________________________
liczba możliwych postawień262626262626
W266= 266 = 308 915 776 
możliwych haseł do utworzenia
  • Małe i wielkie litery
________________________________________________
liczba możliwych postawień525252525252
W526= 526 = 19 770 609 664 
możliwych haseł do utworzenia
  • Małe i wielkie litery i cyfry
________________________________________________
liczba możliwych postawień626262626262
W626= 626 = 56 800 235 584 
możliwych haseł do utworzenia
  • Małe i wielkie litery, cyfry i znaki specjalne
________________________________________________
liczba możliwych postawień959595959595
W956= 956 = 735 091 890 625 
możliwych haseł do utworzenia

Idealne hasło to takie, które jest łatwe do zapamiętania, ale “niemożliwe” do złamania. Chociaż znalezienie idealnego hasła jest trudne do osiągnięcia to istnieje kilka zasad, których możesz użyć, aby zbliżyć się do niego tak blisko, jak to tylko możliwe.

Ważnym aspektem jest również tworzenie różnych haseł dla każdego konta. Pamiętaj, że jeśli używasz tego samego hasła do konta na Facebooku, bankowości internetowej, konta Allegro, naruszenie jednego konta pozwoli hakerowi wejść na wiele innych serwisów. Zawsze należy ustawiać inne bezpieczne hasło dla każdego konta, aby zapewnić maksymalne bezpieczeństwo.

Cechy silnego hasła

  • Ma co najmniej 8 znaków;
  • Zawiera zarówno duże, jak i małe litery (np. a–z, A–Z), cyfry, znaki specjalne (np. 0-9!@#$%^&*()_+|∼−=\′{}[]:“;'<>?/).
  • Nie zawiera żadnych słów dostępnych w każdym języku, slangu, dialekcie, żargonie itp.
  • Nie jest oparte na danych osobowych, nazwiskach rodziny itp.

 Podsumowanie

Posiadanie silnych i unikalnych haseł jest kluczem do ochrony w dobie dzisiejszego Internetu. Choć często myślimy o Internecie jako o miłym, beztroskim miejscu, to w rzeczywistości bardziej przypomina on Dziki Zachód niż spokojną strefę. Istnieje wiele osób, które każdego dnia próbują zabrać Twoje pieniądze i tożsamość i wykorzystać je do własnych celów. Silne hasła to jedna z rzeczy, które możesz zrobić, aby zapewnić maksymalne bezpieczeństwo swoich kont online. Posiadanie skomplikowanego i długiego hasła znacznie utrudni hakerowi jego złamanie (niezależnie od typu ataku) oraz pomoże Ci w zapobieganiu nieautoryzowanemu dostępowi do kont i urządzeń internetowych. Zasadniczo im bardziej złożone jest Twoje hasło, tym większe bezpieczeństwo zapewni Twojej witrynie i innym kontom.

W rzeczywistości wirtualnej hasła (w połączeniu z nazwami kont użytkowników) są zwykle „kluczami do królestwa”, które zapewniają dostęp do zasobów i danych sieciowych. Każdy system powienien posiadać skuteczną politykę haseł – jest to podstawowy filar bezpieczeństwa. Niestety jest on trudniejszy do wdrożenia niż mogłoby się wydawać na pierwszy rzut oka. Mimo wymuszenia odpowiedniej długości i złożoności hasla, użytkownicy dodatkowo  powinni unikać wybierania popularnych haseł lub wybieranie krótkich, alfanumerycznych, jednoliterowych ciągów znaków, a ponadto zapisywanie haseł lub wysyłanie ich przez sieć w postaci zwykłego tekstu. 

Drogie, wyrafinowane zapory i inne rygorystyczne środki bezpieczeństwa (bez urządzeń do skanowania biometrycznego, które rozpoznają odciski palców lub obrazy siatkówki oka) nie ochronią Cię, jeśli intruz zna prawidłową nazwę użytkownika i hasło. Szczególnie ważne jest używanie silnych haseł do kont administracyjnych i usługowych.

W końcu Twoje hasło to wszystko, co chroni Twoje informacje, tożsamość, a nawet pieniądze przed cyberprzestępcami. zatem, jeśli w trakcie czytania tego artukułu, zauważyłeś, że którekolwiek z Twoich poświadczeń nie posiada cech “silnego” hasła, rozważ jego zmianę na ciąg znaków zaprojektowany według naszych wskazówek. Upewnij się, że jesteś bezpieczny. 

Jeśli chciałbyś dowiedzieć się więcej o sposobach na poprawę Twojego bezpieczeństwa w sieci, śledź nasz blog! Już wkrótce kolejne części serii atrykułów o bezpieczeństwie w sieci – poznamy metody łamania haseł i sprawdzimy ile czasu potrzeba na złamanie najbardziej populanych skrótów, aby lepiej zrozumieć, co rzeczywiście sprawia, że hasło daje gwarancję wysokiego poziomu bezpieczeństwa.


Potrzebujesz zrealizować aplikację webową lub jesteś w trakcie realizacji takiego projektu i jakość kodu oraz bezpieczeństwo są dla Ciebie bardzo ważne?

Zapraszamy do bezpłatnej konsultacji – sprawdzimy, czy możemy w tym pomóc.

{Również może Ci się spodobać}