Tworzenie mechanizmu uwierzytelniania internetowego w łańcuchu bloków

Żyjemy w erze wygody, a wszystko, co może skrócić czas potrzebny na wykonanie prostych zadań, przyjmuje się z otwartymi ramionami.

Jeden z najważniejszych przykładów w świecie online pochodzi z dziedziny uwierzytelniania użytkowników. Wcześniej musieliśmy przechowywać kolekcję naszych identyfikatorów użytkowników i haseł, teraz możemy szybko i łatwo logować się przez Facebooka, Google i całą gamę innych usług.

Ale czy to mądre i czy są lepsze alternatywy?

W tym poście przyjrzymy się obecnemu stanowi uwierzytelniania użytkowników, a także kilku interesującym alternatywom, które są teraz dostępne dzięki technologii blockchain.

Problemy ze status quo

Jeśli chcesz stworzyć zastrzeżony obszar dla użytkowników swojej witryny, musisz zdecydować, czy opracować własny, unikalny system identyfikacji, uwierzytelniania i autoryzacji użytkowników, czy też skorzystać z gotowego rozwiązania.

To gotowe rozwiązanie zakłada, że ​​użytkownik ma już konto na jakiejś platformie (Facebook, Yahoo, Google, Outlook, a nawet e-mail). W takim przypadku wystarczy użyć odpowiedniego mechanizmu (najczęściej Protokół OAuth 2.0), aby sprawdzić, czy ktoś, kto próbuje zalogować się do Twojej witryny przy użyciu zewnętrznego identyfikatora użytkownika, jest tym samym użytkownikiem.

Opcje logowania społecznościowego

Liczne opcje logowania na konto społecznościowe. Źródło: NPM

Ta opcja jest łatwiejsza do wdrożenia, ale istnieje ryzyko dla użytkownika. Jeśli coś stanie się z jego głównym kontem (na przykład Facebook zablokuje konto bez powodu), straci on również dostęp do swoich informacji w Twojej witrynie.

Co więcej, jeśli jako użytkownik chcę zalogować się w witrynie, której jeszcze nie ufam, mam do czynienia z koniecznością udzielenia tej witrynie dostępu do moich danych osobowych. Obejmuje to informacje prywatne, takie jak moje imię i nazwisko, adres e-mail lub wiek. Jeśli witryna obsługuje tylko logowanie przy użyciu konta zewnętrznego, to rzeczywiście mam dość trudny wybór.

Albo odmawiam korzystania z tej strony, albo poświęcam swoją prywatność.

Większość użytkowników zwykle poświęca swoją prywatność i anonimowość, myśląc: „Nic złego się nie stanie, nie mam nic do ukrycia”. Niestety, większość ataków wymierzonych w nieprzygotowanego użytkownika, które kończą się stratami pieniężnymi, zaczyna się od słów takich jak:

„Co się stanie, jeśli wyślę ten kod SMS do pracownika banku?” lub „Czy wysyłanie nagłówków żądań do pracownika pomocy technicznej jest naprawdę takie złe?”

Zwykle odpowiedzi na takie pytania uczy się, gdy jest już za późno.

Jak Ethereum może pomóc

Zrozumieliśmy już, że istnieją trzy główne problemy:

  • Użytkownik nie jest zobowiązany do zaufania do odwiedzanej witryny i chce uniknąć wycieku swoich danych osobowych
  • Witryna chce korzystać z zewnętrznego systemu uwierzytelniania, aby uniknąć przechowywania danych użytkownika i związanych z tym wydatków na bezpieczeństwo
  • Istniejące systemy zewnętrzne zapewniające witrynom możliwość uwierzytelniania użytkowników niosą ze sobą niebezpieczeństwo cenzury. Każde konto można zablokować w dowolnym momencie bez wyjaśnienia powodów, a często bez możliwości odzyskania

Czy jednak moglibyśmy użyć bezpiecznej i zdecentralizowanej sieci, takiej jak Ethereum, w celu ułatwienia tego typu uwierzytelniania.

W końcu jest to para kluczy bezpieczna kryptograficznie, w której klucz publiczny reprezentuje adres portfela, a klucz prywatny nigdy nie jest przesyłany przez sieć. Co więcej, jest znany tylko jego właścicielowi i możliwe jest użycie asymetrycznego szyfrowania do uwierzytelniania użytkowników.

W najprostszym przypadku jako ID użytkownika możemy użyć adresu portfela Ethereum. Jeśli jednak użytkownik utraci dostęp do swojego klucza, to również utraci dostęp do systemu na zawsze.

Podobnie, jeśli Twój klucz został w jakiś sposób przejęty i haker jest w stanie go zdobyć, nie możesz już używać tego samego klucza do weryfikacji własności. Haker może po prostu udawać Ciebie we wszystkich witrynach, w których się rejestrujesz.

Implementacja EtherAuth

Była ciekawa propozycja, którą przedstawił MixBytes zespół na jednym z ostatnich hackathonów Ethereum. To był ich Inteligentny kontrakt EtherAuth silnik.

EtherAuth to próba zdecentralizowanego logowania do witryny i protokołu uwierzytelniania. Jest to analogiczne do przycisku „Zaloguj się przez Facebooka”, do którego prawdopodobnie przywykłeś. Jest to inteligentna umowa, która będzie przechowywać identyfikatory użytkowników i powiązane z nimi adresy portfeli

Moscow Hackathon Mixbytes

Członkowie zespołu Mixbytes na Moskiewskim Hackathonie. Źródło obrazu: Bankex

Identyfikator użytkownika to po prostu ciąg znaków UTF-8 o rozmiarze od 2 do 32 bajtów. Użytkownik sam tworzy go na początku portfela, a później użyje go, aby wejść do dowolnej witryny obsługującej EtherAuth.

Możliwe byłoby również dodanie ograniczenia możliwych znaków zawartych w ciągu. Można by to ograniczyć do znaków łacińskich i cyfr arabskich (podzbiory 7-bitowego kodowania ASCII), aby ograniczyć możliwość tworzenia wizualnie podobnych identyfikatorów.

Podczas tworzenia konta za pomocą EtherAuth tworzona jest para kluczy. Utworzysz klucz autoryzacyjny (authAddr) i klucz do przywracania dostępu (recoveryKey). Nazwa „klucz odzyskiwania” prawdopodobnie nie jest najlepsza, ponieważ ten adres jest używany do zarządzania kontem, a nie tylko do odzyskiwania.

Po utworzeniu oba adresy są takie same, jak adres portfela, który jako pierwszy dokonał transakcji. Użytkownicy, którym zależy na swoim bezpieczeństwie, powinni stworzyć osobny klucz Master i przechowywać go w miejscu niedostępnym z internetu.

Prawdopodobnie najbezpieczniej jest przechowywać to na kawałku papieru w chłodni. Przechowywanie papieru opiera się na tak zwanym ziarnie odzyskiwania. Odzyskiwanie nasion to zestaw 12 mnemonicznych słów, które użyte mogą odtworzyć pary kluczy dla twojego portfela.

Jeśli zamierzasz używać portfela do uwierzytelniania, zalecamy również użycie innego adresu niż ten, który przechowuje cały Twój Ether. W ten sposób unikniesz śledzenia przez hakerów klucza Authkey do portfela z Twoimi zasobami. Na razie nie można utworzyć oddzielnego klucza authKey i recoveryKey podczas tworzenia konta. Jest to coś, co można by zaktualizować w późniejszych iteracjach inteligentnego kontraktu. Jeśli chciałeś się bardziej chronić, rozważ to Usługi VPN.

Korzystanie z EtherAuth

Istnieje dedykowana strona internetowa przeznaczona do interakcji użytkownika z inteligentną umową. Możesz tam założyć konto, zmienić klucze lub je usunąć. Aby z nim pracować, użytkownik będzie musiał zainstalować dobrze znaną wtyczkę przeglądarki o nazwie MetaMask.

Oczywiście, jeśli jesteś już zapalonym użytkownikiem sieci Ethereum, to już używałeś MetaMask i prawdopodobnie będziesz miał pojęcie o tym, jak współdziała z siecią.

Ogólny proces uwierzytelniania użytkowników przy użyciu EtherAuth wygląda następująco:

  • Witryna (zaplecze) kontaktuje się z inteligentną umową i otrzymuje adres Ethereum użytkownika
  • Witryna (zaplecze) generuje i rejestruje wiadomość i prosi użytkownika o podpisanie tej wiadomości za pomocą adresu authKey
  • Użytkownik znajdujący się na stronie (frontend) podpisuje wiadomość za pomocą wtyczki MetaMask i wysyła ją do backendu
  • Witryna (zaplecze) weryfikuje podpis i jeśli wszystko jest w porządku, aktywuje sesję użytkownika

Ważne jest, aby weryfikacja uwierzytelnienia odbywała się w środowisku niekontrolowanym przez użytkownika. Innymi słowy, wszystkie testy należy przeprowadzić na serwerze, a nie w przeglądarce użytkownika.

Wśród problemów, które możesz napotkać, jest weryfikacja podpisów w części frontendowej. Nie wszystkie przeglądarki obsługują krzywe eliptyczne. Można go rozwiązać, dodając do kontraktu inteligentnego funkcję, która zwraca „Ecrecover” wynikają z wiadomości.

Unikalna tożsamość online

Zdjęcie za pośrednictwem Fotolia

W rezultacie masz realną weryfikację koncepcji zdecentralizowanego systemu uwierzytelniania opartego na Ethereum i używanego we wtyczce MetaMask. Ten system nadal wymaga kilku modyfikacji, aby zapewnić anonimowość użytkownikom. Użytkownik ma możliwość przywrócenia dostępu w przypadku utraty klucza podstawowego (ale nie w przypadku utraty klucza odzyskiwania).

Zdecentralizowany system nie podlega cenzurze dużych podmiotów, takich jak Google czy Facebook. Jeśli trzeba coś cenzurować, każda strona internetowa powinna to wdrażać niezależnie. Jednak wpłynęłoby to tylko na interakcję użytkownika z tą witryną, a nie na innych.

Sieć Ethereum ma obecnie dość niskie prędkości transakcji (podczas tworzenia konta użytkownik może czekać kilka minut), ale witryny mogą dość szybko uzyskać dane i zweryfikować użytkowników.

To rozwiązanie dobrze się skaluje, ponieważ istnieje wiele węzłów danych i każdy może w dowolnym momencie dodać kolejny. Złożoność wdrożenia takiego rozwiązania dla właścicieli witryn nie jest większa niż złożoność implementacji protokołu OAuth 2.0.

Wniosek

Należy zauważyć, że jest to wciąż wczesny etap projektu i dopiero niedawno został on zaproponowany na hackathonie.

Co więcej, wskaźniki adopcji dla Ethereum i ogólnie kryptowalut to nadal tylko ułamek tych, którzy korzystają z Facebooka i Google. Minie trochę czasu, zanim ludzie poczują się bardziej komfortowo, używając adresu Ether niż konta na Facebooku.

Jednak wskaźniki adopcji kryptowalut rzeczywiście rosną, a ostatnie skandale związane z danymi na Facebooku pomogły zrazić dużą liczbę osób. Ciekawie będzie sprawdzić, czy zdecentralizowane uwierzytelnianie może być realną alternatywą.

Wyróżniony obraz za pośrednictwem Fotolia

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me