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

Κατανόηση της κάρτας Java 2.0

Αυτό το άρθρο ξεκινά με μια επισκόπηση των έξυπνων καρτών και μια σύντομη ανασκόπηση του ISO 7816, το πρότυπο έξυπνης κάρτας. Δεδομένου του ιστορικού στις έξυπνες κάρτες στο προηγούμενο Προγραμματιστής Java στήλες, αυτή η δόση θα ξεκινήσει με μια απάντηση στην ερώτηση, "Τι είναι μια κάρτα Java;" και μια επισκόπηση της αρχιτεκτονικής του συστήματος Java Card. Στη συνέχεια, θα επικεντρωθούμε στα πολλά θέματα που αφορούν την κάρτα Java, συμπεριλαμβανομένου του κύκλου ζωής της κάρτας Java. το υποσύνολο γλώσσας Java Card 2.0 και κλάσεις βιβλιοθήκης API · και κάρτα ασφαλείας Java. Στη συνέχεια, θα συζητήσουμε το περιβάλλον χρόνου εκτέλεσης της κάρτας Java και θα δείξουμε πώς λειτουργεί μια κάρτα Java. Θα κλείσουμε με ένα φωτιστικό παράδειγμα: Μια εφαρμογή ηλεκτρονικού πορτοφολιού γραμμένη μόνο για την κάρτα Java.

Από εδώ και πέρα, όλες οι αναφορές στην κάρτα Java αναφέρονται σιωπηρά στην κάρτα Java 2.0.

Τι είναι μια έξυπνη κάρτα;

Πανομοιότυπο με το μέγεθος μιας πιστωτικής κάρτας, μια έξυπνη κάρτα αποθηκεύει και επεξεργάζεται πληροφορίες μέσω των ηλεκτρονικών κυκλωμάτων που είναι ενσωματωμένα σε πυρίτιο στο πλαστικό υπόστρωμα του σώματός της. Υπάρχουν δύο βασικά είδη έξυπνων καρτών: Ένα έξυπνη έξυπνη κάρτα περιέχει έναν μικροεπεξεργαστή και προσφέρει δυνατότητα ανάγνωσης, εγγραφής και υπολογισμού, όπως ένας μικρός μικροϋπολογιστής. ΕΝΑ κάρτα μνήμης, από την άλλη πλευρά, δεν διαθέτει μικροεπεξεργαστή και προορίζεται μόνο για αποθήκευση πληροφοριών. Μια κάρτα μνήμης χρησιμοποιεί λογική ασφαλείας για τον έλεγχο της πρόσβασης στη μνήμη.

Όλες οι έξυπνες κάρτες περιέχουν τρεις τύπους μνήμης: μόνιμη μη μεταβλητή μνήμη. επίμονη μεταβλητή μνήμη και μη μόνιμη μεταβλητή μνήμη. ROM, EEPROM και RAM είναι η πιο ευρέως χρησιμοποιούμενη μνήμη για τους τρεις αντίστοιχους τύπους στις τρέχουσες έξυπνες κάρτες. Η μόνιμη μνήμη ονομάζεται επίσης μη πτητική μνήμη. Θα χρησιμοποιήσουμε τους όρους επίμονος και μη πτητικό εναλλακτικά σε αυτό το άρθρο.

Το ISO 7816 μέρος 1-7, που ορίζεται από τον Διεθνή Οργανισμό Τυποποίησης, περιέχει ένα σύνολο προτύπων που καλύπτει διάφορες πτυχές των έξυπνων καρτών. Το ISO 7816 αποτελείται από:

  • Φυσικά χαρακτηριστικά (μέρος 1)

  • Διαστάσεις και θέση των επαφών (μέρος 2)

  • Ηλεκτρονικά σήματα και πρωτόκολλα μετάδοσης (μέρος 3)

  • Διακλαδικές εντολές για ανταλλαγή (μέρος 4)

  • Αναγνωριστικά εφαρμογής (Μέρος 5)

  • Στοιχεία μεταξύ βιομηχανικών δεδομένων (Μέρος 6)

  • Διακλαδικές εντολές για SCQL (Μέρος 7)

Το παρακάτω διάγραμμα απεικονίζει τα φυσικά χαρακτηριστικά μιας έξυπνης κάρτας, τα οποία ορίζονται στο ISO 7816, μέρος 1.

Για περισσότερες πληροφορίες σχετικά με το ISO 7816 και τις έξυπνες κάρτες, ανατρέξτε στην ενότητα "Έξυπνες κάρτες: Ένα αστάρι".

Κανονικά, μια έξυπνη κάρτα δεν περιέχει τροφοδοτικό, οθόνη ή πληκτρολόγιο. Αλληλεπιδρά με τον έξω κόσμο χρησιμοποιώντας τη διασύνδεση σειριακής επικοινωνίας μέσω των οκτώ σημείων επαφής. Οι διαστάσεις και η θέση των επαφών καλύπτονται στο μέρος 2 του ISO 7816. Αυτό το διάγραμμα δείχνει τις επαφές σε μια έξυπνη κάρτα.

Μια έξυπνη κάρτα εισάγεται σε μια Συσκευή Αποδοχής Κάρτας (CAD), η οποία μπορεί να συνδεθεί σε άλλον υπολογιστή. Άλλοι όροι που χρησιμοποιούνται για τη συσκευή αποδοχής καρτών είναι τερματικό, αναγνώστης, και IFD (συσκευή διασύνδεσης). Όλα παρέχουν τις ίδιες βασικές λειτουργίες, δηλαδή την τροφοδοσία της κάρτας με ισχύ και τη δημιουργία σύνδεσης μεταφοράς δεδομένων.

Όταν δύο υπολογιστές επικοινωνούν μεταξύ τους, ανταλλάσσουν πακέτα δεδομένων, τα οποία κατασκευάζονται σύμφωνα με ένα σύνολο πρωτοκόλλων. Ομοίως, οι έξυπνες κάρτες μιλούν στον έξω κόσμο χρησιμοποιώντας τα δικά τους πακέτα δεδομένων - που ονομάζονται APDU (Μονάδες δεδομένων πρωτοκόλλου εφαρμογής). Το APDU περιέχει είτε μια εντολή είτε ένα μήνυμα απόκρισης. Στον κόσμο των καρτών, το μοντέλο master-slave χρησιμοποιείται όπου μια έξυπνη κάρτα παίζει πάντα τον παθητικό ρόλο. Με άλλα λόγια, μια έξυπνη κάρτα περιμένει πάντα μια εντολή APDU από ένα τερματικό. Στη συνέχεια εκτελεί την ενέργεια που καθορίζεται στο APDU και απαντά στο τερματικό με μια απόκριση APDU. Οι εντολές APDU και τα APDU απόκρισης ανταλλάσσονται εναλλακτικά μεταξύ κάρτας και τερματικού.

Οι ακόλουθοι πίνακες απεικονίζουν τις μορφές APDU εντολών και απόκρισης, αντίστοιχα. Η δομή APDU περιγράφεται στο ISO 7816, μέρος 4.

Εντολή APDU
Υποχρεωτική κεφαλίδαΥπό όρους σώμα
CLAΙΝΣΡ1Ρ2LcΠεδίο δεδομένωνΛε

Η κεφαλίδα κωδικοποιεί την επιλεγμένη εντολή. Αποτελείται από τέσσερα πεδία: κλάση (CLA), οδηγίες (INS) και παραμέτρους 1 και 2 (P1 και P2). Κάθε πεδίο περιέχει 1 byte:

  • CLA: Κατηγορία byte. Σε πολλές έξυπνες κάρτες, αυτό το byte χρησιμοποιείται για τον προσδιορισμό μιας εφαρμογής.

  • INS: byte διδασκαλίας. Αυτό το byte υποδεικνύει τον κωδικό εντολής.

  • P1-P2: Παράμετροι byte. Αυτά παρέχουν περαιτέρω προσόντα στην εντολή APDU.

Το Lc δηλώνει τον αριθμό byte στο πεδίο δεδομένων της εντολής APDU. Το Le δηλώνει τον μέγιστο αναμενόμενο αριθμό byte στο πεδίο δεδομένων της ακόλουθης απόκρισης APDU.

Απάντηση APDU
Υπό όρους σώμαΥποχρεωτικό τρέιλερ
Πεδίο δεδομένωνSW1SW2

Τα byte κατάστασης SW1 και SW2 δηλώνουν την κατάσταση επεξεργασίας της εντολής APDU σε μια κάρτα.

Τι είναι η κάρτα Java;

Η κάρτα Java είναι μια έξυπνη κάρτα που μπορεί να εκτελεί προγράμματα Java. Η προδιαγραφή Java Card 2.0 δημοσιεύθηκε στη διεύθυνση //www.javasoft.com/javacard. Περιέχει λεπτομερείς πληροφορίες για τη δημιουργία της εικονικής μηχανής Java Card και της διεπαφής προγραμματισμού εφαρμογών (API) σε έξυπνες κάρτες. Η ελάχιστη απαίτηση συστήματος είναι 16 kilobytes μνήμης μόνο για ανάγνωση (ROM), 8 kilobytes EEPROM και 256 byte μνήμης τυχαίας πρόσβασης (RAM).

Η αρχιτεκτονική του συστήματος στην κάρτα Java απεικονίζεται στο παρακάτω σχήμα.

Όπως φαίνεται στο σχήμα, το Java Card VM είναι χτισμένο πάνω από ένα συγκεκριμένο ολοκληρωμένο κύκλωμα (IC) και ενσωματωμένο λειτουργικό σύστημα. Το επίπεδο JVM κρύβει την αποκλειστική τεχνολογία του κατασκευαστή με μια κοινή γλώσσα και διεπαφή συστήματος. Το Java Card framework καθορίζει ένα σύνολο κλάσεων Interface Programming Interface (API) για την ανάπτυξη εφαρμογών Java Card και για την παροχή υπηρεσιών συστήματος σε αυτές τις εφαρμογές. Ένας συγκεκριμένος κλάδος ή επιχείρηση μπορεί να παρέχει πρόσθετες βιβλιοθήκες για να παρέχει μια υπηρεσία ή για να βελτιώσει το μοντέλο ασφάλειας και συστήματος. Οι εφαρμογές Java Card καλούνται μικροεφαρμογές. Πολλές μικροεφαρμογές μπορούν να βρίσκονται σε μία κάρτα. Κάθε μικροεφαρμογή αναγνωρίζεται μοναδικά από τη δική της ΒΟΗΘΕΙΑ (αναγνωριστικό εφαρμογής), όπως ορίζεται στο ISO 7816, μέρος 5.

Ένα σημαντικό σημείο που πρέπει να θυμάστε είναι τι έξυπνες κάρτες δεν είναι: Δεν είναι προσωπικοί υπολογιστές. Έχουν περιορισμένους πόρους μνήμης και υπολογιστική ισχύ. Οι χρήστες δεν πρέπει να θεωρούν το Java Card 2.0 ως απλή έκδοση του JDK.

Η διάρκεια ζωής μιας κάρτας Java

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

Προτού προσγειωθεί στο πορτοφόλι σας, μια κάρτα Java πρέπει να περάσει από την προετοιμασία και την εξατομίκευση. Η προετοιμασία αναφέρεται στη φόρτωση γενικών δεδομένων στη μη πτητική μνήμη μιας κάρτας. Αυτά τα δεδομένα είναι πανομοιότυπα σε μεγάλο αριθμό καρτών και δεν είναι ειδικά για ένα άτομο. Ένα παράδειγμα μπορεί να είναι το όνομα του εκδότη ή του κατασκευαστή.

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

Η εκκίνηση και η εξατομίκευση ποικίλλουν από προμηθευτή σε προμηθευτή και εκδότη σε εκδότη. Και στα δύο, το EEPROM (ένας τύπος μη πτητικής μνήμης) χρησιμοποιείται συχνά για την αποθήκευση δεδομένων.

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

Τώρα μπορείτε να εισαγάγετε την κάρτα Java σε έναν αναγνώστη και να στείλετε εντολές APDU στις μικροεφαρμογές που βρίσκονται στην κάρτα ή να κατεβάσετε περισσότερες μικροεφαρμογές ή δεδομένα στην κάρτα.

Μια κάρτα Java παραμένει ενεργή έως ότου λήξει ή μπλοκαριστεί λόγω ανεπανόρθωτου σφάλματος.

Διάρκεια ζωής μιας εικονικής μηχανής Java Card

Σε αντίθεση με την εικονική μηχανή Java (JVM) σε υπολογιστή ή σταθμό εργασίας, η εικονική μηχανή Java Card λειτουργεί για πάντα.

Οι περισσότερες από τις πληροφορίες που είναι αποθηκευμένες στην κάρτα πρέπει να διατηρηθούν ακόμη και όταν αφαιρεθεί η ισχύς - δηλαδή, όταν η κάρτα αφαιρεθεί από τον αναγνώστη. Το Java Card VM δημιουργεί αντικείμενα στο EEPROM για να διατηρεί τις επίμονες πληροφορίες. Η διάρκεια ζωής της κάρτας Java VM είναι η διάρκεια ζωής της κάρτας. Όταν η τροφοδοσία δεν παρέχεται, το VM λειτουργεί σε έναν άπειρο κύκλο ρολογιού.

Η διάρκεια ζωής των μικροεφαρμογών και αντικειμένων της Java Card

Η ζωή μιας μικροεφαρμογής ξεκινά όταν έχει εγκατασταθεί σωστά και καταχωρηθεί στον πίνακα μητρώου του συστήματος και τελειώνει όταν αφαιρεθεί από τον πίνακα. Ωστόσο, ο χώρος μιας αφαιρεθείσας μικροεφαρμογής μπορεί να επαναχρησιμοποιηθεί, ανάλογα με το εάν η συλλογή απορριμμάτων πραγματοποιείται στην κάρτα. Ένα applet σε μια κάρτα βρίσκεται σε ανενεργό στάδιο έως ότου επιλεγεί ρητά από το τερματικό.

Τα αντικείμενα δημιουργούνται στη μόνιμη μνήμη (για παράδειγμα, EEPROM). Θα μπορούσαν να χαθούν ή να συλλεχθούν σκουπίδια εάν άλλα μόνιμα αντικείμενα δεν τα αναφέρουν. Ωστόσο, είναι χίλιες φορές πιο αργή η εγγραφή στο EEPROM παρά στη μνήμη RAM.

Η πρόσβαση σε ορισμένα αντικείμενα γίνεται συχνά και τα περιεχόμενα των πεδίων τους δεν χρειάζεται να είναι επίμονα. Η κάρτα Java υποστηρίζει παροδικός (προσωρινά) αντικείμενα στη μνήμη RAM. Μόλις ένα αντικείμενο δηλωθεί ως παροδικό, το περιεχόμενό του δεν μπορεί να μετακινηθεί πίσω στη μόνιμη μνήμη.

Υποσύνολο γλώσσας Java Card 2.0

Τα προγράμματα Java Card είναι φυσικά γραμμένα σε Java. Συντάσσονται χρησιμοποιώντας κοινούς μεταγλωττιστές Java. Λόγω περιορισμένων πόρων μνήμης και υπολογιστικής ισχύος, δεν υποστηρίζονται όλες οι λειτουργίες γλώσσας που ορίζονται στην Java Language Specification στην κάρτα Java. Συγκεκριμένα, η κάρτα Java δεν υποστηρίζει:

  • Δυναμική φόρτωση κλάσης

  • ΥΠΕΥΘΥΝΟΣ ΑΣΦΑΛΕΙΑΣ

  • Νήματα και συγχρονισμός

  • Κλωνοποίηση αντικειμένων

  • Οριστικοποίηση

  • Μεγάλοι πρωτόγονοι τύποι δεδομένων (float, double, long και char)

Δεν αποτελεί έκπληξη το γεγονός ότι οι λέξεις-κλειδιά που υποστηρίζουν αυτές τις λειτουργίες παραλείπονται επίσης από τη γλώσσα. Οι υλοποιητές VM ενδέχεται να αποφασίσουν να υποστηρίξουν 32-bit ακέραιου τύπου ή εγγενείς μεθόδους για applet μετά την έκδοση, εάν εργάζονται σε μια πιο προηγμένη έξυπνη κάρτα με περισσότερη μνήμη. Τα applet μετά την έκδοση είναι εκείνα τα applet που εγκαθίστανται σε μια κάρτα Java μετά την έκδοση της κάρτας σε κάτοχο κάρτας.

Το πλαίσιο Java Card 2.0

Οι έξυπνες κάρτες κυκλοφορούν στην αγορά εδώ και 20 χρόνια και οι περισσότερες από αυτές είναι γενικά συμβατές με τα ISO 7816 Μέρη 1-7 ή / και EMV. Έχουμε ήδη εξετάσει το ISO 7816. Τι είναι το EMV; Το πρότυπο EMV, που ορίζεται από την Europay, την MasterCard και τη Visa, βασίζεται στη σειρά προτύπων ISO 7816 με επιπλέον ιδιόκτητα χαρακτηριστικά για την κάλυψη των ειδικών αναγκών του χρηματοπιστωτικού κλάδου. Το Java Card Framework έχει σχεδιαστεί για να υποστηρίζει εύκολα συστήματα και εφαρμογές έξυπνων καρτών. Κρύβει τις λεπτομέρειες της υποδομής έξυπνων καρτών και παρέχει στους προγραμματιστές εφαρμογών Java Card μια σχετικά εύκολη και απλή διεπαφή προγραμματισμού.

Το πλαίσιο Java Card περιέχει τέσσερα πακέτα:

Ονομα πακέτουΠεριγραφή
javacard.frameworkΑυτό είναι το βασικό πακέτο στην κάρτα. Ορίζει τάξεις όπως και , τα οποία είναι τα θεμελιώδη δομικά στοιχεία για προγράμματα Java Card και , και , που παρέχουν χρόνο εκτέλεσης και υπηρεσία συστήματος σε προγράμματα Java Card, όπως διαχείριση APDU και κοινή χρήση αντικειμένων
javacardx.framework Αυτό το πακέτο παρέχει αντικειμενοστρεφή σχεδίαση για σύστημα αρχείων συμβατό με ISO 7816-4. Υποστηρίζει στοιχειώδη αρχεία (EF), ειδικά αρχεία (DF) και APDU προσανατολισμένα σε αρχεία όπως ορίζεται στο ISO7816
javacardx.crypto και javacardx.cryptoEnc Αυτά τα δύο πακέτα υποστηρίζουν κρυπτογραφική λειτουργικότητα που απαιτείται στις έξυπνες κάρτες

Συμμόρφωση με τη σύμβαση ονομασίας Java, Java Cardx Τα πακέτα είναι επεκτάσεις στο πλαίσιο της κάρτας Java. Δεν απαιτείται να τα υποστηρίζετε στην κάρτα.

Ασφάλεια κάρτας Java

Οι μικροεφαρμογές Java υπόκεινται σε περιορισμούς ασφαλείας Java, ωστόσο, το μοντέλο ασφαλείας των συστημάτων Java Card διαφέρει από την τυπική Java με πολλούς τρόπους.

Η κλάση Security Manager δεν υποστηρίζεται στην κάρτα Java. Οι πολιτικές ασφάλειας γλώσσας εφαρμόζονται από την εικονική μηχανή.

Οι μικροεφαρμογές Java δημιουργούν αντικείμενα που αποθηκεύουν και χειρίζονται δεδομένα. Ένα αντικείμενο ανήκει στην applet που το δημιουργεί. Ακόμα κι αν μια μικροεφαρμογή μπορεί να έχει την αναφορά σε ένα αντικείμενο, δεν μπορεί να επικαλεστεί τις μεθόδους του αντικειμένου, εκτός εάν κατέχει το αντικείμενο ή το αντικείμενο κοινοποιείται ρητά. Μια μικροεφαρμογή μπορεί να μοιραστεί οποιοδήποτε από τα αντικείμενά της με μια συγκεκριμένη μικροεφαρμογή ή με όλες τις μικροεφαρμογές.

Ένα applet είναι μια ανεξάρτητη οντότητα σε μια κάρτα Java. Η επιλογή, η εκτέλεση και η λειτουργικότητά του δεν επηρεάζονται από άλλες μικροεφαρμογές που βρίσκονται στην ίδια κάρτα.

Πώς λειτουργούν τα πράγματα μαζί σε μια κάρτα Java

Μέσα σε μια κάρτα Java, το JCRE (Java Card Runtime Environment) αναφέρεται στην εικονική μηχανή Java Card και στις τάξεις του Java Card Framework. Κάθε μικροεφαρμογή μέσα σε μια κάρτα Java σχετίζεται με μοναδικό AID που εκχωρείται από την JCRE.

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