Προγραμματισμός

Τρόπος σύνταξης μιας κάρτας Java Card: Ένας οδηγός προγραμματιστή

Αυτό το άρθρο σας καθοδηγεί στη διαδικασία δημιουργίας μιας απλής ηλεκτρονικής μικροεφαρμογής πορτοφολιού και παρέχει οδηγίες για τη δημιουργία μιας μικροεφαρμογής και την κατασκευή του κωδικού της. Εάν χρειάζεστε μια νέα ενημέρωση σχετικά με τα βασικά της τεχνολογίας Java Card, ανατρέξτε στον Μάρτιο του 1998 Προγραμματιστής Java στήλη, "Κατανόηση της κάρτας Java 2.0", η οποία παρέχει μια επισκόπηση των έξυπνων καρτών και περιγράφει την αρχιτεκτονική του συστήματος, τα API και το περιβάλλον χρόνου εκτέλεσης της τεχνολογίας Java Card. Για λόγους συνέπειας, αυτό το άρθρο χρησιμοποιεί το ίδιο παράδειγμα μικροεφαρμογής πορτοφολιού που χρησιμοποιήθηκε στη στήλη του Μαρτίου 1998. Ωστόσο, η μικροεφαρμογή πορτοφολιού που θα χρησιμοποιήσουμε σε αυτό το άρθρο έχει ενημερωθεί για να αντικατοπτρίζει τις αλλαγές στα API στην κάρτα Java 2.1. Επιπλέον, ενώ το προηγούμενο άρθρο χρησίμευσε ως συνολική εισαγωγή στην τεχνολογία Java Card, αυτό το άρθρο επικεντρώνεται στη σύνταξη μικροεφαρμογών για Java Card 2.1.

Βασικά στοιχεία της κάρτας Java

Για τους σκοπούς αυτού του άρθρου, ο όρος

Κάρτα Java

δηλώνει μια έξυπνη κάρτα με τεχνολογία Java Card. Η τεχνολογία Java Card επιτρέπει την εκτέλεση μικροεφαρμογών γραμμένων στη γλώσσα Java σε μια έξυπνη κάρτα. Ορίζει ένα

Περιβάλλον χρόνου εκτέλεσης κάρτας Java

(JCRE) και παρέχει

τάξεις και μεθόδους

για να βοηθήσουν τους προγραμματιστές να δημιουργήσουν μικροεφαρμογές. Οι μικροεφαρμογές εκτελούνται εντός του JCRE. Τα JCRE και τα API μοντελοποιούνται σύμφωνα με τις προδιαγραφές της έξυπνης κάρτας

ISO 7816

.

Όταν μια κάρτα Java εισάγεται σε ένα συσκευή αποδοχής καρτών (CAD), το CAD επιλέγει μια μικροεφαρμογή στην κάρτα και της στέλνει μια σειρά εντολών για εκτέλεση. Κάθε μικροεφαρμογή αναγνωρίζεται και επιλέγεται από αυτήν αναγνωριστικό εφαρμογής (ΒΟΗΘΕΙΑ). Εντολές όπως η εντολή επιλογής μορφοποιούνται και μεταδίδονται με τη μορφή μονάδες δεδομένων πρωτοκόλλου εφαρμογής (APDU). Applets απαντούν σε κάθε εντολή APDU με ένα λέξη κατάστασης (SW) που δείχνει το αποτέλεσμα της λειτουργίας. Μια μικροεφαρμογή μπορεί προαιρετικά να απαντήσει σε μια εντολή APDU με άλλα δεδομένα.

Αρχιτέκτονας της μικροεφαρμογής

Όπως συμβαίνει με οποιαδήποτε ανάπτυξη εφαρμογών λογισμικού, προτού καθίσετε και γράψετε μια μικροεφαρμογή Java Card, πρέπει πρώτα να περάσετε από ένα φάση σχεδιασμού. Σε αυτήν τη φάση, ορίζετε την αρχιτεκτονική της μικροεφαρμογής.

Τέσσερα βήματα περιλαμβάνουν τη φάση σχεδιασμού applet:

  1. Καθορίστε τις λειτουργίες της μικροεφαρμογής
  2. Αίτημα και εκχώρηση AIDs τόσο στο applet όσο και στο πακέτο που περιέχει την κλάση applet
  3. Σχεδιάστε τη δομή της τάξης των προγραμμάτων applet
  4. Ορίστε τη διεπαφή μεταξύ της μικροεφαρμογής και της εφαρμογής τερματικού

Στις ακόλουθες ενότητες, θα χρησιμοποιήσουμε το παράδειγμα μιας μικροεφαρμογής πορτοφολιού για να ρίξουμε μια λεπτομερή ματιά σε κάθε ένα από τα βήματα της διαδικασίας σχεδιασμού της μικροεφαρμογής.

Καθορισμός των λειτουργιών της μικροεφαρμογής

Το παράδειγμα της μικροεφαρμογής πορτοφολιού θα αποθηκεύει ηλεκτρονικό χρήμα και θα υποστηρίζει λειτουργίες πίστωσης, χρέωσης και ισοζυγίου ελέγχου.

Για να αποφευχθεί η μη εξουσιοδοτημένη χρήση της κάρτας, περιέχει έναν αλγόριθμο ασφαλείας. Αυτός ο αλγόριθμος απαιτεί από τον χρήστη να εισαγάγει ένα PIN, μια σειρά οκτώ ψηφίων το πολύ. Ο χρήστης της κάρτας πληκτρολογεί το PIN του σε ένα πληκτρολόγιο που είναι συνδεδεμένο στο CAD. Ο αλγόριθμος ασφαλείας αναγκάζει την κάρτα να κλειδώσει μετά από τρεις ανεπιτυχείς προσπάθειες εισαγωγής του PIN. Το PIN αρχικοποιείται σύμφωνα με τις παραμέτρους εγκατάστασης κατά την εγκατάσταση και τη δημιουργία της μικροεφαρμογής.

Ο κωδικός PIN πρέπει να επαληθευτεί προτού εκτελεστεί οποιαδήποτε πιστωτική ή χρεωστική συναλλαγή.

Για απλότητα, ας υποθέσουμε ότι το μέγιστο υπόλοιπο της κάρτας είναι 2.767 και ότι καμία πιστωτική ή χρεωστική συναλλαγή δεν μπορεί να υπερβαίνει τα 27. Έτσι, μεταβλητές τύπου Java μικρός και ψηφιόλεξη μπορεί να αντιπροσωπεύει το υπόλοιπο του πορτοφολιού και το ποσό κάθε συναλλαγής, αντίστοιχα.

* Μια μικροεφαρμογή πορτοφολιού πραγματικού κόσμου θα απαιτούσε έναν πολύ πιο εξελιγμένο μηχανισμό ασφαλείας για την αποτροπή μη εξουσιοδοτημένης πρόσβασης στο πορτοφόλι.

Καθορισμός AIDs

Οι περισσότερες εφαρμογές με τις οποίες είστε εξοικειωμένοι ονομάζονται και αναγνωρίζονται από ένα όνομα συμβολοσειράς. Στην τεχνολογία Java Card, ωστόσο, κάθε μικροεφαρμογή αναγνωρίζεται και επιλέγεται από ένα AID. Επίσης, σε κάθε πακέτο Java εκχωρείται AID. Αυτό συμβαίνει επειδή ένα πακέτο, όταν φορτώνεται σε μια κάρτα, συνδέεται με άλλα πακέτα, τα οποία έχουν ήδη τοποθετηθεί στην κάρτα μέσω των AID τους. Αυτή η σύμβαση ονομασίας είναι σύμφωνη με τις προδιαγραφές έξυπνης κάρτας όπως ορίζονται στο ISO 7816.

Το AID είναι μια ακολουθία byte μεταξύ 5 και 16 byte σε μήκος. Η μορφή του απεικονίζεται στον Πίνακα 1.

Αναγνωριστικό εφαρμογής (AID)

Εθνικός καταχωρημένος πάροχος εφαρμογών (RID)

Ιδιόκτητη επέκταση αναγνωριστικού εφαρμογής (PIX)

5 byte

0 έως 11 byte

Πίνακας 1. Μορφή AID

Το ISO ελέγχει την εκχώρηση RID σε εταιρείες, με κάθε εταιρεία να αποκτά το δικό της μοναδικό RID από το ISO. Οι εταιρείες διαχειρίζονται την εκχώρηση PIXs για AIDs.

Οι κλάσεις Java της μικροεφαρμογής πορτοφολιών ορίζονται σε ένα πακέτο Java. Τα εικονικά AID για το πορτοφόλι applet και το πακέτο applet ορίζονται όπως φαίνεται στον Πίνακα 2.

Πακέτο ενίσχυσης
ΠεδίοαξίαΜήκος
ΑΠΑΛΛΑΣΣΩ0xF2, 0x34, 0x12, 0x34, 0x565 byte
ΚΙΒΩΤΙΔΙΟ0x10, 0x00, 0x003 byte
Applet AID
ΠεδίοαξίαΜήκος
ΑΠΑΛΛΑΣΣΩ0xF2, 0x34, 0x12, 0x34, 0x565 byte
ΚΙΒΩΤΙΔΙΟ0x10, 0x00, 0x013 byte
Πίνακας 2. Πλαστικά βοηθήματα για το πορτοφόλι και το πακέτο μικροεφαρμογών

Το πακέτο AID και το applet AID έχουν την ίδια τιμή RID. οι τιμές PIX τους διαφέρουν στο τελευταίο κομμάτι.

Καθορισμός της δομής της τάξης και των συναρτήσεων μεθόδου της μικροεφαρμογής

Μια κλάση Java Card applet πρέπει να επεκταθεί από το javacard.framework.Applet τάξη. Αυτή η κατηγορία είναι το superclass για όλες τις μικροεφαρμογές που βρίσκονται σε μια κάρτα Java. Καθορίζει τις κοινές μεθόδους που πρέπει να υποστηρίζει μια μικροεφαρμογή για να αλληλεπιδρά με το JCRE κατά τη διάρκεια της ζωής του.

Ο Πίνακας 3 παραθέτει τις δημόσιες και προστατευμένες μεθόδους που ορίζονται στην τάξη javacard.framework.Applet:

Περίληψη μεθόδου

αποεπιλογή ()

Κλήθηκε από το JCRE για να ενημερώσει την τρέχουσα επιλεγμένη μικροεφαρμογή ότι θα επιλεγεί άλλη (ή η ίδια) μικροεφαρμογή.
κοινόχρηστο

getShareableInterfaceObject (AID πελάτη AID, παράμετρος byte)

Κλήθηκε από το JCRE για να αποκτήσει ένα αντικείμενο διεπαφής με δυνατότητα κοινής χρήσης από αυτήν τη μικροεφαρμογή διακομιστή για λογαριασμό ενός αιτήματος από μια μικροεφαρμογή πελάτη.
δημόσιο στατικό κενό

εγκατάσταση (byte [] bArray, short bOffset, byte bLength)

Το JCRE καλεί αυτήν τη στατική μέθοδο για να δημιουργήσει μια παρουσία του Applet υποδιαίρεση τάξεως.
δημόσιο κενό

διαδικασία (APDU apdu)

Κλήθηκε από το JCRE για την επεξεργασία μιας εισερχόμενης εντολής APDU.

προστατευμένο τελικό κενό

κανω ΕΓΓΡΑΦΗ ()

Αυτή η μέθοδος χρησιμοποιείται από το applet για την καταχώριση αυτής της παρουσίας applet στο JCRE και την εκχώρηση του προεπιλεγμένου AID στο αρχείο CAD στην παρουσία applet.

προστατευμένο τελικό κενό

εγγραφή (byte [] bArray, short bOffset, byte bLength)

Αυτή η μέθοδος χρησιμοποιείται από το applet για την καταχώριση αυτής της παρουσίας applet στο JCRE και για την εκχώρηση του καθορισμένου AID στον πίνακα bΑράξη στην παρουσία applet.
δημόσια boolean

επιλέξτε ()

Τηλεφώνησε από το JCRE για να ενημερώσει αυτό το applet ότι έχει επιλεγεί.

προστατευμένο τελικό boolean

επιλέγονταςApplet ()

Αυτή η μέθοδος χρησιμοποιείται από το applet

επεξεργάζομαι, διαδικασία()

μέθοδος για τη διάκριση του

ΕΠΙΛΕΞΤΕ APDU

εντολή που επέλεξε αυτό το applet από όλα τα άλλα

ΕΠΙΛΕΞΤΕ APDU

Εντολές APDU που μπορεί να σχετίζονται με επιλογή κατάστασης αρχείου ή εσωτερικής μικροεφαρμογής.

Πίνακας 3. Δημόσιες και προστατευμένες μέθοδοι που ορίζονται στην κλάση javacard.framework.Applet

Η τάξη javacard.framework.Applet παρέχει ένα πλαίσιο για εκτέλεση applet. Οι μέθοδοι που ορίζονται σε αυτήν την τάξη καλούνται από το JCRE όταν το JCRE λαμβάνει εντολές APDU από το CAD.

Αφού ο κώδικας της μικροεφαρμογής έχει φορτωθεί σωστά σε μια κάρτα Java και συνδεθεί με άλλα πακέτα στην κάρτα, η ζωή μιας μικροεφαρμογής ξεκινά όταν δημιουργείται μια παρουσία applet και καταχωρείται στον πίνακα μητρώου του JCRE. Ένα applet πρέπει να εφαρμόσει τη στατική μέθοδο εγκαθιστώ() για να δημιουργήσετε μια παρουσία applet και να καταχωρήσετε την παρουσία στο JCRE, επικαλούμενος ένα από τα δύο κανω ΕΓΓΡΑΦΗ() μεθόδους. ο εγκαθιστώ()Η μέθοδος παίρνει έναν πίνακα byte ως παράμετρο. Αυτός ο πίνακας περιέχει τις παραμέτρους εγκατάστασης για την προετοιμασία ή την εξατομίκευση της παρουσίας της μικροεφαρμογής.

Μια μικροεφαρμογή σε κάρτα Java βρίσκεται σε ανενεργό στάδιο έως ότου επιλεγεί ρητά. Όταν το JCRE λαμβάνει ένα ΕΠΙΛΕΓΩ Εντολή APDU, αναζητά τον εσωτερικό του πίνακα για τη μικροεφαρμογή της οποίας το AID ταιριάζει με αυτό που καθορίζεται στην εντολή. Εάν βρεθεί ένας αγώνας, το JCRE προετοιμάζει τη νέα μικροεφαρμογή που θα επιλεγεί. Αυτή η διαδικασία προετοιμασίας αποτελείται από δύο βήματα: Πρώτον, εάν υπάρχει μια επιλεγμένη μικροεφαρμογή, το JCRE το αποεπιλέγει κάνοντας αποεπιλογή () μέθοδος. Η μικροεφαρμογή εκτελεί εργασίες καθαρισμού ή τήρησης βιβλίων στο αποεπιλογή () μέθοδο πριν προχωρήσει στο ανενεργό στάδιο. Στη συνέχεια, το JCRE επικαλείται το επιλέγω() μέθοδος για να ενημερώσετε τη νέα εφαρμογή ότι έχει επιλεγεί. Η νέα μικροεφαρμογή εκτελεί οποιαδήποτε απαραίτητη προετοιμασία πριν γίνει πραγματικά επιλεγμένη. Η μικροεφαρμογή επιστρέφει αληθής στο επιλέγω() μέθοδος εάν είναι τώρα έτοιμη να ενεργοποιηθεί και να επεξεργαστεί τις επόμενες εντολές APDU. Διαφορετικά, η μικροεφαρμογή επιστρέφει ψευδής να απορρίψει τη συμμετοχή της και, εάν ναι, δεν θα επιλεγεί applet. ο javacard.framework.Applet class παρέχει μια προεπιλεγμένη εφαρμογή και για τα δύο επιλέγω() και αποεπιλογή () μεθόδους. Μια υποκατηγορία του Applet Η τάξη μπορεί να παρακάμψει αυτές τις δύο μεθόδους για να καθορίσει τη συμπεριφορά της εφαρμογής κατά την επιλογή και την αποεπιλογή.

Μόλις επιλεγεί μια μικροεφαρμογή, το JCRE προωθεί όλες τις επόμενες εντολές APDU (συμπεριλαμβανομένου του ΕΠΙΛΕΓΩ εντολή) στο applet's επεξεργάζομαι, διαδικασία() μέθοδος. Στο επεξεργάζομαι, διαδικασία() μέθοδος, το applet ερμηνεύει κάθε εντολή APDU και εκτελεί την εργασία που καθορίζεται από την εντολή. Για κάθε εντολή APDU, η μικροεφαρμογή αποκρίνεται στο CAD στέλνοντας πίσω μια απάντηση APDU, η οποία ενημερώνει το CAD για το αποτέλεσμα της επεξεργασίας της εντολής APDU. ο επεξεργάζομαι, διαδικασία() μέθοδος στην τάξη javacard.framework.Applet είναι μια αφηρημένη μέθοδος: μια υποκατηγορία του Applet Η κλάση πρέπει να παρακάμψει αυτήν τη μέθοδο για να εφαρμόσει τις λειτουργίες μιας μικροεφαρμογής.

Αυτός ο διάλογος εντολής και απόκρισης συνεχίζεται μέχρι να επιλεγεί μια νέα μικροεφαρμογή ή να αφαιρεθεί η κάρτα από το CAD. Όταν αποεπιλεχθεί, μια μικροεφαρμογή γίνεται ανενεργή έως την επόμενη φορά που θα επιλεγεί.

ο getShareableInterfaceObject Η μέθοδος προορίζεται για επικοινωνία μεταξύ των διαδικασιών. Επικαλείται μια μικροεφαρμογή πελάτη για να ζητήσει ένα αντικείμενο διεπαφής με δυνατότητα κοινής χρήσης από τη μικροεφαρμογή διακομιστή. Η προεπιλεγμένη εφαρμογή αυτής της μεθόδου επιστρέφει null. Δυστυχώς, μια λεπτομερής συζήτηση σχετικά με την κοινή χρήση αντικειμένων και την επικοινωνία μεταξύ εφαρμογών θα ήταν πέρα ​​από το πεδίο αυτού του άρθρου.

Από το ΕΠΙΛΕΓΩ Η εντολή APDU προωθείται επίσης στο επεξεργάζομαι, διαδικασία() μέθοδος, το επιλέγονταςApplet () Η μέθοδος χρησιμοποιείται από το applet's επεξεργάζομαι, διαδικασία() μέθοδος για τη διάκριση του ΕΠΙΛΕΓΩ Εντολή APDU επιλέγοντας αυτό το applet από όλα τα άλλα ΕΠΙΛΕΓΩ Εντολές APDU που μπορεί να σχετίζονται με επιλογή κατάστασης αρχείου ή εσωτερικής μικροεφαρμογής.

Καθορισμός της διεπαφής μεταξύ μιας μικροεφαρμογής και της εφαρμογής τερματικού της

Μια μικροεφαρμογή που εκτελείται σε μια έξυπνη κάρτα επικοινωνεί με την εφαρμογή τερματικού στο CAD χρησιμοποιώντας μονάδες δεδομένων πρωτοκόλλου εφαρμογής. Στην ουσία, η διεπαφή μεταξύ μιας μικροεφαρμογής και της εφαρμογής τερματικού της είναι ένα σύνολο εντολών APDU που συμφωνούνται και υποστηρίζονται τόσο από την εφαρμογή όσο και από την εφαρμογή τερματικού.

Ένα αστάρι APDU

Αυτή η ενότητα παρέχει μια σύνοψη των εντολών APDU για να ξεκινήσετε να ορίζετε εντολές APDU για την εφαρμογή πορτοφολιού. (Οι λεπτομέρειες του πρωτοκόλλου APDU καθορίζονται στο ISO 7816.)

Οι εντολές APDU είναι πάντα σύνολα ζευγών. Κάθε ζεύγος περιέχει ένα εντολή APDU, που καθορίζει μια εντολή, και a απάντηση APDU, που στέλνει πίσω το αποτέλεσμα εκτέλεσης της εντολής. Στον κόσμο των καρτών, οι έξυπνες κάρτες είναι αντιδραστικός επικοινωνιακοί - δηλαδή, δεν ξεκινούν ποτέ επικοινωνίες, ανταποκρίνονται μόνο σε APDU από τον έξω κόσμο. Η εφαρμογή τερματικού στέλνει μια εντολή APDU μέσω του CAD. Το JCRE λαμβάνει την εντολή και είτε επιλέγει μια νέα μικροεφαρμογή είτε μεταβιβάζει την εντολή στην τρέχουσα επιλεγμένη μικροεφαρμογή. Η τρέχουσα επιλεγμένη μικροεφαρμογή επεξεργάζεται την εντολή και επιστρέφει μια απόκριση APDU στην εφαρμογή τερματικού. Οι εντολές APDU και τα APDU απόκρισης ανταλλάσσονται εναλλάξ μεταξύ κάρτας και CAD.

Ο Πίνακας 4 περιγράφει τις μορφές APDU εντολών και απόκρισης.

Εντολή APDU

Υποχρεωτική κεφαλίδαΠροαιρετικό σώμα
CLAΙΝΣΡ1Ρ2LcΠεδίο δεδομένωνΛε
  • CLA (1 byte): Κλάση εντολών --- υποδεικνύει τη δομή και τη μορφή για μια κατηγορία APDU εντολών και απόκρισης
  • INS (1 byte): Κωδικός εντολής: καθορίζει την εντολή της εντολής
  • P1 (1 byte) και P2 (1 byte): Παράμετροι διδασκαλίας - παρέχουν περαιτέρω προσόντα στην οδηγία
  • Lc (1 byte): Αριθμός byte που υπάρχουν στο πεδίο δεδομένων της εντολής
  • Πεδίο δεδομένων (byte ίσο με την τιμή του Lc): Μια ακολουθία byte στο πεδίο δεδομένων της εντολής
  • Le (1 byte): Μέγιστο αναμενόμενο byte στο πεδίο δεδομένων της απόκρισης στην εντολή

Απάντηση APDU

Προαιρετικό σώμαΥποχρεωτικό ρυμουλκούμενο
Πεδίο δεδομένωνSW1SW2
  • Πεδίο δεδομένων (μεταβλητό μήκος): Μια ακολουθία byte που λαμβάνονται στο πεδίο δεδομένων της απόκρισης
  • SW1 (1 byte) και SW2 (1 byte): λέξεις κατάστασης - δηλώνουν την κατάσταση επεξεργασίας στην κάρτα
Πίνακας 4. Μορφές εντολών και απόκρισης APDU

Καθορισμός εντολών APDU

Μια εφαρμογή Java Card θα πρέπει να υποστηρίζει ένα σύνολο εντολών APDU, που περιλαμβάνει ένα ΕΠΙΛΕΓΩ Εντολή APDU και μία ή περισσότερες εντολές APDU επεξεργασίας.

  • ο ΕΠΙΛΕΓΩ Η εντολή δίνει εντολή στο JCRE να επιλέξει το applet στην κάρτα.
  • Το σύνολο εντολών διαδικασίας καθορίζει τις εντολές που υποστηρίζει η μικροεφαρμογή. Αυτά ορίζονται σύμφωνα με τις λειτουργίες της μικροεφαρμογής.

Η τεχνολογία Java Card καθορίζει την κωδικοποίηση του ΕΠΙΛΕΓΩ Εντολή APDU. Οι προγραμματιστές εφαρμογών είναι ελεύθεροι να καθορίσουν την κωδικοποίηση των εντολών διαδικασίας τους. Ωστόσο, οι εντολές διεργασίας πρέπει να συμμορφώνονται με τη δομή που περιγράφεται παραπάνω.

Δομικά, το ΕΠΙΛΕΓΩ Οι εντολές εντολής και διεργασίας είναι ζεύγη APDUs εντολών και απόκρισης.

Για κάθε εντολή APDU, η μικροεφαρμογή πρέπει πρώτα να αποκωδικοποιήσει την τιμή κάθε πεδίου στην εντολή. Εάν περιλαμβάνονται τα προαιρετικά πεδία δεδομένων, η μικροεφαρμογή πρέπει επίσης να καθορίσει τη μορφή και τη δομή τους. Χρησιμοποιώντας αυτούς τους ορισμούς, η μικροεφαρμογή ξέρει πώς να ερμηνεύει κάθε εντολή και να διαβάζει τα δεδομένα. Στη συνέχεια, μπορεί να εκτελέσει την εργασία που καθορίζεται από την εντολή.

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