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

Έξυπνες κάρτες: Ένα αστάρι

Οι έξυπνες κάρτες έγιναν πολλοί τον τελευταίο καιρό στο Διαδίκτυο, στο συνέδριο JavaOne τον περασμένο Απρίλιο (τέσσερις συνεδρίες ασχολήθηκαν με την τεχνολογία), στους μεγάλους σταθμούς ειδήσεων δικτύου και στο CNN. Σε αυτό το άρθρο θα αναδείξουμε τη έξυπνη κάρτα με ένα πραγματικό παράδειγμα έξυπνης κάρτας. Οι τεχνικές που παρουσιάζονται εδώ θα σας επιτρέψουν να αρχίσετε να δημιουργείτε εφαρμογές Java που είναι ενεργοποιημένες με έξυπνη κάρτα.

Θα επικεντρωθούμε σε δύο τύπους έξυπνων καρτών: έξυπνες κάρτες μνήμης, οι οποίοι μπορούν να θεωρηθούν ως αφαιρούμενοι αφαιρούμενοι δίσκοι ανάγνωσης / εγγραφής με προαιρετική ασφάλεια. και κάρτες επεξεργαστή, οι οποίοι μπορούν να θεωρηθούν μικροσκοπικοί υπολογιστές με θύρα εισόδου και εξόδου. Τα μελλοντικά άρθρα θα καλύπτουν τις κάρτες επεξεργαστών σε μεγαλύτερο βάθος.

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

Θα παρατηρήσετε ότι ένα επαναλαμβανόμενο θέμα που τρέχει σε αυτήν τη σειρά σε έξυπνες κάρτες είναι η ανάγκη για ένα πλαίσιο ασφαλείας για να αποτρέπεται η προσθήκη κακόβουλων προσθηκών, στοιχείων ActiveX και ούτω καθεξής στα προσωπικά ή / και εταιρικά σας στοιχεία. Για το σκοπό αυτό, η επίδειξη του πώς να διαβάζετε και να γράφετε δεδομένα σε μια έξυπνη κάρτα που περιλαμβάνεται σε αυτό το άρθρο θα σας προσφέρει συνεχή, ασφαλή (και φορητή) αποθήκευση.

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

Μπορείτε να σκεφτείτε την έξυπνη κάρτα ως "πιστωτική κάρτα" με "εγκέφαλο" πάνω της, με τον εγκέφαλο να είναι ένα μικρό ενσωματωμένο τσιπ υπολογιστή. Αυτός ο υπολογιστής με κάρτα μπορεί να προγραμματιστεί για την εκτέλεση εργασιών και την αποθήκευση πληροφοριών, αλλά σημειώστε ότι ο εγκέφαλος είναι λίγο - που σημαίνει ότι η ισχύς της έξυπνης κάρτας υπολείπεται του επιτραπέζιου υπολογιστή σας.

Οι έξυπνες κάρτες χρησιμοποιούνται επί του παρόντος σε συναλλαγές μέσω τηλεφώνου, μεταφοράς, τραπεζικής και υγειονομικής περίθαλψης και σύντομα - χάρη σε προγραμματιστές όπως εσείς - θα αρχίσουμε να τις βλέπουμε να χρησιμοποιούνται σε εφαρμογές Διαδικτύου. Οι έξυπνες κάρτες χρησιμοποιούνται ήδη εκτενώς στην Ιαπωνία και την Ευρώπη και κερδίζουν δημοτικότητα στις ΗΠΑ. Στην πραγματικότητα, τρία σημαντικά γεγονότα έχουν συμβεί πρόσφατα στη βιομηχανία έξυπνων καρτών σε αυτήν τη χώρα:

PC / SC

Η Microsoft και πολλές άλλες εταιρείες εισήγαγαν PC / SC, μια διεπαφή εφαρμογής έξυπνης κάρτας για επικοινωνία με έξυπνες κάρτες από πλατφόρμες που βασίζονται σε Win32 για προσωπικούς υπολογιστές. Το PC / SC δεν υποστηρίζει προς το παρόν συστήματα που δεν βασίζονται σε Win32 και ενδέχεται να μην το κάνουν ποτέ. Θα το συζητήσουμε λεπτομερέστερα αργότερα.

Πλαίσιο OpenCard

Το OpenCard είναι ένα ανοιχτό πρότυπο που παρέχει διαλειτουργικότητα εφαρμογών έξυπνων καρτών σε NC, POS, επιτραπέζιους υπολογιστές, φορητούς υπολογιστές, set tops και ούτω καθεξής. Το OpenCard υπόσχεται να παρέχει 100% καθαρές εφαρμογές έξυπνης κάρτας Java. Οι εφαρμογές έξυπνων καρτών συχνά δεν είναι καθαρές επειδή επικοινωνούν με εξωτερική συσκευή ή / και χρησιμοποιούν βιβλιοθήκες στον πελάτη. (Ως δευτερεύουσα σημείωση, 100% καθαρές εφαρμογές θα μπορούσαν να υπάρχουν χωρίς OpenCard, αλλά χωρίς αυτό, οι προγραμματιστές θα χρησιμοποιούν οικιακές διασυνδέσεις σε έξυπνες κάρτες.) Το OpenCard παρέχει επίσης στους προγραμματιστές μια διεπαφή σε PC / SC για χρήση υπαρχουσών συσκευών στο Win32 πλατφόρμες.

Κάρτα Java

Κάρτα Java εισήχθη από την Schlumberger και υποβλήθηκε ως πρότυπο από την JavaSoft πρόσφατα. Η Schlumberger διαθέτει την μοναδική κάρτα Java στην αγορά αυτή τη στιγμή και η εταιρεία είναι ο πρώτος κάτοχος άδειας JavaCard. Μια έξυπνη κάρτα με τη δυνατότητα να ορίσει το συνολικό πρότυπο έξυπνης κάρτας, η JavaCard αποτελείται από τυπικές κατηγορίες και API που επιτρέπουν στις μικροεφαρμογές Java να εκτελούνται απευθείας σε μια τυπική κάρτα συμβατή με ISO 7816. Οι κάρτες Java επιτρέπουν την ασφαλή και ανεξάρτητη από chip εκτέλεση διαφορετικών εφαρμογών.

Σημείωση:

Αν και αυτό το άρθρο επικεντρώνεται σε έξυπνες κάρτες, είναι σημαντικό να σημειωθεί ότι δεν περιορίζεστε σε αυτού του είδους τις συσκευές. Προσωπικά, προτιμώ η συσκευή "Ibuttons" να παράγεται από τον Dallas Semiconductor. Είναι μικρό και φορητό σαν πιστωτική κάρτα, αλλά πολύ πιο εύχρηστο. Γιατί; Δεν χρειάζεται να σκάψετε το πορτοφόλι σας για να αναζητήσετε μια κάρτα. Το Ibuttons είναι εκεί, στο δάχτυλό σας. Ναι, είναι δαχτυλίδι!

Ενώ ανέπαφος υπάρχουν εκδόσεις της έξυπνης κάρτας (δείτε παρακάτω για περισσότερες πληροφορίες σχετικά με αυτό), νομίζω ότι το Ibuttons, ο τύπος συσκευής με λειτουργικά κοσμήματα θα μπορούσε να είναι αρκετά κερδοφόρος. Για περισσότερες πληροφορίες σχετικά με το Ibuttons, ανατρέξτε στην ενότητα Πόροι. Παρεμπιπτόντως, η Java Commerce Team παρουσίασε ένα "JavaRing" στο Java Internet Business Expo (JIBE) στη Νέα Υόρκη τον περασμένο Αύγουστο. Μπορείτε να το διαβάσετε στο άρθρο στο Τύχη περιοδικό (και πάλι, δείτε την ενότητα Πόροι).

Γιατί να χρησιμοποιήσετε μια έξυπνη κάρτα;

Ποια είναι τα πλεονεκτήματα της χρήσης μιας έξυπνης κάρτας; Λοιπόν, μια έξυπνη κάρτα:

  • είναι πιο αξιόπιστο από μια κάρτα μαγνητικής λωρίδας
  • Προς το παρόν μπορεί να αποθηκεύσει εκατό φορές περισσότερες πληροφορίες από μια κάρτα μαγνητικής λωρίδας
  • είναι πιο δύσκολο να παραβιαστεί από τις μαγικές ρίγες
  • μπορεί να είναι μίας χρήσης ή επαναχρησιμοποιήσιμη
  • μπορεί να εκτελέσει πολλαπλές λειτουργίες σε ένα ευρύ φάσμα βιομηχανιών
  • είναι συμβατό με φορητές ηλεκτρονικές συσκευές όπως τηλέφωνα, προσωπικούς ψηφιακούς βοηθούς (PDA) και υπολογιστές
  • εξελίσσεται συνεχώς (εν πάση περιπτώσει, ενσωματώνει ένα τσιπ υπολογιστή)

Τύποι έξυπνων καρτών

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

  1. κάρτες μνήμης
  2. κάρτες επεξεργαστή
  3. ηλεκτρονικές κάρτες πορτοφολιών
  4. κάρτες ασφαλείας
  5. Κάρτα Java

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

τερματικό κάρτας

, ή μπορούν να λειτουργούν χρησιμοποιώντας ραδιοσυχνότητες RF.

Οι έξυπνες κάρτες μπορούν να επικοινωνούν με έναν αναγνώστη ή έναν δέκτη (δείτε την ενότητα σχετικά με τους αναγνώστες παρακάτω για περισσότερες πληροφορίες σχετικά με αυτούς τους δύο όρους) σε μία από τις δύο μορφές:

Επικοινωνήστε με έξυπνες κάρτες - Η σύνδεση γίνεται όταν ο αναγνώστης έρχεται σε επαφή με ένα μικρό χρυσό τσιπ στο μπροστινό μέρος της κάρτας.

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

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

Δημιουργήστε ένα περιβάλλον ανάπτυξης για τη δημιουργία εφαρμογών έξυπνων καρτών

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

Αναγνώστης έξυπνων καρτών

Για να επικοινωνήσετε με μια έξυπνη κάρτα ή να αναπτύξετε μια εφαρμογή με δυνατότητα έξυπνης κάρτας, πρέπει να έχετε ένα αναγνώστης. Ο αναγνώστης παρέχει μια διαδρομή για την εφαρμογή σας για αποστολή και λήψη εντολών από την κάρτα. Υπάρχουν πολλοί τύποι αναγνωστών στην αγορά, οι πιο διαδεδομένοι είναι οι κατα συρροη, Κάρτα PC, και πληκτρολόγιο μοντέλα. (Τα μοντέλα πληκτρολογίου εμφανίζονται εδώ και εκεί. Περιμένετε να είναι άμεσα διαθέσιμα από τους μεγάλους κατασκευαστές υπολογιστών έως τον Ιούνιο του 1998.)

Αυτό το άρθρο χρησιμοποιεί σειριακούς αναγνώστες για την υποστήριξη των συσκευών. Ένας σειριακός αναγνώστης συνδέεται με τη σειριακή θύρα ενός υπολογιστή. Σημειώστε ότι ο παρεχόμενος κωδικός υποστηρίζει επίσης μια συσκευή ανάγνωσης PCCard. Οι περισσότεροι φορητοί υπολογιστές διαθέτουν ενσωματωμένες υποδοχές PCCard.

Κάθε κατασκευαστής παρέχει ένα διαφορετικό πρωτόκολλο για ομιλία σε έναν αναγνώστη. Μόλις μπορείτε να επικοινωνήσετε με τον αναγνώστη, υπάρχει ένα πρωτόκολλο επικοινωνίας με μια έξυπνη κάρτα: Η επικοινωνία με μια έξυπνη κάρτα βασίζεται στη μορφή APDU. (Η μορφή APDU περιγράφεται παρακάτω.) Για πληροφορίες σχετικά με την αγορά του δικού σας αναγνώστη, ανατρέξτε στην ενότητα "Αναγνώστες έξυπνων καρτών Gemplus" στην ενότητα Πόροι.

Λογισμικό για επικοινωνία με τον αναγνώστη

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

  • Κατηγορίες εντολών ISO για επικοινωνία με πρωτόκολλο 7816
  • Μαθήματα επικοινωνίας με τον αναγνώστη
  • Μαθήματα για τη μετατροπή δεδομένων σε μορφή κατασκευαστή
  • Μια εφαρμογή για έλεγχο και χρήση των καρτών για το σκοπό για τον οποίο σχεδιάστηκε η εφαρμογή

Έξυπνες κάρτες και υλικό έξυπνων καρτών

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

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

Σημαντικά πρότυπα έξυπνων καρτών

Ένα σημαντικό κομμάτι του παζλ ανάπτυξης έξυπνων καρτών είναι τα τυπικά πρωτόκολλα. Βασικά, η εφαρμογή επικοινωνεί με τον αναγνώστη, ο οποίος με τη σειρά του μιλά με την έξυπνη κάρτα χρησιμοποιώντας ένα πρωτόκολλο προτύπων - στην περίπτωσή μας, το πρωτόκολλο του Διεθνούς Οργανισμού Προτύπων (ISO) 7816.

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

Οριζόντια πρότυπα

  • ISO 7816 - περιγράφει τη διεπαφή χαμηλότερου επιπέδου σε μια έξυπνη κάρτα. Σε αυτό το επίπεδο μεταφέρονται byte δεδομένων μεταξύ αναγνώστη καρτών και κάρτας.

  • PC / SC - το πρότυπο επικοινωνίας με έξυπνες κάρτες συνδεδεμένες σε μηχανήματα Win3.1 / Win95 / NT.

  • OCF - μια διεπαφή all-Java για επικοινωνία με έξυπνες κάρτες από περιβάλλον Java. (Σύντομα το OCF θα επιτρέψει στους προγραμματιστές να γράψουν στο OCF και να πραγματοποιήσουν τη μετάφραση, οπότε δεν θα χρειαστεί να γράψετε στο PC / SC.)

  • Κάρτα Java - περιγράφει την JavaCard και τι υποστηρίζει.

Κάθετα πρότυπα

  • Mondex - ψηφιακά μετρητά που χρησιμοποιούν μόνο έξυπνες κάρτες. Η προσέγγιση Mondex δεν επιτρέπει την ύπαρξη μετρητών εκτός της κάρτας.

  • VisaCash - χρεωστική κάρτα που παρακολουθεί τις κάρτες στο διακομιστή.

  • Πρωτόνιο - μια άλλη μορφή E-cash.

  • MPCOS-EMV - κάρτα γενικής χρήσης που σας επιτρέπει να εφαρμόσετε τον δικό σας τύπο νομίσματος ή διακριτικού.

Είμαι πάντα έκπληκτος που ένα τόσο μικρό κομμάτι πλαστικού θα μπορούσε να απαιτεί τόσο μεγάλη ανάγνωση τεκμηρίωσης και να απαιτήσει τόση γνώση εκ μέρους του προγραμματιστή!

Επειδή απαιτείται τόσο υψηλό επίπεδο εμπειρογνωμοσύνης με έξυπνες κάρτες, υπάρχει μια αγορά για τους προγραμματιστές να παρέχουν προϊόντα με δυνατότητα Beans που εφαρμόζουν ένα κάθετο πρότυπο χρησιμοποιώντας το οριζόντιο πρότυπο για την αγορά στην οποία θέλετε να πουλήσετε. Αυτό σημαίνει ότι θα μπορούσατε να αναπτύξετε φασόλια που χρησιμοποιούν διάφορους συνδυασμούς των οριζόντιων προτύπων, όπως το OpenCard, για να εφαρμόσετε μια συγκεκριμένη εφαρμογή χρησιμοποιώντας κάποιο άλλο βιομηχανικό πρότυπο για το εμπόριο ή οποιαδήποτε άλλη εφαρμογή.

Επικοινωνήστε με έξυπνες κάρτες από μια εφαρμογή Java ή μια εφαρμογή

Ξέρετε τι χρειάζεστε για να συνδέσετε όλο το υλικό. Τώρα πρέπει να καταλάβουμε πώς να χρησιμοποιήσουμε ορισμένα API που θα μας επιτρέψουν να στείλουμε εντολές από μια εφαρμογή σε έναν αναγνώστη. (Ο αναγνώστης, με τη σειρά του, επικοινωνεί με την κάρτα, ενεργώντας έτσι ως μεσάζων πριν στείλει τα δεδομένα στην κάρτα.) Ο αναγνώστης έξυπνης κάρτας κουνάει τα χρυσά σημεία επαφής και μεταφέρει τα δεδομένα. Η κάρτα θα κάνει κάτι με τα δεδομένα και θα τα επιστρέψει στον αναγνώστη, ο οποίος στη συνέχεια θα επιστρέψει τα δεδομένα στην εφαρμογή. Πού είναι λοιπόν όλα αυτά τα byte καθώς μετακινούνται από την εφαρμογή σας στην κάρτα;

Όπως αναφέρθηκε παραπάνω, η εφαρμογή επικοινωνεί με τον αναγνώστη, ο οποίος με τη σειρά του μιλά με την έξυπνη κάρτα χρησιμοποιώντας τα πρότυπα που συζητήθηκαν παραπάνω. Βασικά, καθώς αναπτύχθηκε η τεχνολογία έξυπνων καρτών, ένα πρότυπο έξυπνης κάρτας προτάθηκε από το ISO. Τα τυπικά καθορισμένα μηχανικά και ηλεκτρικά χαρακτηριστικά καθώς και το πρωτόκολλο επικοινωνίας με την κάρτα. Οι δείκτες προς τα σχετικά έγγραφα ISO παρατίθενται στην ενότητα Πόροι. Δυστυχώς, η ομάδα ISO δεν μπόρεσε να παράσχει ένα πρότυπο επικοινωνίας με τον αναγνώστη. Έτσι, για να στείλετε μια εντολή σε μια κάρτα, πρώτα πρέπει να βρείτε την εντολή που υποστηρίζει η κάρτα, τυλίξτε αυτήν την εντολή σε ένα πακέτο εντολών ISO και, στη συνέχεια, τυλίξτε αυτήν τη νέα εντολή στο περιτύλιγμα που απαιτείται για τον εν λόγω αναγνώστη. Το παράδειγμα εφαρμογής που παρέχεται εδώ εκτελεί όλο αυτό το επίπεδο για εσάς.

Μονάδες δεδομένων πρωτοκόλλου εφαρμογής (APDUs)

Η βασική μονάδα ανταλλαγής με έξυπνη κάρτα είναι το πακέτο APDU. Το μήνυμα εντολής που αποστέλλεται από το επίπεδο εφαρμογής και το μήνυμα απόκρισης που επιστρέφεται από την κάρτα στο επίπεδο εφαρμογής, ονομάζονται Μονάδες Δεδομένων Πρωτοκόλλου Εφαρμογής (APDU). Η επικοινωνία με την κάρτα και τον αναγνώστη πραγματοποιείται με APDUs. Ένα APDU μπορεί να θεωρηθεί πακέτο δεδομένων που περιέχει μια πλήρη οδηγία ή μια πλήρη απόκριση από μια κάρτα. Για την παροχή αυτής της λειτουργικότητας, τα APDU έχουν μια καλά καθορισμένη δομή που ορίζεται σε έναν αριθμό εγγράφων ISO που ανήκουν στην οικογένεια προδιαγραφών 7816.

Τα APDU αποτελούνται από τα ακόλουθα πεδία:

Μορφή εντολής APDU

CLAΙΝΣΡ1Ρ2LcΔεδομέναΛε

Μορφή απόκρισης APDU

ΔεδομέναSW1SW2

Τα παρακάτω είναι μερικά από τα μαθήματα που παρέχονται για τη μεταφορά APDUs και τις λειτουργίες των τάξεων: