Programowanie Smartcardów
Prowadzący: Bartłomiej Surma
Opis
Smart cardy są aktualnie używane w bardzo wielu miejscach z rozmaitymi funkcjami. Sporo z nich jest bezstykowa i po przyłożeniu do czytnika w kilka sekund można przeprowadzić pewne operacje. Może kilka przykłądów:
- karta bankomatowa: bezstykowo płatność do 50zł (Visa), płatność powyżej 50zł należy zatwierdzić PINem (MasterCard),
- UrbanCard (Wrocław) - zakodowanie czasowych biletów komunikacji miejskiej, okazanie ich w razie kontroli,
- legitymacja studencka - autoryzacja wstępu do rowerowni, akademika, wypożyczanie książek z biblioteki, spełnianie funkcji UrbanCard,
- elektroniczna portmonetka - w określonych sklepach (np. sklepy i stołówki na terenie kampusu) pozwala na szybką płatność za zakupy, można ją doładować w automatach,
- karta hotelowa - autoryzacja wejścia do pokoju,
- paszport - przechowywanie wrażliwych danych osobowych jak np. dane biometryczne twarzy i odcisków palców,
- niemiecki dowód osobisty - zdalnie z domu umożliwia sprawdzenie liczby punktów karnych, lub zatwierdzenie zeznania podatkowego.
Główną zaletą smartcardów jest ich niewielki rozmiar, brak potrzeby zasilania (zasilane są przez czytnik w momencie komunikacji), a także trudność w odczycie zawartych danych, czy modyfikacji kodu przez osoby trzecie (często zakłada się, że jest to całkowicie niemożliwe - na przykład gdyby odczytać dane z dwóch niemieckich dowodów osobistych, można bez problemu tworzyć nowe tożsamości).
Głowną wadą jest mały, bardzo ograniczony procesor i niewiele dostępnej pamięci.
Karty bezstykowe wykożystują technologię NFC (Near Field Communication), a prawie każdy ma teraz komórkę, która pozwala na taką komunikację.
Na warsztatach będziemy programować JavaCardy. Zachęcam do własnych projektów, a także daję też kilka własnych pomysłów:
- keystorage dedykowany do jednego zastosowania, aktywowany wprowadzanym do terminala haslem,
- elektroniczny podpis dokumentu,
- elektroniczny token (cos w stylu bankowych e-tokenow).
Na początek opowiem z czym to się je, odpalimy HelloWorld, dobierzemy się w grupy i zaprojektujemy aplikacje, które będziemy chcieli napisać. Potem zacznie się zabawa.
Wymagania
Należy rozumieć bity, bajty, system szestnastkowy i ten suchar:
Fizyk, biolog i informatyk wybrali się na bal karnawałowy. Fizyk przyszedł w masce Einsteina z wystawionym językiem, maska biologa to pantofelek, a informatyka - 0x1b.
JavaCardy programuje się w Javie (kto by pomyślał...), więc trzeba znać podstawy tego języka (sprawdzę w zadaniach).
JavaCardy nie mają debuggera, a każde przeładowanie programu i odpalenie zabiera trochę czasu, StackOverflow też nam raczej nie pomoże, więc (niestety) trzeba będzie myśleć.
Będziemy pracowali w grupach więc potrzebny jest przynajmniej jeden komputer na dwie osoby (choć komputer na osobę byłby bardziej optymalny). Poproszę też o zainstalowanie odpowiedniego developement kitu do programowania JavaCards, ale napiszę co dokładnie dopiero w pierwszym / drugim tygodniu sierpnia.
Przydatne rzeczy
http://www.javaworld.com/article/2076617/embedded-java/understanding-java-card-2-0.html
https://docs.oracle.com/javase/7/docs/jre/api/security/smartcardio/spec/