Programowanie kart Java Card
Programowanie i wykorzystanie kart Java Card w celu zabezpieczenia systemów
Czas trwania szkolenia:5 dni (40h)
Kod kursu:J/CARD
Programowanie kart Java Card
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
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
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
Wymagania
Od uczestników szkolenia wymagana jest umiejętność programowania na poziomie podstawowym w Java oraz (opcjonalnie) C/C++
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
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