Š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:
- Norādiet sīklietotnes funkcijas
- Pieprasiet un piešķiriet AID gan sīklietotnei, gan paketei, kurā ir sīklietotņu klase
- Izstrādājiet sīklietotņu programmu klases struktūru
- 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 |
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 | ||
Lauks | Vērtība | Garums |
RID | 0xF2, 0x34, 0x12, 0x34, 0x56 | 5 baiti |
PIX | 0x10, 0x00, 0x00 | 3 baiti |
Applet AID | ||
Lauks | Vērtība | Garums |
RID | 0xF2, 0x34, 0x12, 0x34, 0x56 | 5 baiti |
PIX | 0x10, 0x00, 0x01 | 3 baiti |
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 | |
| 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 | 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 | JCRE sauc šo statisko metodi, lai izveidotu Aplets apakšklase. |
publiski abstrakts spēkā neesošs |
JCRE izsaucis, lai apstrādātu ienākošo APDU komandu. |
aizsargāta galīgā spēkā neesamība |
Š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 | Š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 |
Zvanīja JCRE, lai informētu šo sīklietotni, ka tā ir atlasīta. |
aizsargāts pēdējais būla skaitlis |
Šo metodi izmanto sīklietotne
metode, lai atšķirtu
komanda, kas atlasīja šo sīklietotni no visām pārējām
APDU komandas, kas var būt saistītas ar faila vai iekšējā sīklietotnes stāvokļa izvēli. |
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 galvene | Izvēles korpuss | |||||
CLA | INS | P1 | P2 | Lc | Datu lauks | Le |
| ||||||
Atbilde APDU | ||||||
Izvēles korpuss | Obligāta piekabe | |||||
Datu lauks | SW1 | SW2 | ||||
|
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.