כרטיסים חכמים: פריימר

כרטיסים חכמים זוכים להרבה באזורים ברשת באינטרנט, בכנס JavaOne באפריל האחרון (ארבעה מושבים שעסקו בטכנולוגיה), בתחנות החדשות הגדולות ברשת וב- CNN. במאמר זה נביא את הכרטיס החכם לחיים עם דוגמה של כרטיס חכם אמיתי. הטכניקות המוצגות כאן יאפשרו לך לבנות יישומי Java המאופשרים בכרטיס חכם.

אנו נתמקד בשני סוגים של כרטיסים חכמים: כרטיסי זיכרון חכמים , אותם ניתן לראות כדיסקי קריאה / כתיבה נשלפים זעירים עם אבטחה אופציונלית; ו כרטיסי מעבד , אשר יכול להיחשב מחשבים זעירים עם יציאת קלט ופלט. מאמרים עתידיים יכסו כרטיסי מעבד לעומק רב יותר.

כבשר המאמר, נפתח אב-טיפוס פשוט לקריאה וכתיבה של נתונים לכרטיס חכם. נדון בכרטיס מרשם לתרופות , שמנהל רשימה של כל המרשמים שלך ועוקב אחר הביטוחים שלך, תוכניות מרשם ומידע שימושי אחר. מאמרים מאוחרים יותר ירחיבו את רעיון כרטיס המרשם.

תוכלו להבחין כי נושא חוזר שרץ לאורך סדרה זו בכרטיסים חכמים הוא הצורך במסגרת אבטחה כדי למנוע מתוספים נוכלים, רכיבי ActiveX וכן הלאה להגיע למוצרי המידע האישיים ו / או הארגוניים שלכם. לשם כך, ההדגמה כיצד לקרוא ולכתוב נתונים לכרטיס חכם הכלול במאמר זה תספק לך אחסון מתמשך, מאובטח (ונייד).

מהו כרטיס חכם?

אתה יכול לחשוב על הכרטיס החכם כעל "כרטיס אשראי" עם "מוח" עליו, המוח הוא שבב מחשב מוטבע קטן. ניתן לתכנת מחשב כרטיס זה לביצוע משימות ולאחסן מידע, אך שימו לב שהמוח קטן - כלומר כוחו של הכרטיס החכם נופל בהרבה מהמחשב השולחני שלכם.

כרטיסים חכמים משמשים כיום בעסקאות טלפון, תחבורה, בנקאות ובריאות, ובקרוב - הודות למפתחים כמוך - נתחיל לראות אותם משמשים ביישומי אינטרנט. כרטיסים חכמים כבר נמצאים בשימוש נרחב ביפן ובאירופה וצוברים פופולריות בארה"ב. למעשה, שלושה אירועים משמעותיים התרחשו לאחרונה בתעשיית הכרטיסים החכמים במדינה זו:

PC / SC

מיקרוסופט ומספר חברות אחרות הציגו את PC / SC , ממשק יישומי כרטיסים חכמים לתקשורת עם כרטיסים חכמים מפלטפורמות מבוססות Win32 למחשבים אישיים. PC / SC אינו תומך כרגע במערכות שאינן מבוססות Win32 וייתכן שלעולם לא יעשה זאת. נדון בכך ביתר פירוט בהמשך.

מסגרת OpenCard

OpenCard הוא תקן פתוח המספק יכולת פעולה הדדית של יישומי כרטיסים חכמים ברחבי NCs, POS, מחשבים שולחניים, מחשבים ניידים, מכשירי סטריאו וכו '. OpenCard מבטיח לספק 100% יישומי כרטיס חכם טהור של Java. יישומי כרטיסים חכמים לרוב אינם טהורים מכיוון שהם מתקשרים עם מכשיר חיצוני ו / או משתמשים בספריות על הלקוח. (כהערה צדדית, 100% יישומים טהורים יכולים להתקיים ללא OpenCard, אך בלעדיה מפתחים ישתמשו בממשקים ביתיים לכרטיסים חכמים.) OpenCard מספקת למפתחים גם ממשק ל- PC / SC לשימוש במכשירים קיימים ב- Win32. פלפרומים.

JavaCard

JavaCard הוצג על ידי Schlumberger והוגש כסטנדרט על ידי JavaSoft לאחרונה. לשלומברגר יש כרטיס Java היחיד הקיים כיום, והחברה היא בעלת רישיון JavaCard הראשונה. כרטיס חכם בעל פוטנציאל להגדיר את תקן הכרטיס החכם הכולל, JavaCard מורכב ממחלקות סטנדרטיות וממשקי API המאפשרים ליישומי Java לפעול ישירות על גבי כרטיס תקן ISO 7816 תואם. JavaCards מאפשרים ביצוע מאובטח ובלתי תלוי בשבבים של יישומים שונים.

הערה:

למרות שמאמר זה מתמקד בכרטיסים חכמים, חשוב לציין כי אינך מוגבל למכשירים מסוג זה. באופן אישי, אני מעדיף את מכשיר "Ibuttons" המיוצר על ידי דאלאס סמיקונדקטור. זה קטן ונייד כמו כרטיס אשראי, אבל כל כך הרבה יותר נוח. למה? אתה לא צריך לחפור את הארנק שלך בחיפוש אחר כרטיס; הכפתורים נמצאים שם, על האצבע שלך. כן, זו טבעת!

אמנם קיימות גרסאות ללא מגע של הכרטיס החכם (ראה להלן מידע נוסף בנושא זה), אך אני חושב שמכשירי ה- Ibuttons, תכשיטים פונקציונליים, יכולים להיות רווחיים למדי. למידע נוסף על כפתורים, עיין בסעיף משאבים. אגב, צוות המסחר של ג'אווה הדגים "JavaRing" בתערוכת Java Internet Business Expo (JIBE) בניו יורק באוגוסט האחרון. תוכלו לקרוא על כך במאמר במגזין Fortune (שוב, ראו מדור משאבים).

מדוע להשתמש בכרטיס חכם?

מהם היתרונות בשימוש בכרטיס חכם? ובכן, כרטיס חכם:

  • אמין יותר מכרטיס פס מגנטי
  • כרגע יכול לאחסן מידע פי מאה מכרטיס פס מגנטי
  • קשה יותר להתעסק בו מאשר פסי מג
  • יכול להיות חד פעמי או לשימוש חוזר
  • יכול לבצע מספר פונקציות במגוון רחב של תעשיות
  • תואם למכשירים אלקטרוניים ניידים כגון טלפונים, עוזרים דיגיטליים אישיים (מחשבי כף יד) ומחשבים אישיים
  • מתפתח כל הזמן (אחרי הכל, הוא משלב שבב מחשב)

סוגי כרטיסים חכמים

כאמור לעיל, מאמר זה יתמקד בשני סוגים של כרטיסים חכמים - זיכרון ותהליך. בסך הכל ישנם חמישה סוגים של כרטיסים חכמים:

  1. כרטיסי זיכרון
  2. כרטיסי מעבד
  3. כרטיסי ארנק אלקטרוניים
  4. כרטיסי אבטחה
  5. JavaCard

כרטיסים חכמים הם פיסת חומרה אישית שחייבת לתקשר עם מכשיר אחר כדי לקבל גישה למכשיר תצוגה או לרשת. ניתן לחבר כרטיסים לקורא, המכונה בדרך כלל a

מסוף כרטיסים

, או שהם יכולים לפעול באמצעות תדרי רדיו RF.

כרטיסים חכמים יכולים לתקשר עם קורא או מקלט (ראה פרק על הקוראים להלן לקבלת מידע נוסף על שני מונחים אלה) באחת משתי צורות:

כרטיסים חכמים ליצירת קשר - החיבור נוצר כאשר הקורא יוצר קשר עם שבב זהב קטן בחזית הכרטיס.

כרטיסים חכמים ללא מגע - אלה יכולים לתקשר באמצעות אנטנה, ובכך מבטל את הצורך להכניס ולהוציא את הכרטיס ביד. עם כרטיס ללא מגע, כל שעליך לעשות הוא להתקרב למקלט, והכרטיס יתחיל לתקשר איתו. ניתן להשתמש בכרטיסים ללא מגע ביישומים שבהם הכנסת / הוצאת כרטיס עשויה להיות לא מעשית או שמהירות חשובה להם.

חלק מהיצרנים מייצרים כרטיסים המתפקדים הן במגע והן ללא מגע.

צור סביבת פיתוח לבניית אפליקציות כרטיס חכם

על מנת לפתח יישומי כרטיסים חכמים, אתה זקוק לכמה דברים, כלומר: קורא כרטיסים חכמים; תוכנה לתקשורת עם הקורא וכן תוכנות מסוימות לתקשורת עם הכרטיס שחובר לקורא; וכמובן, כרטיסים חכמים וחומרת כרטיסים חכמים.

קורא כרטיסים חכמים

כדי לתקשר עם כרטיס חכם או לפתח יישום המסוגל לכרטיס חכם, עליך להיות בעל קורא . הקורא מספק נתיב ליישום שלך למשלוח וקבלה של פקודות מהכרטיס. ישנם סוגים רבים של קוראים על השוק, הנפוץ ביותר להיות סדרתי , PCCard , ואת מקלדת דגמים. (דגמי מקלדת צצים פה ושם; מצפים שהם יהיו זמינים ישירות מיצרני המחשבים הגדולים עד יוני 1998).

מאמר זה משתמש בקוראים סדרתיים לתמיכה במכשירים. קורא סדרתי מתחבר ליציאה הטורית של המחשב. שים לב שהקוד שסופק תומך גם בקורא PCCard; רוב המחשבים הניידים כוללים חריצי PCCard מובנים.

כל יצרן מספק פרוטוקול אחר לדיבור לקורא. ברגע שתוכלו לתקשר עם הקורא, קיים פרוטוקול אחד לתקשורת עם כרטיס חכם: תקשורת עם כרטיס חכם מבוססת על פורמט APDU. (פורמט APDU נדון להלן.) למידע על רכישת קורא משלך, עיין בכותרת "קוראי כרטיסים חכמים של Gemplus" בסעיף משאבים.

תוכנה לתקשורת עם הקורא

יש צורך במספר כיתות מונחות עצמים לדוגמת הכרטיס החכם הכלול במאמר זה. אלו הם:

  • שיעורי פקודה ISO לתקשורת עם פרוטוקול 7816
  • שיעורים לתקשורת עם הקורא
  • שיעורים להמרת נתונים לפורמט ספציפי ליצרן
  • אפליקציה לבדיקה ושימוש בכרטיסים למטרה שלשמה תוכננה האפליקציה

כרטיסים חכמים וחומרת כרטיסים חכמים

כפי שצוין בתחילת המאמר, על מנת לפתח את יישום הכרטיס החכם כאן, אתה זקוק לחומרת כרטיסים חכמים וכמה כרטיסים חכמים. ניתן לרכוש ערכות פיתוח כרטיסים חכמים ממספר חברות, כולל Gemplus ו- Schlumberger.

לאלו מכם שכבר יש קוראים, עליכם להיות מסוגלים להשתמש בקורא על ידי אספקת יישום של כיתת ממשק שעליה נדון בהמשך. כאמור לעיל, לפני שנוכל לתקשר עם הכרטיס, עלינו להיות מסוגלים לתקשר עם הקורא, וכמו שיש הרבה קלפים שונים, יש הרבה קוראים שונים.

סטנדרטים חשובים של כרטיסים חכמים

חלק חשוב בפאזל לפיתוח יישומי כרטיסים חכמים הוא הפרוטוקולים הסטנדרטיים. בעיקרון, היישום מתקשר עם הקורא, שמצידו מדבר עם הכרטיס החכם באמצעות פרוטוקול תקנים - במקרה שלנו, פרוטוקול ארגון התקנים הבינלאומי (ISO) 7816.

כמו בכל טכנולוגיה חדשה, ישנם כל כך הרבה סטנדרטים לכרטיסים חכמים שאתה עלול למצוא עצמך מיואש ומוצף. השגת הבנה בסיסית של הסטנדרטים הבאים תאפשר לך לפתח יישומים מתוך ביטחון שאתה לא מתעלם ממשהו בסיסי לשימוש בכרטיסים חכמים. עם זאת, עבור מערכות מסוימות תקנים מיוחדים נכנסים לפעולה. שברתי את כל עניין הסטנדרטים לסטנדרטים "אופקיים" ו"אנכיים ": ניתן להשתמש בכל התקנים בכל תקנים אופקיים, בעוד שסטנדרטים אנכיים הם ספציפיים למערכת.

סטנדרטים אופקיים

  • ISO 7816 - מתאר את הממשק ברמה הנמוכה ביותר לכרטיס חכם. ברמה זו מועברים בתים נתונים בין קורא כרטיסים לכרטיס.

  • PC / SC - תקן התקשורת עם כרטיסים חכמים המחוברים למכונות Win3.1 / Win95 / NT.

  • OCF - ממשק Java כולו לתקשורת עם כרטיסים חכמים מסביבת Java. (בקרוב OCF תאפשר למפתחים לכתוב ל- OCF ולבצע את התרגום, כך שלא יהיה צורך לכתוב ל- PC / SC.)

  • JavaCard - מתאר את JavaCard ובמה הוא תומך.

סטנדרטים אנכיים

  • מונקס - מזומנים דיגיטליים המשתמשים בכרטיסים חכמים בלבד. גישת מונקס אינה מאפשרת להתקיים מזומן מחוץ לכרטיס.

  • VisaCash - כרטיס חיוב העוקב אחר הכרטיסים בשרת.

  • פרוטון - צורה אחרת של מזומנים אלקטרוניים.

  • MPCOS-EMV - כרטיס למטרות כלליות המאפשר לך ליישם סוג מטבע או אסימון משלך.

אני תמיד מופתע מכך שחתיכת פלסטיק כל כך קטנה יכולה לדרוש כל כך הרבה קריאת תיעוד ולדרוש כל כך הרבה ידע מצד היזם!

מכיוון שרמת מומחיות כה גבוהה נחוצה בכרטיסים חכמים, יש שוק למפתחים לספק מוצרים בעלי יכולת שעועית המיישמים תקן אנכי תוך שימוש בתקן האופקי לשוק אליו אתם רוצים למכור. המשמעות היא שתוכל לפתח שעועית המשתמשת בשילובים שונים של הסטנדרטים האופקיים, כמו OpenCard, כדי ליישם יישום ספציפי באמצעות תקן תעשייתי אחר למסחר או כל יישום אחר.

לתקשר עם כרטיסים חכמים מיישומון או מיישום Java

אתה יודע מה אתה צריך כדי לחבר את כל החומרה. כעת עלינו להבין כיצד להשתמש בכמה ממשקי API שיאפשרו לנו לשלוח פקודות מיישום לקורא. (הקורא, בתורו, מתקשר עם הכרטיס, ובכך משמש כמתווך לפני שהוא שולח את הנתונים לכרטיס.) קורא הכרטיסים החכמים מנענע את נקודות המגע הזהב ומעביר את הנתונים. הכרטיס יעשה משהו עם הנתונים ויחזיר אותם לקורא, ואז יחזיר את הנתונים ליישום. אז איפה כל הבתים האלה בזמן שהם עוברים מהיישום שלך לכרטיס?

כאמור לעיל, היישום מתקשר עם הקורא, אשר בתורו מדבר עם הכרטיס החכם באמצעות הסטנדרטים שנדונו לעיל. בעיקרון, ככל שהתפתחה טכנולוגיית הכרטיסים החכמים, הוצע על ידי תקן כרטיס חכם. התקן הגדיר מאפיינים מכניים וחשמליים וכן פרוטוקול התקשורת עם הכרטיס. מצביעים למסמכי ISO הרלוונטיים מפורטים בסעיף משאבים. למרבה הצער, קבוצת ה- ISO לא הצליחה לספק תקן לתקשורת עם הקורא. לכן, על מנת לשלוח פקודה לכרטיס, ראשית עליך למצוא את הפקודה בה הכרטיס תומך, לעטוף פקודה זו בחבילת פקודה ISO, ואז לעטוף פקודה חדשה זו בעטיפה הנדרשת לקורא המדובר. יישום הדוגמה המופיע כאן מבצע את כל השכבות הללו עבורך.

יחידות נתוני פרוטוקול יישום (APDU)

יחידת החלפה בסיסית עם כרטיס חכם היא חבילת APDU. הודעת הפקודה הנשלחת משכבת ​​היישום, והודעת התגובה שהוחזר על ידי הכרטיס לשכבת היישום, נקראות יחידות פרוטוקול יישום (APDU). התקשורת עם הכרטיס והקורא מתבצעת עם מכשירי APDU. APDU יכול להיחשב כחבילת נתונים המכילה הוראה מלאה או תגובה מלאה מכרטיס. כדי לספק פונקציונליות זו, ל- APDU יש מבנה מוגדר היטב המוגדר במספר מסמכי ISO השייכים למשפחת המפרט 7816.

APDUs מורכבים מהשדות הבאים:

פורמט APDU בפקודה

CLA INS P1 P2 Lc נתונים Le

פורמט APDU לתגובה

נתונים SW1 SW2

להלן חלק מהשיעורים הניתנים להובלת APDU ופונקציות הכיתות: