Programowanie kart Java Card
Czas trwania szkolenia:5 dni (40h)
Kod kursu:J/CARD
Poziom zaawansowania:
O szkoleniu Programowanie kart Java Card
W cenie otrzymasz:
- Materiały szkoleniowe
- Certyfikat ukończenia szkolenia
- W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Dla kogo?
- Szkolenie adresowane jest do osób pragnących poznać zagadnienia związane wykorzystaniem elektronicznych kart inteligentnych Java Card do budowy bezpiecznych systemów
Wymagania
- Od uczestników szkolenia wymagana jest umiejętność programowania na poziomie podstawowym w Java oraz (opcjonalnie) C/C++
Zalety
- Podczas warsztatów uczestnicy przygotują własne aplety dla Java Card oraz umieszcza je w symulatorze i rzeczywistej karcie
- Uczestnicy dokonają ataku na nieprawidłowo zabezpieczony system kartowy
- W trakcie szkolenia zaimplementujemy protokół wzajemnego uwierzytelnienia pomiędzy kartą i aplikacją oraz pomiędzy dwiema kartami
- Elementem warsztatów jest realizacja mechanizmu zabezpieczonej komunikacji pomiędzy terminalem a kartą
- Uczestnicy przygotują aplikację wykorzystującą czytnik zgodny z PC/SC
- Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
- Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
- Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how
Cele szkolenia
- Poznanie architektury i możliwości Java Card oraz zasad tworzenia apletów z użyciem symulatora i rzeczywistej karty
- Poznanie i wykorzystanie algorytmów i protokołów kryptograficznych używanych w systemach kartowych
- Praktyczna umiejętność obsługi czytników kart w aplikacjach poprzez interfejs PC/SC w językach C/C++ i Java na platformach Windows, Linux i macOS
- Poznanie zasad i dobrych praktyk w zakresie tworzenia bezpiecznych systemów kartowych na przykładach takich jak podpis elektroniczny, dostęp do systemów, systemy płatności oraz dystrybucja i udostępnianie kluczy
Program
Wprowadzenie do kart elektronicznych
- Klasyfikacje kart
- Budowa fizyczna, wymiary
- Interfejsy komunikacyjne
- Karty stykowe
- Karty bezstykowe, NFC (near-field communication)
- Techniki komunikacji z kartami, czytniki kart
- Karty pamięciowe i inteligentne
- Karty natywne i programowalne
- Zastosowania kart elektronicznych
- Ogólna charakterystyka kart Java Card
Algorytmy i protokoły kryptograficzne
- Podstawowe usługi ochrony informacji
- Integralność, uwierzytelnienie, niezaprzeczalność i poufność
- Funkcje skrótu: rodzina SHA, SHA3
- Algorytmy symetryczne: AES, 3DES
- Kody uwierzytelniające wiadomość (message authentication code, MAC): CMAC, HMAC
- Tryby uwierzytelnionego szyfrowania (authenticated encryption with associated data, AEAD)
- Ceremonia wymiany klucza
- Krzywe eliptyczne w kryptografii: krzywe NIST, SECG i Brainpool, Curve25519, Curve448
- Algorytmy uzgadniania klucza: DH, ECDH, X25519, X448
- Algorytmy asymetryczne: RSA, ECDSA, EdDSA, Ed25519, Ed448
- Podpis cyfrowy (digital signature)
- Generatory liczb losowych i ich zastosowania
- Podstawy notacji ASN.1
- Kodowanie DER (Distinguished Encoding Rules) i PEM (Privacy-Enhanced Mail)
- Problem bezpiecznego przechowywania informacji
- Przechowywanie i przekazywanie danych kryptograficznych
- Sprzętowe moduły bezpieczeństwa (hardware security module, HSM)
- Dostęp do urządzeń kryptograficznych (biblioteki PKCS #11, CSP)
- Zalecenia dotyczące parametrów algorytmów kryptograficznych
- Protokół wyzwanie-odpowiedź
- Zabezpieczanie komunikacji
Karty inteligentne Java Card
- Architektura kart Java Card
- Wersje platformy Java Card, Java Card Kit
- Java Card Virtual Machine
- Java Card Runtime Environment
- Java Card API
- Identyfikatory (AID) pakietów i instancji, RID i PIX
- Środowisko rozwoju apletów
- Symulator Java Card Platform Simulator (cref)
- Działanie Card Managera
- Aplikacje GPShell i GlobalPlatformPro
- Obsługa komend APDU
- Obsługa pamięci nieulotnej i ulotnej
- Obsługa kodu PIN
- Obsługa transakcji atomowych
- Bufory z danymi o szczególnym znaczeniu
- Obsługa ciągów znaków
- Obsługa upływu czasu
- Liczniki
- Obsługa struktur danych TLV
- Generatory liczb losowych
- Sumy kontrolne
- Wykorzystanie algorytmów kryptograficznych w kartach
- Funkcje skrótu
- Kody uwierzytelniające wiadomość
- Algorytmy symetryczne i asymetryczne, generowanie kluczy
- Szyfrowanie i deszyfrowanie
- Składanie podpisu elektronicznego
- Techniki biometryczne
- Zabezpieczanie komunikacji z kartami
- Komunikacja pomiędzy apletami
- Serwisy
- Komunikacja z Card Manager
- Dostęp do zasobów zewnętrznych
- Zalecenia dotyczące tworzenia wydajnych apletów Java Card
- Optymalizacja wykorzystania pamięci
- Techniki i zalecenia dotyczące testowania apletów Java Card
Aplikacje wykorzystujące karty
- Czytniki kart inteligentnych
- Interfejs PC/SC
- Obsługa zdarzeń w czytniku
- Typowe problemy związane z obsługą kart stykowych i bezstykowych
Karta jako bezpieczny nośnik informacji
- Cykl życia karty
- Personalizacja kart
- Techniki dystrybucji kluczy
- Moduły SAM (secure access module)
- Przechowywanie i zarządzanie danymi użytkowników
- Karty w systemach podpisu elektronicznego
- System płatniczy EMV
- Systemy dostępu
- Dobre praktyki tworzenia systemów kartowych i wykorzystania kart elektronicznych