Programmēšana

Kā rakstīt Java kartes sīklietotni: izstrādātāja rokasgrāmata

Šajā rakstā ir aprakstīts vienkārša elektroniskā maka sīklietotnes izveides process un sniegti norādījumi sīklietotnes izveidošanai un tā koda izveidošanai. Ja jums ir nepieciešams atsvaidzināt Java Card tehnoloģijas pamatus, skatiet 1998. gada martu Java izstrādātājs sleja "Izpratne par Java Card 2.0", kas sniedz pārskatu par viedkartēm un apraksta sistēmas arhitektūru, API un Java Card tehnoloģijas izpildlaika vidi. Konsekvences labad šajā rakstā tiek izmantots tas pats maka sīklietotnes piemērs, kas tika izmantots 1998. gada marta slejā. Tomēr seifa sīklietotne, kuru izmantosim šajā rakstā, ir atjaunināta, lai atspoguļotu izmaiņas API API Java kartē 2.1. Turklāt, lai gan iepriekšējais raksts kalpoja par vispārēju ievadu Java Card tehnoloģijā, šis raksts ir vērsts uz Java Card 2.1 sīklietotņu rakstīšanu.

Java kartes pamati

Šajā rakstā termins

Java karte

apzīmē viedkarti, kurā iespējota tehnoloģija Java Card. Java Card tehnoloģija ļauj viedkartē izpildīt Java valodā rakstītus sīklietotnes. Tas nosaka a

Java kartes izpildlaika vide

(JCRE) un nodrošina

klases un metodes

lai palīdzētu izstrādātājiem izveidot sīklietotnes. Apletes darbojas JCRE ietvaros. JCRE un API tiek modelēti pēc viedkartes specifikācijas

ISO 7816

.

Kad Java karte tiek ievietota a kartes pieņemšanas ierīce (CAD), CAD atlasa sīklietotni kartē un nosūta tai virkni komandu izpildei. Katru sīklietotni identificē un atlasa tā lietojumprogrammas identifikators (AID). Tādas komandas kā atlases komanda tiek formatētas un pārsūtītas kā lietojumprogrammu protokola datu vienības (APDU). Apletes atbild uz katru APDU komandu ar a statusa vārds (SW), kas norāda operācijas rezultātu. Aplets pēc izvēles var atbildēt uz APDU komandu ar citiem datiem.

Arhitektējiet sīklietotni

Tāpat kā ar jebkuru programmatūras lietojumprogrammu izstrādi, pirms apsēsties un rakstīt Java Card sīklietotni, vispirms jāiziet a projektēšanas fāze. Šajā posmā jūs definējat sīklietotnes arhitektūru.

Apletu projektēšanas fāzi veido četras darbības:

  1. Norādiet sīklietotnes funkcijas
  2. Pieprasiet un piešķiriet AID gan sīklietotnei, gan paketei, kurā ir sīklietotņu klase
  3. Izstrādājiet sīklietotņu programmu klases struktūru
  4. Definējiet saskarni starp sīklietotni un termināļa lietojumprogrammu

Nākamajās sadaļās mēs izmantosim maka sīklietotnes piemēru, lai detalizēti aplūkotu katru sīklietotnes izstrādes procesa darbību.

Sīklietotnes funkciju norādīšana

Mūsu maka sīklietotnes piemērs glabās elektronisko naudu un atbalstīs kredīta, debeta un čeka atlikuma funkcijas.

Lai novērstu kartes neatļautu izmantošanu, tajā ir iekļauts drošības algoritms. Šim algoritmam lietotājam ir jāievada PIN, ne vairāk kā astoņu ciparu virkne. Kartes lietotājs ievada savu PIN tastatūrā, kas savienota ar CAD. Drošības algoritma dēļ karte tiek bloķēta pēc trim neveiksmīgiem mēģinājumiem ievadīt PIN. PIN tiek inicializēts atbilstoši instalēšanas parametriem, kad tiek instalēta un izveidota sīklietotne.

Pirms jebkura kredīta vai debeta darījuma izpildes PIN ir jāpārbauda.

Pieņemsim, ka kartes maksimālais atlikums ir 2767 un ka neviens kredīta vai debeta darījums nevar pārsniegt 27. Tādējādi Java tipa mainīgie īss un baits var attiecīgi attēlot seifa atlikumu un katra darījuma summu.

* Reālās pasaules maka sīklietotnei būtu nepieciešams daudz sarežģītāks drošības mehānisms, lai novērstu nesankcionētu piekļuvi seifam.

AID norādīšana

Lielākā daļa jums pazīstamo lietojumprogrammu tiek nosauktas un identificētas ar virknes nosaukumu. Java Card tehnoloģijā tomēr katru sīklietotni identificē un atlasa AID. Katrai Java pakotnei tiek piešķirts arī AID. Tas ir tāpēc, ka paka, ielādēta kartē, ir saistīta ar citām pakām, kuras jau ir ievietotas kartē, izmantojot savus AID. Šī nosaukumu piešķiršanas kārtība atbilst viedkartes specifikācijai, kā noteikts ISO 7816.

AID ir baitu secība no 5 līdz 16 baitu garumā. Tās formāts ir attēlots 1. tabulā.

Lietojumprogrammas identifikators (AID)

Valsts reģistrētu lietojumprogrammu nodrošinātājs (RID)

Patentēta lietojumprogrammas identifikatora paplašinājums (PIX)

5 baiti

0 līdz 11 baiti

1. tabula. AID formāts

ISO kontrolē RID piešķiršanu uzņēmumiem, katram uzņēmumam iegūstot savu unikālo RID no ISO. Uzņēmumi pārvalda PIX piešķiršanu AID.

Seifa sīklietotnes Java klases ir definētas Java paketē. Fiktīvi AID maka sīklietotnei un sīklietotņu pakotnei ir definēti, kā parādīts 2. tabulā.

Iepakojuma atbalsts
LauksVērtībaGarums
RID0xF2, 0x34, 0x12, 0x34, 0x565 baiti
PIX0x10, 0x00, 0x003 baiti
Applet AID
LauksVērtībaGarums
RID0xF2, 0x34, 0x12, 0x34, 0x565 baiti
PIX0x10, 0x00, 0x013 baiti
2. tabula. Fiktīvi AID maka sīklietotnei un sīklietotņu pakotnei

AID pakotnei un sīklietotnes AID ir tāda pati RID vērtība; viņu PIX vērtības pēdējā bitā atšķiras.

Apleta klases struktūras un metodes funkciju noteikšana

Java kartes sīklietotņu klasei jābūt no javacard.framework.Applet klasē. Šī klase ir superklase visām sīklietotnēm, kas atrodas Java kartē. Tas nosaka kopīgās metodes, kas sīklietotnei jāatbalsta, lai mijiedarbotos ar JCRE tās darbības laikā.

3. tabulā ir uzskaitītas klasē definētās publiskās un aizsargātās metodes javacard.framework.Applet:

Metodes kopsavilkums

noņemt atlasi ()

JCRE piezvanīja, lai informētu pašlaik izvēlēto sīklietotni, ka tiks izvēlēta cita (vai tā pati) sīklietotne.
publiski Dalāms

getShareableInterfaceObject (AID klienta AID, baitu parametrs)

Zvanīja JCRE, lai iegūtu klienta sīklietotnes pieprasījuma vārdā koplietojama saskarnes objektu no šī servera sīklietotnes.
publiskā statiskā spēkā neesamība

instalēt (baits [] bArray, īss bofets, baits bLength)

JCRE sauc šo statisko metodi, lai izveidotu Aplets apakšklase.
publiski abstrakts spēkā neesošs

process (APDU apdu)

JCRE izsaucis, lai apstrādātu ienākošo APDU komandu.

aizsargāta galīgā spēkā neesamība

reģistrēties ()

Šo metodi sīklietotne izmanto, lai reģistrētu šo sīklietu gadījumu JCRE un piešķirtu sīklietotņu instancei noklusējuma AID CAD failā.

aizsargāta galīgā spēkā neesamība

reģistrēties (baits [] bArray, īss bofets, baits bLength)

Šo metodi sīklietotne izmanto, lai reģistrētu šo sīklietu gadījumu JCRE un piešķirtu masīvā norādīto AID bArray sīklietotnes instancē.
publiskais būla

atlasīt ()

Zvanīja JCRE, lai informētu šo sīklietotni, ka tā ir atlasīta.

aizsargāts pēdējais būla skaitlis

atlasotAplet ()

Šo metodi izmanto sīklietotne

process ()

metode, lai atšķirtu

ATLASIET APDU

komanda, kas atlasīja šo sīklietotni no visām pārējām

ATLASIET APDU

APDU komandas, kas var būt saistītas ar faila vai iekšējā sīklietotnes stāvokļa izvēli.

3. tabula. Publiskās un aizsargātās metodes, kas definētas klasē javacard.framework.Applet

Klase javacard.framework.Applet nodrošina sīklietotnes izpildes sistēmu. Šajā klasē definētās metodes JCRE izsauc, kad JCRE saņem no CAD APDU komandas.

Pēc tam, kad sīklietotnes kods ir pareizi ielādēts Java kartē un ir saistīts ar citiem kartē esošajiem iepakojumiem, sīklietotnes darbība sākas, kad tiek izveidota sīklietu instance un reģistrēta JCRE reģistra tabulā. Apletam jāievieš statiskā metode uzstādīt() lai izveidotu sīklietu instanci un reģistrētu gadījumu JCRE, izsaucot vienu no abiem reģistrēties () metodes. The uzstādīt()metode kā parametru ņem baitu masīvu. Šajā masīvā ir instalācijas parametri sīklietotnes inicializēšanai vai personalizēšanai.

Java kartes sīklietotne atrodas neaktīvā stadijā, līdz tā ir skaidri atlasīta. Kad JCRE saņem a SELECT APDU komandu, tā savā iekšējā tabulā meklē sīklietotni, kuras AID atbilst komandā norādītajam. Ja tiek atrasta atbilstība, JCRE sagatavo jauno sīklietotni, kas jāizvēlas. Šis sagatavošanas process sastāv no diviem posmiem: Pirmkārt, ja ir pašlaik atlasīts sīklietotne, JCRE to atceļ, izsaucot noņemt atlasi () metodi. Sīklietotne veic visus tīrīšanas vai grāmatvedības uzskaites darbus noņemt atlasi () metodi, pirms tā nonāk neaktīvā stadijā. Tad JCRE izsauc atlasīt () metode, lai informētu jauno sīklietotni, ka tā ir atlasīta. Jaunais sīklietotne veic visas nepieciešamās inicializācijas, pirms tā faktiski tiek atlasīta. Sīklietotne atgriežas taisnība uz atlasīt () metodi, ja tā tagad ir gatava kļūt aktīva un apstrādāt nākamās APDU komandas. Pretējā gadījumā sīklietotne atgriežas nepatiesa atteikt savu dalību, un, ja tā, netiks atlasīts sīklietotne. The javacard.framework.Applet klase nodrošina noklusējuma ieviešanu abiem atlasīt () un noņemt atlasi () metodes. Apakšklase Aplets klase var ignorēt šīs divas metodes, lai definētu sīklietotnes uzvedību atlases un atlases laikā.

Kad ir atlasīta sīklietotne, JCRE pārsūta visas nākamās APDU komandas (ieskaitot SELECT komandu) sīklietotnei process () metodi. Iekš process () metodi, sīklietotne interpretē katru APDU komandu un veic komandā norādīto uzdevumu. Katrai komandai APDU sīklietotne reaģē uz CAD, nosūtot atpakaļ atbildi APDU, kas informē CAD par komandas APDU apstrādes rezultātu. The process () metode klasē javacard.framework.Applet ir abstrakta metode: Aplets klasei ir jāpārņem šī metode, lai ieviestu sīklietotnes funkcijas.

Šis komandu un atbildes dialogs turpinās, līdz tiek atlasīts jauns sīklietotne vai karte tiek noņemta no CAD. Atceļot atlasi, sīklietotne kļūst neaktīva līdz nākamajai atlases reizei.

The getShareableInterfaceObject metode ir paredzēta interapplet saziņai. To izsauc klienta sīklietotne, lai pieprasītu koplietojamā interfeisa objektu no servera sīklietotnes. Šīs metodes noklusējuma ieviešana atgriež nulli. Diemžēl detalizēta objektu koplietošanas un interapplet komunikācijas apspriešana būtu ārpus šī raksta darbības jomas.

Kopš SELECT APDU komanda tiek pārsūtīta arī uz process () metodi atlasotAplet () metodi izmanto sīklietotnes process () metode, lai atšķirtu SELECT APDU komanda, atlasot šo sīklietotni no visām pārējām SELECT APDU komandas, kas var būt saistītas ar faila vai iekšējā sīklietotnes stāvokļa izvēli.

Saskarnes definēšana starp sīklietotni un tās termināļa lietojumprogrammu

Viedkartē darbojoša sīklietotne sazinās ar termināļa lietojumprogrammu CAD, izmantojot lietojumprogrammu protokola datu vienības. Būtībā interfeiss starp sīklietotni un tā termināļa lietojumprogrammu ir APDU komandu kopums, par kuru vienojas un atbalsta gan sīklietotne, gan termināļa lietojumprogramma.

APDU grunts

Šajā sadaļā ir sniegts APDU komandu kopsavilkums, lai sāktu definēt APDU komandas seifa sīklietotnei. (Sīkāka informācija par APDU protokolu ir noteikta ISO 7816.)

APDU komandas vienmēr ir pāru kopas. Katrā pārī ir a komanda APDU, kurā norādīta komanda, un a atbildes reakcija APDU, kas nosūta atpakaļ komandas izpildes rezultātu. Karšu pasaulē viedkartes ir reaktīvs komunikatori - tas ir, viņi nekad neuzsāk sakarus, viņi tikai reaģē uz APDU no ārpasaules. Termināla lietojumprogramma caur CAD nosūta komandu APDU. JCRE saņem komandu un vai nu izvēlas jaunu sīklietotni, vai arī nodod komandu pašreiz izvēlētajai sīklietotnei. Pašlaik atlasītais sīklietotne apstrādā komandu un atgriež atbildes APDU uz termināļa lietojumprogrammu. Komandas APDU un atbildes APDU tiek apmainīti pārmaiņus starp karti un CAD.

4. tabulā aprakstīti komandu un atbildes APDU formāti.

Komanda APDU

Obligāta galveneIzvēles korpuss
CLAINSP1P2LcDatu lauksLe
  • CLA (1 baits): instrukciju klase --- norāda komandu un atbildes APDU kategorijas struktūru un formātu
  • INS (1 baits): instrukcijas kods: norāda komandas instrukciju
  • P1 (1 baits) un P2 (1 baits): Instrukcijas parametri - tālāk nodrošina instrukcijas kvalifikāciju
  • Lc (1 baits): baitu skaits, kas atrodas komandas datu laukā
  • Datu lauks (baiti, kas vienādi ar Lc vērtību): baitu secība komandas datu laukā
  • Le (1 baits): maksimālais baitu skaits, kas gaidāms komandas atbildes datu laukā

Atbilde APDU

Izvēles korpussObligāta piekabe
Datu lauksSW1SW2
  • Datu lauks (mainīgs garums): saņemto baitu secība atbildes datu laukā
  • SW1 (1 baits) un SW2 (1 baits): statusa vārdi - apzīmē apstrādes stāvokli kartē
4. tabula. Komandu un atbildes APDU formāti

APDU komandu definēšana

Java kartes sīklietotnei jāatbalsta APDU komandu kopa, kas sastāv no: SELECT APDU komanda un viena vai vairākas procesa APDU komandas.

  • The SELECT komanda uzdod JCRE izvēlēties sīklietotni kartē.
  • Procesa komandu kopa nosaka sīklietotnes atbalstītās komandas. Tie ir definēti saskaņā ar sīklietotnes funkcijām.

Java kartes tehnoloģija nosaka kodējumu SELECT APDU komanda. Sīklietotņu izstrādātāji var brīvi noteikt savu procesu komandu kodēšanu. Tomēr procesa komandām jāatbilst iepriekš izklāstītajai struktūrai.

Strukturāli SELECT komandu un procesu komandas ir komandu un atbildes APDU pāri.

Katrai komandai APDU sīklietotnei vispirms vajadzētu atšifrēt katra lauka vērtību komandā. Ja ir iekļauti izvēles datu lauki, sīklietotnei jānosaka arī to formāts un struktūra. Izmantojot šīs definīcijas, sīklietotne zina, kā interpretēt katru komandu un nolasīt datus. Pēc tam tā var izpildīt komandu norādīto uzdevumu.

$config[zx-auto] not found$config[zx-overlay] not found