<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Makdaam.eu &#187; els</title>
	<atom:link href="http://www.makdaam.eu/tag/els/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.makdaam.eu</link>
	<description>Admiration of simplicity</description>
	<lastBuildDate>Thu, 01 Sep 2011 18:43:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Interpretacja i weryfikowanie danych z ELS</title>
		<link>http://www.makdaam.eu/2008/08/interpretacja-i-weryfikowanie-danych-z-els/</link>
		<comments>http://www.makdaam.eu/2008/08/interpretacja-i-weryfikowanie-danych-z-els/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 17:33:06 +0000</pubDate>
		<dc:creator>Makdaam</dc:creator>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[els]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[x509]]></category>

		<guid isPermaLink="false">http://www.makdaam.eu/?p=31</guid>
		<description><![CDATA[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 &#62; dane.bin”) można znaleźć imiona i [...]]]></description>
			<content:encoded><![CDATA[<p>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).</p>
<h3>Co można znaleźć w plikach?</h3>
<p>W pliku z danymi (w tym artykule nazwany „dane.bin”, zrzucany za pomocą polecenia „./elsr &gt; 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.<br />
<span id="more-31"></span> W pliku z certyfikatem (u mnie nazwany „cert.bin”, zrzucany poleceniem „./elsr cert &gt; 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 <a href="http://www.sigillum.pl/repozytorium">http://www.sigillum.pl/repozytorium </a>CPS: <a href="http://www.sigillum.pl/PolitykaCA.htm">http://www.sigillum.pl/PolitykaCA.htm</a>”.</p>
<h3>Jak wyciągnąć czyste dane?</h3>
<p>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”).<br />
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.<br />
Typy obiektów możemy określić po <a href="http://www.alvestrand.no/objectid/top.html">Object ID</a> (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).</p>
<h3>Co z certyfikatem i weryfikacją?</h3>
<p>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).</p>
<h3>Oprogramowanie</h3>
<p>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).</p>
<h3>Epilog?</h3>
<p>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).</p>
<h3>Załączniki</h3>
<p><a href="http://www.makdaam.eu/wp-content/uploads/2009/06/elsextractor.tar.gz">ELS Extractor (tar.gz)</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.makdaam.eu%2F2008%2F08%2Finterpretacja-i-weryfikowanie-danych-z-els%2F&amp;title=Interpretacja%20i%20weryfikowanie%20danych%20z%20ELS" id="wpa2a_2">Podziel się wpisem</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.makdaam.eu/2008/08/interpretacja-i-weryfikowanie-danych-z-els/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Czytanie ELS przez interfejs stykowy</title>
		<link>http://www.makdaam.eu/2008/04/czytanie-els-przez-interfejs-stykowy/</link>
		<comments>http://www.makdaam.eu/2008/04/czytanie-els-przez-interfejs-stykowy/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 01:19:08 +0000</pubDate>
		<dc:creator>Makdaam</dc:creator>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[els]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[smartcard]]></category>

		<guid isPermaLink="false">http://www.makdaam.eu/?p=17</guid>
		<description><![CDATA[Poniższy artykuł jest krótkim opisem moich eksperymentów z ELS. Mam nadzieję, że pomoże rozpocząć zabawę z kartami 7816, które z jednej strony są już zastępowane przez karty z interfejsem bezstykowym, z drugiej (głównie ze względu na bezpieczeństwo i pobór mocy) wchodzą do naszego życia codziennego.]]></description>
			<content:encoded><![CDATA[<p>Poniższy artykuł jest krótkim opisem moich eksperymentów z ELS. Mam nadzieję, że pomoże rozpocząć zabawę z kartami 7816, które z jednej strony są już zastępowane przez karty z interfejsem bezstykowym, z drugiej (głównie ze względu na bezpieczeństwo i pobór mocy) wchodzą do naszego życia codziennego.<span id="more-17"></span></p>
<h3>Co to jest ELS?</h3>
<p>ELS, czyli Elektroniczna Legitymacja Studencka jest kartą chipową zawierającą informacje o studencie podpisane <a href="http://pl.wikipedia.org/wiki/Podpis_elektroniczny_%28prawo%29">kwalifikowanym podpisem elektronicznym</a> przez wydawcę. Dokładne informacje na temat wyglądu nośnika jak i zawartości można znaleźć w <a href="http://isap.sejm.gov.pl/DetailsServlet?id=WDU20062241634">odpowiednim rozporządzeniu</a>. O samej legitymacji i przygodach związanych z jej wdrażaniem można przeczytać na stronie VaGli:</p>
<ul>
<li><a href="http://prawo.vagla.pl/node/6631">ELS: w jedności, neutralności i kompatybilności siła</a> – <a href="http://prawo.vagla.pl/vagla" target="_self">VaGla</a> o dodatkowej funkcjonalności ELS w Warszawie</li>
<li><a href="http://prawo.vagla.pl/node/6605">Rozmiękczanie plastiku czyli komu bije ELS</a> – <a href="http://www.put.poznan.pl/%7Etommy">Tomasz Kokowski</a>, osoba odpowiedzialna za wdrożenie ELS w Poznaniu i nie tylko, o tym, jakie trudności napotkano podczas pierwszego przetargu (w odpowiedzi na artykuł w Rzeczypospolitej)</li>
<li><a href="http://prawo.vagla.pl/node/7106">Jaka karta ELS?</a> &#8211; Jacek Biskupski, opinia vice prezesa jednej z firm dystrybuujących karty i startujących w przetargu, polecam szczególnie dyskusję w komentarzach.</li>
<li><a href="http://prawo.vagla.pl/node/7639">Komu bije ELS v2.0</a> – Tomasz Kokowski, co jeszcze można było (można by) zrobić przy okazji wdrażania ELS</li>
</ul>
<p>Karta powinna być zgodna ze standardem <a href="http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816.aspx">ISO 7816</a>, a dane na niej zawarte powinny być zapisane w formacie <a href="http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf">ASN.1 Basic Encoding Rules</a> zgodnie ze specyfikacją w <a href="http://isap.sejm.gov.pl/DetailsServlet?id=WDU20062241634">załączniku nr 3 do rozporządzenia</a>. Nie znalazłem szczegółowych informacji na temat interfejsu bezstykowego, ale z <a href="http://prawo.vagla.pl/node/7599#comment-7416">wiarygodnego źródła</a> wiem, że ELSki wyposażone w interfejs Mifare pozwalają na odczytanie danych związanych z legitymacją (imię, nazwisko, nr albumu, PESEL) każdemu bez żadnego uwierzytelniania. Nie mam jeszcze sprzętu do czytania kart RFID 13,56MHz (w tym Mifare), ale w najbliższym czasie powinienem mieć dostęp do odpowiednich czytników.</p>
<h3>Sprzęt</h3>
<p>Do zabaw z kartami chipowymi używam bardzo starego czytnika do kart stykowych Schlumberger Reflex USB, który nabyłem okazyjnie na allegro. <a href="http://pcsclite.alioth.debian.org/">PCSC-lite</a> pozwala mi rozmawiać z tym sprzętem na odpowiednio wysokim poziomie i do tego ma API niemal identyczne z Windowsowym PCSC (łatwiej będzie przeportować).</p>
<h3>Zawartość karty</h3>
<p>Pierwsza wersja programu odczytującego służyła do skanowania karty w poszukiwaniu wybieralnych plików. Dane na każdej karcie stykowej zgodnej z ISO 7816 są ułożone w strukturę drzewiastą. Odpowiednikami katalogów są pliki DF (Dedicated File – czasami nazywane Directory File), rolę plików zwykłych pełnią pliki EF (Elementary File), każdy plik ma 2 bajtowy adres. Korzeniem drzewa jest plik 0x3F00, oznaczony jako MF (Master File). Oprócz tego zarezerwowane są adresy 0x3F00 (obecny katalog, odpowiednik &#8216;.&#8217;) i 0xFFFF. Wszystkie DFy dostępne z MF muszą być zarejestrowane (aby uniknąć kolizji w przypadku więcej niż jednej aplikacji na jednej karcie) i szczerze mówiąc nie wiem gdzie znaleźć ich spis <img src='http://www.makdaam.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (najprawdopodobniej jest dostępny za drobną opłatą u podmiotu rejestrującego).</p>
<p>Przeskanowanie ujawniło następujące pliki DF:</p>
<ul>
<li>0&#215;0101 (DF.SELS) – Elektroniczna Legitymacja Studencka
<ul>
<li>0&#215;0001 TRANSPARENT (EF.CERT) – kwalifikowany certyfikat emitenta</li>
<li>0&#215;0002 TRANSPARENT (EF.ELS) – plik z danymi legitymacji + podpis</li>
</ul>
</li>
<li>0&#215;5011 DF – nieznany
<ul>
<li>0&#215;8001</li>
<li>0&#215;8002</li>
<li>0&#215;8003</li>
<li>0&#215;8004 hic sunt dracones</li>
<li>0&#215;8005</li>
<li>0&#215;8006</li>
<li>0&#215;8007</li>
</ul>
</li>
</ul>
<p>Skanowanie wszystkich 65535 możliwości trwało około 4h. Jeżeli chodzi o DF 0&#215;5011 jest on najprawdopodobniej interfejsem do wgrywania aplikacji na kartę.</p>
<h3>Wyjaśnienie kodu programu</h3>
<p>Nie będę tutaj opisywać inicjalizacji komunikacji z kartą, szczegóły można znaleźć w dokumentacji ISO. Kod załączony do artykułu wywołuje wszystkie funkcje potrzebne do połączenia i pracy z kartą przez interfejs PCSC. Pozwala też na łatwą modyfikację i automatyzację niektórych działań (licencja GNU GPLv3).</p>
<p>Ogólna struktura komend wysyłanych do karty chipowej ma następującą postać (kolejne bajty numerowane od 0):</p>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4&#8230;</td>
<td>ostatni</td>
</tr>
<tr>
<td>CLA</td>
<td>INS</td>
<td>P1</td>
<td>P2</td>
<td>pola opcjonalnych danych</td>
<td>Le</td>
</tr>
</tbody>
</table>
<p>gdzie CLA to klasa komend (przyjąłem 0&#215;00 &#8211; patrz <a href="http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx#chap5_4_1">ISO 7816-4 5.4.1</a>), INS to bajt wskazujący instrukcję, a P1 i P2 to dwa parametry komendy. W przypadku, gdy komenda wymaga wysłania więcej niż dwóch bajtów danych (np. zapis do pliku) stosuje się pola opcjonalne, z których pierwszy bajt opisuje długość, a pozostałe zawierają konkretne dane. Ostatnim polem jest Le, które najczęściej podaje liczbę bajtów jaką jest w stanie przyjąć nasz czytnik kart.</p>
<p>Aby odczytać zawartość pliku na karcie, musimy go najpierw wybrać przy pomocy komendy SELECT FILE (0xA4), która przyjmuje 2 parametry określające sposób wyboru pliku (my wybieramy na podstawie identyfikatora i nie interesuje nas na razie jakie informacje zwróci komenda – P1 = 0&#215;00 i P2 = 0&#215;00). Następnie podajemy długość danych (0&#215;02) i same dane, czyli identyfikator pliku (np. 0&#215;0101), bajt Le zostawiamy pusty (nie wysyłamy go).</p>
<p>Po wybraniu odpowiedniego pliku odczytujemy jego zawartość za pomocą komendy READ BINARY (0xB0), która przyjmuje przesunięcie danych w pliku jako jeden parametr zajmujący P1 i P2 (2 bajty), a bajt Le wskazuje liczbę danych jakie jesteśmy w stanie przetworzyć.</p>
<p>Jeżeli kod nadal nie jest czytelny proszę o kontakt. Zaznaczam jednak, że nie udzielam lekcji z podstaw programowania w języku C, ani nie zajmuję się tłumaczeniami standardów ISO na polski <img src='http://www.makdaam.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . W następnym artykule na temat ELS postaram się opisać strukturę samego pliku danych i certyfikatu oraz zaprezentować weryfikację podpisu legitymacji.</p>
<h3>Uaktualnienie</h3>
<p>Jak się okazuje same dwubajtowe identyfikatory plików (FID) nie muszą być globalnie takie same. Poniższą, uniwersalną metodę selekcji DF.SELS przesłał <a href="http://www.kress-net.com/">Krzysztof Rutecki</a> z Wrocławia, za co serdecznie dziękuję. Preferowanym sposobem wyboru DF.SELS (najprawdopodobniej także DFów innych aplikacji) jest AID (Application ID), który to właśnie znajduje się w odpowiednim załączniku do piątej części ISO7816 i jest zarezerwowany tylko dla danej aplikacji. Pełna komenda wybierająca DF.SELS przez AID znajduje się w funkcji &#8222;selectDfselsByAID&#8221; nowego kodu źródłowego. Jest to zwykły SELECT FILE, tyle że P1=0&#215;04, a P2=0&#215;00, później znajdziemy długość AIDu w bajtach i sam AID. Ten sposób powinien zagwarantować zgodność oprogramowania z legitymacjami innymi niż te z Poznania.</p>
<h3>Linki</h3>
<p>Załącznik do artykułu: <a href="http://www.makdaam.eu/wp-content/uploads/2008/04/els_reader.tar.gz">els_reader.tar.gz</a></p>
<p><a href="http://lukaszkulasek.pl/">Łukasz Kulasek</a> napisał <a href="http://lukaszkulasek.pl/pliki/czytajels.zip">klasę w Javie</a> służącą do odczytywania zawartości ELS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.makdaam.eu/2008/04/czytanie-els-przez-interfejs-stykowy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

