Artykuł ten jest drugim z serii na temat Elektronicznej Legitymacji Studenckiej. Pierwszy opisywał jak uzyskać binarny zrzut pliku danych i certyfikatu (dwa pliki opisane w załączniku nr 3 do rozporządzenia).

Co można znaleźć w plikach?

W pliku z danymi (w tym artykule nazwany „dane.bin”, zrzucany za pomocą polecenia „./elsr > dane.bin”) można znaleźć imiona i nazwisko studenta, numer albumu, kod serii albumów, nazwę uczelni, PESEL oraz datę ważności legitymacji. Dodatkowo znajduje się tam numer seryjny układu karty (do weryfikacji czy dane znajdują się na oryginalnym nośniku) oraz wersja formatu pliku (na razie istnieje tylko wersja 1). Oczywiście wszystkie powyższe dane są otoczone strukturą podpisu elektronicznego, o czym później.

W pliku z certyfikatem (u mnie nazwany „cert.bin”, zrzucany poleceniem „./elsr cert cert.bin”) znajduje się certyfikat, którego użyto do podpisania pliku z danymi. Wystawiony jest na pracownika uczelni odpowiedzialnego za podpisywanie legitymacji (wśród danych opisujących posiadacza certyfikatu oprócz imienia i nazwiska, znajduje się numer PESEL, nazwa uczelni, adres e-mail). Według informacji na mojej legitymacji „Certyfikat powstał w oparciu o Polityki PCCE dla Certyfikatów Kwalifikowanych. Treść Polityki oraz Regulamin PCCE znajduje się pod adresem http://www.sigillum.pl/repozytorium CPS: http://www.sigillum.pl/PolitykaCA.htm”.

>

Jak wyciągnąć czyste dane?

W danych zakodowanych przy pomocy Distinguished Encoding Rules, zgodne z Basic Encoding Rules w przypadku odczytu (Uwaga! BER są ogólniejsze od DER – dopuszczają kilka rzeczy niedostępnych w DER) opisanych w rekomendacji ITU-T X.690. Sam podpis jest zgodny z formatem PKCS7 (stosowany w tzw. „bezpiecznej poczcie” SMIME oraz przez naszych dostawców „kwalifikowanego podpisu elektronicznego”). Zawartość pliku dane.bin jak i cert.bin można przeglądać w formie czytelnej dla ludzi za pomocą komendy „openssl asn1parse -inform DER -in nazwapliku -i” spowoduje to wyświetlenie wszystkich struktur zapisanych za pomocą DER wraz z wcięciami porządkującymi układ dokumentu. Typy obiektów możemy określić po Object ID (OID). Obiekty znanych typów pakuje się w sekwencję, w której pierwszym elementem jest OID, a następnie zawartość obiektu. W przypadku danych ELS OID=1.2.616.1.101.4.1.1. Niestety dane nie są kontynuacją w hierarchii, a elementem OCTET STRING (ciąg bajtów) zawierającym ciąg danych zakodowanych przy pomocy BER (tym razem już dane zgodnie z opisem w rozporządzeniu).

Co z certyfikatem i weryfikacją?

Certyfikat w pliku cert.bin, jest zwykłym plikiem zgodnym z PKCS1 (w przypadku mojej legitymacji kluczem publicznym do szyfrowania/podpisywania SHA1 z RSA wydanym przez Sigillum). Wszystko oczywiście w formacie DER. Niestety nie udało mi się jeszcze skompletować weryfikowalnego łańcucha certyfikatów od certyfikatu CA Sigillum do certyfikatu osoby podpisującej ELS. Prace trwają, ale niestety nie są priorytetem (minus bezdochodowego hobby).

Oprogramowanie

Program elsextractor.py wyciągnie dane z pliku dane.bin i przepisze je do wygodnego w użyciu słownika. Kod nie jest jeszcze dopasowany i nie wyszukuje obiektów po OID, tylko polega na stałej lokalizacji obiektu w hierarchii PKCS7 (oczywiście zostanie to poprawione w przyszłych wersjach). Do tego stosuje niezbyt uniwersalny sposób wczytywania danych (ze względu na uproszczenie kodu).

Epilog?

Artykuł ten znajduje się w fazie beta, ale postanowiłem go opublikować, po tym jak przeleżał w tym stanie pół roku. Zainteresowanie odczytywaniem ELSki wzrosło, a te kilka uwag i kod do rozbijania DER na obiekty może się komuś przydać. Dokończenie przewiduję w bliżej nieokreślonej przyszłości po obronie pracy magisterskiej (2009).

Załączniki

ELS Extractor (tar.gz)