<keygen> w HTML to specjalny element formularza służący do automatycznego generowania pary kluczy kryptograficznych (prywatnego i publicznego) po stronie użytkownika. Umożliwiał on bezpieczną autoryzację użytkownika za pomocą certyfikatów cyfrowych, dostarczając publiczny klucz serwerowi i pozostawiając prywatny klucz tylko na komputerze użytkownika.
Jak działa <keygen> w HTML?
- Dodając
<keygen>do formularza, podczas wysyłania formularza przeglądarka sama tworzy parę kluczy: publiczny i prywatny, - Klucz publiczny zostaje przesłany na serwer jako część formularza, gdzie może być wykorzystany do wygenerowania certyfikatu klienta i późniejszej weryfikacji użytkownika,
- Klucz prywatny zawsze pozostaje tylko na urządzeniu użytkownika, dzięki czemu rozwiązanie jest wysoce bezpieczne,
- ten mechanizm pozwalał na łatwe wdrożenie rozwiązań opartych o certyfikaty, np. logowanie klienta bez hasła.
Przykład zastosowania elementu <keygen>
<!DOCTYPE html>
<html>
<head>
<title>Przykład użycia keygen</title>
</head>
<body>
<h2>Rejestracja z wykorzystaniem certyfikatu klienta</h2>
<form action="/rejestracja" method="post">
Nazwa użytkownika: <input type="text" name="username"><br><br>
Wygeneruj klucze: <keygen name="userkey"><br><br>
<input type="submit" value="Wyślij">
</form>
</body>
</html>
Po wypełnieniu formularza i kliknięciu „Wyślij”, przeglądarka przesyła publiczny klucz na serwer, a prywatny zostaje u użytkownika. Serwer na podstawie przesłanego klucza publicznego generuje certyfikat, który może służyć do późniejszego logowania albo podpisywania elektronicznych operacji.
Najważniejsze atrybuty <keygen>
- name – definiuje nazwę przesyłanego do serwera klucza publicznego;
- autofocus – automatycznie ustawia fokus na polu po wczytaniu strony;
- challenge – łańcuch znaków używany do dodatkowej weryfikacji tożsamości;
- disabled – dezaktywuje pole generatora;
- form – przypisuje pole do określonego formularza poza domyślną hierarchią DOM;
- keytype – pozwala wybrać algorytm kryptograficzny (np. ‘rsa’, ‘dsa’, ‘ec’).
Zastosowania w praktyce
- Autoryzacja bez haseł – użytkownik po raz pierwszy generuje klucz i uzyskuje certyfikat umożliwiający przyszłe logowanie za pomocą klucza, bez użycia tradycyjnego hasła;
- Podpisywanie dokumentów i operacji – w zaawansowanych systemach możliwa była obsługa podpisów elektronicznych opartych o lokalnie przechowywany klucz prywatny użytkownika;
- Systemy wewnętrzne i korporacyjne – ułatwienie dystrybucji certyfikatów i mechanizmów uwierzytelniania.
Obsługa <keygen> przez przeglądarki i status we współczesnych standardach
<keygen>było obsługiwane przez popularne przeglądarki (Chrome, Firefox, Safari, Opera),- w specyfikacji HTML5 element ten został zdeprecjonowany i jest obecnie wycofany z najnowszych wersji przeglądarek ze względów bezpieczeństwa i zgodności z nowoczesnym podejściem do zarządzania kluczami kryptograficznymi,
- nowe aplikacje powinny używać Web Crypto API i innych rozwiązań do operacji kryptograficznych po stronie klienta.
Podsumowanie kluczowych informacji
- <keygen> generuje parę kluczy podczas wypełniania formularza.
- Klucz publiczny trafia na serwer, prywatny zostaje u użytkownika.
- Element jest historyczny, obecnie niezalecany i nieobsługiwany w standardzie HTML – stosuj nowoczesne API do obsługi kryptografii.
Alternatywy dla <keygen>
Ze względu na wycofanie <keygen>, obecnie rekomendowane są inne mechanizmy generowania i obsługi kluczy po stronie klienta:
- Web Crypto API – umożliwia generowanie, zarządzanie i bezpieczne używanie par kluczy oraz podpisów cyfrowych bezpośrednio w przeglądarce przy pełnej kontroli programisty;
- Rozwiązania serwerowe – generowanie kluczy po stronie serwera i dystrybucja certyfikatów do użytkowników w sposób kontrolowany.
Dzięki tym informacjom wiesz, czym jest <keygen>, jakie było jego zastosowanie i dlaczego dziś nie jest już polecany do nowych projektów webowych.