Szkolenie dostępne na zamówienie

Programowanie kart Java Card

Programowanie i wykorzystanie kart Java Card w celu zabezpieczenia systemów

Czas trwania szkolenia:5 dni (40h)

Poziom zaawansowania:

Kod kursu:J/CARD

javasecuritycryptographyjava-card

Szkolenie na zamówienie

  • Dostosowany program
  • Indywidualna wycena
  • Dowolny termin
Zapytanie o szkolenie

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

Pobierz program w PDF

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

Autorem szkolenia jest Piotr Nazimek

Jestem absolwentem Wydziału Elektroniki i Technik Informacyjnych Politechniki Warszawskiej. W 2012 roku obroniłem doktorat z obszaru niezawodności systemów komputerowych. Interesuję się szeroko pojętym bezpieczeństwem systemów komputerowych oraz inżynierią oprogramowania. Zawodowo pracuję od 2003 roku. Wolny czas spędzam na wyprawach rowerowych i w górach.