Sprzętowe zabezpieczenie oprogramowania. lockey. dokumentacja programisty i API

Podobne dokumenty
Sprzętowe zabezpieczenie oprogramowania. lockey i2c. dokumentacja programisty i API

Wersja dokumentacji1.01. TeleToken API

Ćwiczenie 8 Implementacja podpisu cyfrowego opartego na standardzie X.509

wersja dokumentacji 1.00 Opis programu TeleTokenEdit

Rejestratory Sił, Naprężeń.

Instrukcja logowania i realizacji podstawowych transakcji w systemie bankowości internetowej dla klientów biznesowych BusinessPro.

Instrukcja konfiguracji programu Fakt z modułem lanfakt

Instrukcja konfiguracji programu Fakt z modułem lanfakt

Instrukcja użytkownika istorage datashur Instrukcja użytkownika

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Instrukcja logowania do systemu e-bank EBS

Instrukcja instalacji nos niko w USB w bankowos ci Alior Banku

Zgrywus dla Windows v 1.12

Archiwum DG 2016 PL-SOFT

Instrukcja obsługi Konfigurator MLAN-1000

Kalipso wywiady środowiskowe

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

Memeo Instant Backup Podręcznik Szybkiego Startu

Instrukcja programu użytkownika OmegaUW.Exe. Program obsługuje następujące drukarki fiskalne: ELZAB OMEGA II generacji ELZAB OMEGA F, MERA, MERA F.

11. Autoryzacja użytkowników

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12

Instrukcja aktywacji tokena w usłudze BPTP

Aktualizacja dodatku Saba Security Plugin w przeglądarce Firefox 56

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

2.1. System kryptograficzny symetryczny (z kluczem tajnym) 2.2. System kryptograficzny asymetryczny (z kluczem publicznym)

Krok 3 Pobranie certyfikatu kwalifikowanego

Aplikacja do podpisu cyfrowego npodpis

Instrukcja uruchomienia i obsługi Programu Użytkownika Kas Posnet PUK

System Symfonia e-dokumenty

TeleLock.NET. Instrukcja programu

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym PrestaShop (plugin dostępny w wersji ecommerce)

Konfiguracja standardowa (automatyczna) podłączenia dekodera do istniejącej sieci Wi-Fi

Instalowanie certyfikatów celem obsługi pracy urządzenia SIMOCODE pro V PN z poziomu przeglądarki internetowej w systemie Android

SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4

Zasady programowania Dokumentacja

Komunikacja między sterownikami przez protokół ADS

SKRÓCONA INSTRUKCJA OBSŁUGI SYSTEMU ZARZĄDZANIA OBIEGIEM INFORMACJI (SZOI)

TeleToken wprowadzenie. Szybki start - podręcznik programisty

Instrukcja użytkownika ARsoft-CFG WZ1 4.0

Wzmacniacz sygnału, repeater Wi-Fi Conrad N300, do gniazdka, 1xRJ45

Instrukcja obsługi. Helpdesk. Styczeń 2018

INSTRUKCJA OBSŁUGI PROGRAMU DO ODCZYTU PAMIĘCI FISKALNEJ DATECS OPF

Przewodnik instalacji i rejestracji ASN RadioOS

Na chwilę obecną biblioteka ElzabObsluga.dll współpracuje tylko ze sprawdzarkami RSowymi.

Programator Kart Master - klient

Rejestratory DVS-NVR0401-4P i DVS-NVR0801-8P. Instrukcja aktywacji rejestratora i dodawania kamer IP

Wysyłka wniosko w ZUS - EKS. Instrukcja użytkownika aplikacji Wysyłka wniosków ZUS EKS

Instrukcja instalacji nośników USB w systemie internetowym Alior Banku

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

Języki i techniki programowania Ćwiczenia 2

Wykład 4. Metody uwierzytelniania - Bezpieczeństwo (3) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Platinet modem 4G LTE instrukcja obsługi. Platinet modem 4G LTE instrukcja obsługi

7 Business Ship Control dla Symfonia Handel

Certyfikat kwalifikowany

UCanlogUpdater INSTRUKCJA OBSŁUGI

ESI [tronic] 2.0 instalacja programu

Ćwiczenie 7 Sieć bezprzewodowa z wykorzystaniem rutera.

1 Moduł Konwertera. 1.1 Konfigurowanie Modułu Konwertera

Spis treści. 1 Moduł Modbus TCP 4

Instrukcja konfiguracji. Instrukcja konfiguracji ustawień routera TP-Link dla użytkownika sieci POGODNA.NET

Instrukcja pobrania i instalacji. certyfikatu niekwalifikowanego na komputerze lub karcie kryptograficznej. wersja 1.4 UNIZETO TECHNOLOGIES SA

INSTRUKCJA UŻYTKOWNIKA MPCC

Użycie Visual Basic for Applications ("VBA")

Problemy techniczne. Jak uruchomić program Optivum dla wybranej licencji w przypadku, gdy jednostka posiada dwie licencje na używanie programu?

Instrukcja pobrania i instalacji certyfikatu niekwalifikowanego na komputerze lub karcie. Instrukcja dla użytkowników. wersja 1.4

Do czego służy SafeCase ( Sejfik )

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 11

Instrukcja procesu aktywacji oraz obsługi systemu Banku Internetowego dla BS Mikołajki

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji.

BLUETOOTH INSTRUKCJA PODŁĄCZENIA I KONFIGURACJI.

Instrukcja pobrania i instalacji. certyfikatu niekwalifikowanego na komputerze lub karcie kryptograficznej wersja 1.2

Ćwiczenia z S Komunikacja S z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP.

2 INSTALACJA OPROGRAMOWANIA. 3 3 GŁÓWNE OKNO PROGRAMU 3 4 MODUŁ OBSŁUGI ARCHIWUM 7

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Instrukcja obsługi programu PLOMP PLUS FM

DESlock+ szybki start

Aktualizacja dodatku Saba Security Plugin w przeglądarce Firefox 56

Xesar. Pierwsze kroki

INSTRUKCJA INSTALACJI I OBSŁUGI GPG4Win

Komunikator internetowy w C#

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Instrukcja korzystania z aplikacji mobilnej mtoken Asseco MAA. Przewodnik dla użytkownika

Problemy techniczne. Jak zainstalować i zarejestrować program Optivum?

Podręcznik użytkownika

Instrukcja wgrywania Certyfikatu Klienta do przeglądarki Mozilla Firefox. System Bankowości Internetowej KIRI BS 2012

Podręcznik użytkownika. Certification Request Services Wersja dokumentacji Asseco Data Systems S.A.-

Instrukcja logowania i realizacji podstawowych transakcji w systemie bankowości internetowej dla klientów biznesowych BusinessPro.

Instrukcja instalacji systemu. CardioScan 10, 11 i 12

Zarządzanie licencjami dla opcji Fiery na komputerze klienta

Moduł Ethernetowy. instrukcja obsługi. Spis treści

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Licencja SEE Electrical zabezpieczona kluczem lokalnym

ROZDZIAŁ 1: Instrukcja obsługi oprogramowania VMS

Spis treści. 1 Moduł RFID (APA) 3

Instrukcja programowania kasy Bursztyn z aplikacji PLU Manager (KF-03) 2013

Rysunek 1: Okno z lista

Jednolity Plik Kontrolny w IFK

Wysyłka dokumentacji serwisowej z Sekafi3 SQL do producentów.

Przewodnik użytkownika dla usługi CUI Klient indywidualny (CBP) 2. Rejestracja użytkownika przy użyciu hasła maskowalnego dla klientów

Transkrypt:

Sprzętowe zabezpieczenie oprogramowania lockey dokumentacja programisty i API Data dokumentu 10.11.2015

Spis treści Informacje o produkcie lockey...3 Nowy lockey...6 O czym warto wiedzieć...7 Inicjalizacja lockey...8 API...9 Przegląd klas ClockeyEnum, Clockey...10 ClockeyEnum...11 Enumeracja...12 Pominięcie enumeracji...13 Enumerate...14 Next...15 Size...16 Clockey...17 Initialize...19 Reset...20 SetTo...21 GetInfo...22 HasFeature...23 GetUserId...24 Login...25 Logout...27 ReadByte...28 WriteByte...29 ReadMemo...30 WriteMemo...31 WriteKey...32 ProtectKey...33 Encrypt...34 Decrypt...35 GenRand...36 Status metod...37 ELockeyStatus...38 2

Informacje o produkcie lockey Zastosowanie lockey wprowadza sprzętową ochronę oprogramowania przed nielegalnym użytkowaniem. Dzięki wbudowanej pamięci i dostarczanemu API, programista, może zaplanować i wprowadzić model licencjonowania. Tam gdzie wymagana jest szczególna ochrona informacji lub transmisji danych z pomocą przychodzi sprzętowy mechanizm szyfrowania danych. Reasumując, lockey jest produktem łatwym w implementacji nawet dla początkujących programistów, a wykorzystuje zaawansowane mechanizmy kryptograficzne czuwające nad bezpieczeństwem zabezpieczanych aplikacji. Komunikacja i bezpieczeństwo lockey komunikuje się z komputerem za pomocą interfejsu USB, wykorzystując do tego celu systemowe sterowniki dla urządzeń standardu HID. Nie wymaga instalacji dodatkowych sterowników. Aby wykluczyć możliwość podsłuchu transmisji na jakimkolwiek etapie, wprowadzono szyfrowaną i podpisywaną sesję komunikacyjną pomiędzy zabezpieczaną aplikacją a lockey-em. lockey posiada programowalne hasła (klucze) komunikacyjne które są nadawane w procesie jego inicjalizacji. Między innymi przy ich pomocy tworzony jest unikalny tajny i bezpieczny kanał szyfrowany, w którym przebiega komunikacja z lockey-em. Hasła komunikacyjne zapisywane są przez użytkownika lockey (np. programistę). Tylko i wyłącznie znając je, można np. odczytać/zapisać zawartość pamięci lockey i nie ma żadnej innej metody na poznanie jego zawartości. Oznacza to m.in., że nawet my, jako producent, nie mamy możliwości dostępu do zawartości pamięci lockey-ów naszych klientów. lockey jest również sprzętowym szyfratorem danych. Umożliwia szyfrowanie danych przy użyciu tajnego klucza szyfrowania (dotyczy lockey4/lockey8). Użytym algorytmem szyfrowania jest AES-128 (Rijndael). Jest to symetryczny szyfr blokowy, który w drodze konkursu został wybrany przez amerykański instytut NIST jako standard kryptograficzny (FIPS-197). Użycie właśnie takiego algorytmu gwarantuje odporność lockey na łamanie haseł szyfru metodą siłową (złamanie szyfru może wynieść nawet ponad 10 mld lat, przy obliczeniach dokonywanych na milionie komputerów, potrafiących wykonać miliard prób na sekundę). 3

Typy lockey Pamięć Dostępne komórki pamięci do dowolnego wykorzystania, z możliwością odczytu/zapisu wybranych bajtów lub bloków o wybranej długości. Szyfrowanie AES Sprzętowe szyfrowanie danych tajnym kluczem zapisywanym w lockey. (bez możliwości jego odczytu) Sprzętowy generator liczb pseudolosowych Generuje przy użyciu lockey, losowe 16-to bajtowe bloki danych. Hasło komunikacji logowania Programowane hasło dostępu do lockey. Umożliwia nawiązanie komunikacji i dostęp do jego zasobów. Hasło resetu - przywracające ustawienia fabryczne Programowane hasło. Przywraca stan fabryczny lockey. Identyfikator Programowany identyfikator ułatwiający odnalezienie właściwego lockey przy wielu podpiętych do portu USB. Numer seryjny Niepowtarzalny numer seryjny, nadany podczas produkcji przez producenta. lockey lockey4 lockey8 256 bajtów 4 KB 8 KB brak możliwość zapisu w lockey do 4 kluczy szyfrowania (klucze AES - 128 bitowe) możliwość zapisu w lockey do 8 kluczy szyfrowania (klucze AES - 128 bitowe) brak tak tak 32 bajtowa tablica (klucz) lub hasło tekstowe * 32 bajtowa tablica (klucz) lub hasło tekstowe* 4 bajty 4 bajty *Hasło tekstowe jest wewnętrznie zamieniane poprzez procedury API na tablicę 32 bajtową. 4

Poniższy schemat przedstawia wewnętrzną organizację lockey. 1 2 Obszar dostępny bez logowania. Zapisane są w nim informacje takie jak : numer seryjny wersja oprogramowania lockey właściwości lockey np. czy posiada : pamięć i jaki jest jej rozmiar sprzętowe szyfrowanie i jaką liczbę kluczy AES generator liczb losowych Obszar silnie chroniony z możliwością dostępu tylko i wyłącznie po zalogowaniu do lockey. W nim znajdują się wszystkie ważne zasoby takie jak pamięć, klucze szyfrowania AES, generator liczb pseudolosowych. Mechanizm przywracania ustawień fabrycznych. 3 Umożliwia przywrócenie ustawień fabrycznych, warunkiem jednak jest użycie prawidłowego hasła resetu. 4 Identyfikator lockey - pomocny podczas szybkiego wyszukiwania lockey przy wielu podpiętych do portu USB komputera. 5

Nowy lockey Każdy nowy lockey wymaga wstępnej inicjalizacji aby możliwa była z nim komunikacja czyli użycie we własnej aplikacji. Inicjalizację należy przeprowadzić programem lockeyedit z pakietu programów dedykowanych do klucza. Inicjalizacja możliwa również jest z poziomu kodu i funkcji API. Przykład w zależności od platformy/systemu operacyjnego i języka programowania znajdziesz w paczce z dedykowanym oprogramowaniem dla lockey. Pobierz najnowsze oprogramowanie oraz przykłady ze strony www.lockey.pl 6

O czym warto wiedzieć Proces inicjalizacji zapisuje do lockey : 1) Hasło (klucz) komunikacji, odpowiedzialne za logowanie i dostęp do lockey. Bez jego znajomości, nie będzie możliwe późniejsze użycie lockey. 2) Hasło (klucz) resetu odpowiedzialne za przywrócenie ustawień fabrycznych, czyli przywrócenie parametrów takich jak po zakupie nowego lockey. 3) Opcjonalnie możliwe jest nadanie własnego identyfikatora. Ułatwi on wyszukanie właściwego lockey przy wielu podłączonych do portów USB komputera. 7

Inicjalizacja lockey Do nauki API oraz testów, zalecamy przeprowadzić inicjalizację w oparciu o proste i ogólnie znane hasła zapisane w projekcie demonstracyjnym. W każdym momencie będzie istniała możliwość przywrócenia ustawień fabrycznych dla lockey i ponowna inicjalizacja z dowolnymi, tajnymi hasłami. W tym celu należy wykonać kroki : 1) Podłączyć tylko jeden lockey do portu USB komputera. 2) Uruchomić edytor lockeyedit. 3) W menu edytora wybrać Plik/Otwórz projekt i wczytać dołączony projekt demonstracyjny w zależności od zakupionego typu lockey. Odpowiednio dla lockey/lockey4/lockey8 będą to pliki demo.lkp/demo_lockey4.lkp/ demo_lockey8.lkp Na rozwijanej liście w części okna Lockey/Dostępne pojawi się lockey, który został podłączony do komputera. 4) Kliknąć na zakładkę Inicjalizacja/Reset 5) Nacisnąć przycisk Inicjalizuj lockey i poczekać na zakończenie inicjalizacji. UWAGA Pamiętaj, nieznajomość haseł po inicjalizacji lockey jest równoznaczna z : - całkowitym brakiem dostępu do lockey - brakiem możliwości przywrócenia ustawień fabrycznych lockey Ze względu na długość tablic haseł i siłę użytego algorytmu AES, nie przyjmuje się sytuacji złamania haseł znanymi metodami w rozsądnym czasie (przy założeniu, że podczas inicjalizacji lockey-a zostały użyte, mocne hasła w postaci tablic wypełnionych wartościami losowymi). Statystycznie potrzebny czas na wykonanie skutecznego ataku siłowego to rząd znacznie większy od kilku mld-ów lat. Podczas inicjalizacji nie wolno odłączać lockey od portu USB komputera! 8

API

Przegląd klas ClockeyEnum, Clockey Obsługa lockey bazuje na dwóch klasach ściśle ze sobą powiązanych. Są nimi : Klasa przeznaczona do enumeracji (wyszukiwania) podpiętych do komputera lockey. Zawiera ona metody oraz właściwości : ClockeyEnum Enumerate Next Inicjuje procedure enumeracji, sprawdza czy do komputera został podpięty lockey. Zwraca wskaźnik na obiekt klasy Clockey obsługujący podpięty do portu USB lockey. Size Liczba podpiętych do komputera lockey. Klasa przeznaczona do bezpośredniej komunikacji i obsługi lockey. Zawiera metody : Initialize Reset Inicjalizuje nowy lockey i przywraca ustawienia fabryczne. SetTo Ustawia odwołanie obiektu do wybranego lockey. Wymaga podania numeru seryjnego lockey z którym obiekt ma zostać powiązany. Clockey GetInfo HasFeature GetUserId Login Logout ReadByte WriteByte ReadMemo WriteMemo Odczyt parametrów lockey. Nawiązuje i zamyka sesję (komunikację) z lockey. Metody wykonujące operacje na pamięci lockey. Odczyt/zapis pojedynczych bajtów jak i bloków o wybranej długości. WriteKey ProtectKey Encrypt Decrypt Metody obsługujące sprzętowe szyfrowanie i deszyfrowanie przy pomocy lockey. Metod można użyć tylko z lockey-em ze sprzętowym szyfrowaniem AES np. lockey4, lockey8 GenRand Metoda obsługująca sprzętowy generator liczb pseudolosowych. 10

ClockeyEnum

Enumeracja ClockeyEnum jest klasą przeznaczoną do enumeracji (wyszukiwania) podpiętych do komputera lockey. Enumeracja umożliwia : sprawdzenie czy do portu USB komputera został podłączony jakikolwiek lockey. stworzenie obiektu lub wielu obiektów na bazie klasy Clockey obsługujących podłączone do komputera lockey-e. Poniżej przedstawiono przykładowy algorytm enumeracji wyszukujący pierwszy lockey: 12

Jeżeli konieczna jest obsługa wielu lockey-ów na danym komputerze, enumerację należy powtórzyć w pętli, wywołując samą metodę Next. Obiekt enumeratora należy zwolnić dopiero po wykonaniu wszystkich niezbędnych operacji. Pamiętaj Enumeracja jest zawsze konieczna jeżeli zachodzi potrzeba sprawdzenia czy jakikolwiek lockey został podpięty do komputera lub jeżeli nie jest znany numer seryjny lockey-a z którym należy się skomunikować. Pominięcie enumeracji Jeżeli numer seryjny lockey-a jest znany, możliwe jest utworzenie obiektu na podstawie klasy Clockey i dalsza komunikacja z lockey-em. W tym celu po stworzeniu obiektu należy wykorzystać metodę SetTo opisaną w dalszej części dokumentacji, pomijając enumerację. Podejście z ominięciem enumeracji może być bardzo dobrym rozwiązaniem w zamkniętych platformach i systemach np. projekty z wykorzystaniem minikomputerów embedded, gdzie zabezpieczana aplikacja pracuje tylko i wyłącznie z jednym konkretnym lockey-em. Metoda jednak nie jest zalecana przy zabezpieczaniu aplikacji, która ma współpracować z dowolnym lockey-em przeznaczonym dla niej. 13

Enumerate Obsługuje lockey lockey4 lockey8 Parametry userid Metoda inicjuje procedurę enumeracji wyszukiwania lockey, które są podpięte do portów USB komputera. Opcjonalnie - identyfikator nadany podczas inicjalizacji metodą Initialize. Jeżeli podczas enumeracji mają być brane pod uwagę tylko lockey-e z konkretnym identyfikatorem, w tym miejscu należy go przekazać. Jeżeli enumerator ma za zadanie wyszukać wszystkie podłączone lockey-e należy przekazać wartość 0. usermask Maska informująca enumerator, które bity w parametrze userid muszą być zgodne, podczas wyszukiwania lockey-ów. Przykładowo, jeżeli zachodzi konieczność wyszukania lockey-a z konkretnym userid, jako maskę należy przekazać wartość 0xFFFFFFFF. (co jest równoznaczne z koniecznością zgodności wszystkich bitów userid) Jeżeli parametr userid nie ma być brany pod uwagę a enumerator ma za zadanie wyszukać wszystkie podłączone lockey-e, należy przekazać 0. Zwracany status ELockeyStatus ELKOK - odnaleziono przynajmniej jeden lockey. Status różny od ELKOK - nie odnaleziono, żadnego lockey-a. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ElockeyStatus Enumerate(uint32_t uid, uint32_t umask); 14

Next Obsługuje lockey lockey4 lockey8 Metoda zwraca kolejny wskaźnik na obiekt typu Clockey. Jeżeli do komputera podłączonych jest wiele lockey-ów, metodę należy wywoływać w pętli do momentu zwrócenia przez metodę wartości NULL. Zwracane wartości Clockey* Wskaźnik na obiekt obsługujący odnaleziony lockey - podłączony do portu USB komputera. NULL Nie odnaleziono kolejnego lockey-a. Przykład deklaracji dla języka C++ Clockey* Next(void); 15

Size Obsługuje lockey lockey4 lockey8 Właściwość tylko do odczytu. Liczba lockey-ów, podłączonych do portów USB komputera. (z uwzględnieniem identyfikatora i maski przekazanej do metody Enumerate). Zwracane wartości uint32_t Liczba podłączonych lockey-ów. Przykład deklaracji dla języka C++ uint32_t Size(void); 16

Clockey

Klasa Clockey przeznaczona jest do obsługi/komunikacji z lockey-em podłączonym do portu USB. Przy jej użyciu możliwy jest zapis/odczyt pamięci lockey, sprzętowe szyfrowanie/deszyfrowanie oraz korzystanie ze sprzętowego generatora liczb pseudolosowych. Przykładowy algorytm komunikacji z lockey na bazie klasy Clockey, przedstawiono poniżej: 18

Initialize Obsługuje lockey lockey4 lockey8 Metoda zapisuje w lockey: hasło (klucz) wymagane do komunikacji hasło (klucz) przywracające ustawienia fabryczne opcjonalnie - numer identyfikacji Metody tej można użyć tylko na niezainicjalizowanym lockey-u, czyli w takim stanie, w jakim znajduje się po dostarczeniu od producenta lub jeśli dokonano przywrócenia ustawień fabrycznych poprzez metodę Reset. Metoda istnieje w dwóch wersjach. Oprócz wersji podstawowej oczekującej haseł w postaci dwóch tablic 32 bajtowych (tzw. kluczy), przyjmuje również hasła w postaci tekstowej (zmienna typu string). Parametry loginkey Hasło (klucz), które będzie wymagane do nawiązania komunikacji z lockey. resetkey Hasło resetowania, które będzie wymagane w przyszłości do przywrócenia ustawień fabrycznych lockey-a. userid Opcjonalny, własny identyfikator dla lockey. Zwracany status ELockeyStatus ELKOK - lockey został zainicjalizowany. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus Initialize(const char* loginpass, const char* resetpass, uint32_t userid); ELockeyStatus Initialize(const uint8_t loginkey[lk_key_length], const uint8_t resetkey[lk_key_length], uint32_t userid); 19

Reset Obsługuje lockey lockey4 lockey8 Metoda przywraca ustawienia fabryczne, usuwając z lockey : hasła komunikacji i resetu dane z pamięci klucze szyfrowania identyfikator Wymaga podania hasła przekazanego w argumencie resetpass metody Initialize. Metoda istnieje w dwóch wersjach. Oprócz wersji podstawowej oczekującej hasła w postaci tablicy 32 bajtowej (tzw. klucza), przyjmuje również hasło w postaci tekstowej (zmienna typu string). Parametry resetkey Hasło wymagane do przywrócenia ustawień fabrycznych. Zwracany status ELockeyStatus ELKOK - wywołanie zakończyło się powodzeniem a lockey został zresetowany. Przywrócono ustawienia fabryczne. Możliwe jest ponowne zainicjalizowanie poprzez Initialize. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus Reset(const char* resetpass); ELockeyStatus Reset(const uint8_t key[lk_key_length]); 20

SetTo Obsługuje lockey lockey4 lockey8 Po użyciu metody, pozostałe metody (np. Login, ReadByte itd. ) będą odwoływać się do lockey, o przekazanym numerze seryjnym w argumencie keyid. Zalecanym użyciem metody jest moment tuż po stworzeniu obiektu na bazie klasy Clockey, bez przeprowadzenia wcześniejszej enumeracji. Parametry keyid Numer seryjny lockey. Zwracany status ELockeyStatus ELKOK Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ElockeyStatus SetTo(KEYID keyid); 21

GetInfo Obsługuje lockey lockey4 lockey8 Metoda zwraca wartość wybranego parametru lockey. Używana do odczytu np. wielkości pamięci, liczby kluczy szyfrowania, maksymalnego buforu zapisu danych do pamięci. Parametry what Zmienna typu enumerowanego ElockeyInfo : ELKSerialNo numer seryjny lockey, nadany przez producenta. ELKFeatures informacja o zaimplementowanych mechanizmach w lockey, takich jak pamięć, klucze szyfrowania, generator liczb losowych (patrz również HasFeature). ELKApiVer wersja API, którą obsługuje lockey. ELKMemoSize rozmiar pamięci. ELKWriteBufSize maksymalny, dozwolony rozmiar bufora zapisu, przekazywanego w metodzie WriteMemo. ELKCryptKeys liczba kluczy szyfrowania AES. Zwracane wartości Zmienna typu uint32_t Odczytana wartość parametru. Przykład deklaracji dla języka C++ uint32_t GetInfo(ELockeyInfo what); 22

HasFeature Obsługuje lockey lockey4 lockey8 Metoda sprawdza czy w lockey jest zaimplementowany wybrany mechanizm. Parametry what Zmienna typu enumerowanego ELockeyFeature : ELKFeatMemo sprawdza czy lockey posiada pamięć. ELKFeatRand - sprawdza czy lockey posiada sprzętowy generator liczb pseudolosowych. ELKFeatCrpt sprawdza czy lockey posiada sprzętowe szyfrowanie AES. Zwracane wartości TRUE W lockey jest zaimplementowany mechanizm. FALSE W lockey nie jest zaimplementowany mechanizm. Przykład deklaracji dla języka C++ bool HasFeature(ELockeyFeature what); 23

GetUserId Obsługuje lockey lockey4 lockey8 Parametry userid Metoda odczytuje identyfikator nadany podczas inicjalizacji lockey. Zmienna do której zostanie odczytany identyfikator. Zwracane wartości userid Identyfikator lockey, nadany podczas inicjalizacji. Zwracany status ELockeyStatus ELKOK Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ bool GetUserId(uint32_t* userid); 24

Login Obsługuje lockey lockey4 lockey8 Metoda przy pomocy której następuje logowanie do lockey-a (nawiązanie komunikacji). Logowanie jest niezbędne do przeprowadzenia dowolnej czynności np. odczytu/zapisu pamięci, szyfrowania/deszyfrowania. Metoda występuje w dwóch wersjach : pierwsza oczekuje jako parametr podania tablicy 32 bajtowej z hasłem do zalogowania (klucza). druga wersja metody oczekuje jako parametr hasła tekstowego. Po pomyślnym zalogowaniu, pomiędzy aplikacją a lockey-em zostaje utworzone szyfrowane połączenie zwane sesją. Przesył danych do i z lockey-a odbywa się w jej obrębie i jest poufny. Podczas trwania sesji, dostęp do lockey-a z innych procesów jest niemożliwy. Należy pamiętać, że inny proces może również potrzebować dostępu do lockey-a. Dlatego po zakończeniu czynności (np. odczyt pamięci), wskazane jest natychmiastowe wylogowanie (zamknięcie sesji) poprzez metodę Logout. Jeśli to w ogóle nie nastąpi po upływie kilku sekund od ostatniej komunikacji, lockey sam zakończy sesję. Status kolejnych operacji bez powtórnego zalogowania będzie równy ELKSessionNotActive. Parametry key Hasło wymagane do nawiązania komunikacji z lockey-em, ustawione poprzez Initialize. Zwracany status ELockeyStatus ELKOK - wywołanie zakończyło się powodzeniem - sesja została otwarta. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. 25

Przykład deklaracji dla języka C++ ELockeyStatus Login(const char* spass); ELockeyStatus Login(const uint8_t key[lk_key_length]); 26

Logout Obsługuje lockey lockey4 lockey8 Zwracany status Metoda kończy komunikację z lockey-em oraz zwalnia użyte zasoby. Metoda nie zwraca statusu. Przykład deklaracji dla języka C++ void Logout(void); 27

ReadByte Obsługuje lockey lockey4 lockey8 Parametry offset Metoda odczytuje komórkę pamięci z lockey-a. Wymaga wcześniejszego zalogowania poprzez Login. Adres w pamięci lockey z którego nastąpi odczyt. data Zmienna do której zostanie zapisana wartość odczytanej komórki pamięci. Zwracane wartości data Wartość komórki pamięci. Zwracany status ELockeyStatus ELKOK poprawnie odczytano komórkę pamięci. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus ReadByte(uint16_t offset, uint8_t* data); 28

WriteByte Obsługuje lockey lockey4 lockey8 Parametry offset Metoda zapisuje wartość do pojedynczej komórki pamięci w lockey-u. Wymaga wcześniejszego zalogowania poprzez metodę Login. Adres w pamięci lockey-a pod który nastąpi zapis wartości. data Wartość, która zostanie zapisana do pamięci lockey-a pod wskazany adres. Zwracany status ELockeyStatus ELKOK poprawnie zapisano wartość do komórki pamięci. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ElockeyStatus WriteByte(uint16_t offset, uint8_t data); 29

ReadMemo Obsługuje lockey lockey4 lockey8 Parametry offset Metoda odczytuje blok pamięci z lockey-a. Wymaga wcześniejszego zalogowania poprzez Login. Adres w pamięci lockey-a od którego nastąpi odczyt. buffer Tablica z zarezerwowanym miejscem na wartości z odczytu pamięci. Tablica nie może być mniejsza od wartości przekazanej w polu length. length Liczba komórek do odczytu z pamięci lockey-a. Suma offset + length nie może być większa od wielkości pamięci w lockey. Rozmiar pamięci można sprawdzić metodą GetInfo z parametrem ELKMemoSize. Zwracane wartości buffer Tablica z odczytanymi wartościami komórek pamięci. Zwracany status ELockeyStatus ELKOK pamięć odczytana poprawnie. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus ReadMemo(uint16_t offset, uint8_t* buffer, uint16_t length); 30

WriteMemo Obsługuje lockey lockey4 lockey8 Parametry offset Metoda zapisuje wartości z tablicy buffer do pamięci lockey-a. Wymaga wcześniejszego zalogowania poprzez metodę Login. Adres w pamięci lockey-a od którego nastąpi zapis wartości z tablicy buffer. buffer Tablica wypełniona wartościami do zapisu w pamięci lockey-a. Tablica nie może być mniejsza od wartości przekazanej w polu length. length Liczba komórek do zapisu w pamięci lockey. Nie może być większa niż maksymalny bufor zapisu (wartość zwrócona przez metodę GetInfo z parametrem ELKWriteBufSize). Suma offset + length nie może być większa od wielkości pamięci w lockey. Rozmiar pamięci można sprawdzić metodą GetInfo z parametrem ELKMemoSize. Zwracany status ELockeyStatus ELKOK pamięć zapisana poprawnie. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus WriteMemo(uint16_t offset, const uint8_t* buffer, uint16_t length); 31

WriteKey Obsługuje lockey4 lockey8 Metoda zapisuje do tablicy kluczy w lockey-u, 128 bitowy klucz szyfrowania AES. Uwaga! Ze względu na zachowanie najwyższego poziomu bezpieczeństwa możliwy jest tylko zapis klucza szyfrowania i tylko w miejsce nie zabezpieczone przed zapisem poprzez metodę ProtectKey. Wymaga wcześniejszego zalogowania poprzez Login. Parametry keynumber Indeks pod który zostanie zapisany klucz AES w tablicy kluczy szyfrowania. key Klucz AES, który ma zostać zapisany do lockey-a (tablica 16-to bajtowa). Zwracany status ELockeyStatus ELKOK zapis klucza AES zakończony powodzeniem. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus WriteKey(uint8_t keynumber, const uint8_t key[lk_aes_length]); 32

ProtectKey Obsługuje lockey4 lockey8 Metoda włącza dla wybranego klucza szyfrowania ochronę przed zapisem. Po jej użyciu nadpisanie chronionego klucza AES w lockey-u nie jest możliwe. Ochrona pozostaje do chwili przywrócenia ustawień fabrycznych metodą Reset. Wymaga wcześniejszego zalogowania poprzez Login. Parametry keynumber Indeks klucza AES w tablicy kluczy szyfrowania. Zwracany status ELockeyStatus ELKOK ochrona przed zapisem została ustawiona. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ElockeyStatus ProtectKey(uint8_t keynumber); 33

Encrypt Obsługuje lockey4 lockey8 Metoda przesyła do lockey-a pojedynczy blok danych (o stałej wielkości 16-tu bajtów) w celu zaszyfrowania kluczem AES. Klucz AES należy wcześniej jednorazowo zapisać metodą WriteKey. Wymaga wcześniejszego zalogowania poprzez Login. Parametry keynumber Indeks klucza AES w tablicy kluczy szyfrowania. data Tablica 16-tu bajtów z danymi do zaszyfrowania. Zwracane wartości data Zaszyfrowane dane kluczem AES o indeksie keynumber. Zwracany status ELockeyStatus ELKOK szyfrowanie danych zakończone powodzeniem. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus Encrypt(uint8_t keynumber, uint8_t data[lk_aes_length]); 34

Decrypt Obsługuje lockey4 lockey8 Metoda przesyła do lockey-a pojedynczy blok danych (o stałej wielkości 16-tu bajtów) w celu odszyfrowania przy użyciu klucza AES. Klucz AES należy wcześniej jednorazowo zapisać metodą WriteKey. Wymaga wcześniejszego zalogowania poprzez Login. Parametry keynumber Indeks klucza AES w tablicy kluczy szyfrowania. data Tablica 16-tu bajtów z danymi do odszyfrowania. Zwracane wartości data Dane odszyfrowane kluczem AES o indeksie keynumber. Zwracany status ELockeyStatus ELKOK deszyfrowanie danych zakończone powodzeniem. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus Decrypt(uint8_t keynumber, uint8_t data[lk_aes_length]); 35

GenRand Obsługuje lockey4 lockey8 Metoda generuje w lockey-u i pobiera pseudolosowy blok danych o rozmiarze 16-tu bajtów. Wymaga wcześniejszego zalogowania poprzez Login. Parametry random Tablica 16-tu bajtów do której zostaną zapisane pseudolosowe wartości. Zwracane wartości random Tablica 16-tu bajtów z losowymi wartościami. Zwracany status ELockeyStatus ELKOK generowanie bloku danych zakończone powodzeniem. Status różny od ELKOK. Należy przeprowadzić dalszą analizę, patrz rozdział Status metod. Przykład deklaracji dla języka C++ ELockeyStatus GenRand(uint8_t random[lk_aes_length]); 36

Status metod

ELockeyStatus Status został zdefiniowany w typie enumerowanym ELockeyStatus. W tabeli poniżej zebrano i opisano możliwe wartości zwracane przez metody klas ClockeyEnum oraz Clockey. Możliwe wartości ELKOK, ELKNoError Wywołanie zakończyło się powodzeniem. ELKErrCom Wystąpił błąd komunikacji z lockey-em. ELKErrKey Ogólny błąd lockey. ELKSessionNotActive Sesja nie została otwarta lub jej czas upłynął. Status zwracany jest w przypadkach : wystąpiła próba użycia metody wymagającej wcześniejszego zalogowania do lockey nastąpiło zalogowanie do lockey-a jednak przez ostatnie kilka sekund nie wykonano żadnej operacji np. odczytu/zapisu pamięci itp., efektem czego sesja została automatycznie zamknięta (nastąpiło autowylogowanie) wystąpił przestój w obsłudze USB ze strony komputera, efektem czego sesja została automatycznie zamknięta Przy wystąpieniu statusu ELKSessionNotActive zalecane jest ponowienie logowania i powtórna próba wykonania operacji na lockey. ELKWrongState lockey znajduje się w nieodpowiednim stanie dla żądanej operacji. Status zwracany jest np. przy próbie powtórnej inicjalizacji, bez wcześniejszego przywrócenia ustawień fabrycznych. ELKBadParam Przekazano nieprawidłowe parametry przy wywołaniu metody. 38

ELKKeyNotFound lockey nie został odnaleziony. Status zwracany jest przy próbie odwołania się do lockey-a, który nie jest fizycznie podłączony do portu USB komputera. Przykładowo użyto metody SetTo z numerem seryjnym lockey-a, który nie jest podpięty do portu USB. ELKVerifyFailed Nieudana weryfikacja. Status zwracany jest w przypadku gdy weryfikacja zapisanej pamięci w lockey-u nie przebiegła poprawnie. ELKNotSupported lockey nie obsługuje danej właściwości. Status zwracany jest w przypadku gdy występuje próba użycia np. sprzętowego szyfrowania lockey-em nie posiadającym takiej właściwości. ELKWriteProtected Ochrona przed zapisem dla wybranego klucza szyfrowania jest włączona. Status zwracany jest w przypadku gdy nie można zapisać klucza szyfrowania lub ustawić ochrony przed zapisem. Ochrona została włączona już wcześniej. 39

www: www.lockey.pl Pomoc techniczna: serwis@lockey.pl SaPiTech 2015