Właśnie taka liczba elektronicznych dowodów tożsamości mogła stać się bezużyteczna w kolejnym wydaniu przeglądarki Chrome. O tym dlaczego, przeczytacie w tym wpisie.
Elektroniczny dowód osobisty
To czego do tej pory nie udało się zrealizować w naszym kraju od kilku dobrych lat działa z powodzeniem w Estonii. Elektroniczny dowód osobisty, bo o nim mowa, to połączenie tradycyjnego dowodu osobistego z certyfikatem cyfrowym zapisanym na karcie kryptograficznej. W estońskich dowodach na kartę zapisywane są dwa certyfikaty, jeden służący do uwierzytelniania, drugi zaś do realizacji podpisu cyfrowego. Dzięki zastosowaniu elektronicznych dowodów osobistych każdy obywatel Estonii otrzymuje możliwość wygodnego (bez stania w kolejkach) poruszania po cyfrowym, urzędowym świecie.
W połowie września 2015 roku okazało się jednak, że znaczna część wydanych dowodów zawiera błędy, które uniemożliwią ich przyszłe wykorzystanie w Chrome. Z racji dużej popularności przeglądarki Google sytuacja z miejsca stała się istotnym problemem.
„Ujemny” klucz publiczny
Kilkanaście dni temu w czasie testów elektronicznego dowodu osobistego przeprowadzanego na wersji beta przeglądarki Chrome oznaczonej numerem 46 napotkano na błąd, który uniemożliwił uwierzytelnienie do usługi. Ogólny komunikat błędu ERR_SSL_PROTOCOL_ERROR nie wskazywał na konkretną przyczynę takiego stanu rzeczy.
Jako, że w stabilnej wersji Chrome 45 problem nie występował to kolejnym krokiem było sprawdzenie zmian wprowadzonych w nowej wersji w części kodu odpowiedzialnej za obsługę mechanizmów kryptograficznych. Okazało się, że Google zdecydowało się nieco zaostrzyć reguły odpowiedzialne za parsowanie kluczy publicznych RSA (a właściwie poprawić wadliwą – bardzo pobłażliwą – implementacje w celu dostosowania do obowiązujących standardów).
Co więc sprawiło, że certyfikaty stosowane w estońskich elektronicznych dowodach osobistych przestały działać w Chrome 46? Otóż, moduł klucza publicznego RSA zapisany w certyfikacie powinien być liczbą całkowitą dodatnią, a w tym przypadku Chrome zinterpretował ją jako liczbę ujemną i zwrócił błąd. Dlaczego tak się stało?
Uwaga na kodowanie
Klucz publiczny certyfikatu kodowany jest zgodnie z regułami ASN.1 DER (Abstract Syntax Notation One Distinguished Encoding Rules). W przypadku, gdy liczba całkowita (tutaj moduł RSA), której najstarszy, najbardziej znaczący bit jest równy 1, ma być interpretowana jako liczba dodatnia, konieczne jest uzupełnienie jej tzw. wiądącym zerem 0x00 (postać heksadecymalna). W przypadku modułu klucza RSA wspomnianego certyfikatu, będącego składową elektronicznego dowodu osobistego, pominięto wiodące zero co wychwycił świeżo poprawiony parser w Chrome.
Co ciekawe, kilka dni po odkryciu pierwszego błędu natknięto się na drugi, błędnie zakodowaną wartość najbardziej znaczącego bitu.
Błędy nie zostały wychwycone przez ponad rok
Zgodnie z informacją przekazaną przez firmę AS Sertifitseerimiskeskus, która jest wystawcą certyfikatów wykorzystywanych w dowodach elektronicznych, wadliwe certyfikaty były wydawane od września ubiegłego roku, aż do momentu odkrycia błędów, czyli do połowy września roku bieżącego.
Szacuje się, że liczba problematycznych certyfikatów, wydawanych na okres 5 lat, przekracza 100 000. Mowa jest nawet o 250 000 błędnych elektronicznych dokumentów. Na szczęście dla posiadaczy felernych dowodów Google zgodziło się na pozostawienie obejścia w swojej przeglądarce dzięki czemu będą mogli oni bez problemu korzystać ze swoich elektronicznych dokumentów przynajmniej przez najbliższe pół roku. Właśnie taki okres dano Estonii na rowiązanie problemu.
Podsumowanie
W całej tej historii na plus zapewne można zapisać to, że wykonywano testy na wersji beta przeglądarki Chrome (nie wiem czy jest to stała praktyka w tym przypadku). Dzięki temu możliwa była wcześniejsza reakcja i uniknięcie katastrofy, a za taką można by chyba uznać wypuszczenie Chrome 46, z zaostrzonym algorytmem parsowania kluczy RSA, jako wersję stabilną.
Na koniec można się tylko zastanowić czy certyfikaty z estońskich dowodów osobistych są wyjątkiem? Czy może liczba certyfikatów na które prędzej czy później zacznie bacznie zwracać uwagę Chrome okaże się być znacznie większa?