הבנת Java Card 2.0

מאמר זה מתחיל בסקירה של כרטיסים חכמים ובסקירה קצרה של ISO 7816, תקן הכרטיס החכם. בהתחשב ברקע בכרטיסים חכמים בעמודות קודמות של Java Developer , הפרק הזה יתחיל בתשובה לשאלה "מהו כרטיס Java?" וסקירה על ארכיטקטורת מערכת Java Card. לאחר מכן נתמקד בסוגיות הרבות הספציפיות לכרטיס Java, כולל מחזור החיים של Java Card; קבוצות המשנה של Java Card 2.0 ושיעורי ספריית API; ואבטחת Java Card. לאחר מכן נדון בסביבת זמן הריצה של Java Card ונראה כיצד פועל כרטיס Java. נסגור עם דוגמה מאירה: יישום ארנק אלקטרוני שנכתב רק עבור כרטיס ה- Java.

מכאן והלאה, כל ההפניות ל- Java Card מתייחסות באופן מרומז ל- Java Card 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 מכיל פקודה או הודעת תגובה. בעולם הקלפים משתמשים במודל המאסטר-עבד לפיו כרטיס חכם ממלא תמיד את התפקיד הפסיבי. במילים אחרות, כרטיס חכם תמיד ממתין לפקודת APDU ממסוף. לאחר מכן הוא מבצע את הפעולה שצוינה ב- APDU ועונה לטרמינל עם APDU של תגובה. APDUs פיקוד ו- APDUs לתגובה מוחלפים לחילופין בין כרטיס למסוף.

הטבלאות הבאות ממחישות פורמטים של פקודה ותגובה של APDU, בהתאמה. מבנה APDU מתואר ב- ISO 7816, חלק 4.

פיקוד APDU
כותרת חובה גוף מותנה
CLA INS P1 P2 Lc שדה נתונים Le

הכותרת מקודדת את הפקודה שנבחרה. הוא מורכב מארבעה שדות: מחלקה (CLA), הוראות (INS), ופרמטרים 1 ו -2 (P1 ו- P2). כל שדה מכיל בתים אחד:

  • CLA: בתים כיתתיים. בכרטיסים חכמים רבים, בית זה משמש לזיהוי יישום.

  • INS: בתים הוראות. בית זה מציין את קוד ההוראות.

  • P1-P2: בתים פרמטרים. אלה מספקים הסמכה נוספת לפקודת APDU.

Lc מציין את מספר הבתים בשדה הנתונים של הפקודה APDU; Le מציין את המספר המרבי של בתים הצפויים בשדה הנתונים של התגובה הבאה APDU.

תגובה APDU
גוף מותנה טריילר חובה
שדה נתונים SW1 SW2

בתים סטטוס SW1 ו- SW2 מציינים את מצב העיבוד של הפקודה APDU בכרטיס.

מהו כרטיס Java?

כרטיס ג'אווה הוא כרטיס חכם המסוגל להריץ תוכניות ג'אווה. מפרט Java Card 2.0 פורסם בכתובת //www.javasoft.com/javacard. הוא מכיל מידע מפורט לבניית המכונה הווירטואלית Java Card וממשק תכנות היישומים (API) בכרטיסים חכמים. דרישת המערכת המינימלית היא 16 קילו-בתים של זיכרון לקריאה בלבד (ROM), 8 קילו-בתים של EEPROM ו- 256 בתים של זיכרון גישה אקראית (RAM).

ארכיטקטורת המערכת בכרטיס Java מומחשת באיור הבא.

כפי שמוצג באיור, ה- Java Card VM בנוי על גבי מעגל משולב ספציפי (IC) והטמעת מערכת הפעלה מקורית. שכבת JVM מסתירה את הטכנולוגיה הקניינית של היצרן עם ממשק שפה ומערכת משותף. מסגרת ה- Java Card מגדירה קבוצה של שיעורי ממשק תכנות יישומים (API) לפיתוח יישומי Java Card ולמתן שירותי מערכת ליישומים אלה. תעשייה או עסק ספציפי יכולים לספק ספריות תוספות בכדי לספק שירות או לשכלל את מודל האבטחה והמערכת. יישומי Java Card נקראים יישומונים . יישומונים מרובים יכולים להתגורר בכרטיס אחד. כל יישומון מזוהה באופן ייחודי על ידי ה- AID שלו (מזהה יישום), כהגדרתו ב- ISO 7816, חלק 5.

נקודה חשובה שיש לזכור היא מה אינם כרטיסים חכמים : הם אינם מחשבים אישיים. יש להם משאבי זיכרון מוגבלים וכוח מחשוב. משתמשים לא צריכים לחשוב על Java Card 2.0 כעל גרסה פשוטה של ​​ה- JDK.

חייו של כרטיס Java

אורך החיים של Java Card מתחיל כאשר מערכת ההפעלה המקורית, ה- Java Card VM, API ספריות המחלקות, ואופציות, יישומונים נצרבים ב- ROM. תהליך זה של כתיבת הרכיבים הקבועים בזיכרון הלא משתנה של שבב לביצוע פקודות נכנסות נקרא מיסוך .

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

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

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

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

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

כרטיס Java נותר פעיל עד לפג תוקפו או לחסימתו בגלל שגיאה בלתי ניתנת לשחזור.

אורך החיים של מכונה וירטואלית של Java Card

בניגוד למכונה הווירטואלית של Java (JVM) במחשב או בתחנת עבודה, המכונה הווירטואלית של Java Card פועלת לנצח.

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

אורך החיים של יישומי Java Card ואובייקטים

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

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

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

ערכת משנה בשפה Java Card 2.0

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

  • העמסת כיתה דינמית

  • מנהל אבטחה

  • חוטים וסנכרון

  • שיבוט אובייקטים

  • סיום

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

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

מסגרת Java Card 2.0

כרטיסים חכמים קיימים 20 שנה בשוק, ורובם תואמים בדרך כלל ISO 7816 חלקים 1-7 ו / או EMV. כבר בדקנו את ISO 7816. מה זה EMV? תקן EMV, המוגדר על ידי Europay, MasterCard ו- Visa, מבוסס על סדרת התקנים ISO 7816 עם תכונות קנייניות נוספות כדי לענות על הצרכים הספציפיים של התעשייה הפיננסית. מסגרת כרטיסי Java תוכננה לתמוך בקלות במערכות ויישומי כרטיסים חכמים. הוא מסתיר את פרטי תשתית הכרטיסים החכמים ומספק למפתחי יישומי Java Card ממשק תכנות קל ופשוט יחסית.

מסגרת Java Card מכילה ארבע חבילות:

שם חבילה תיאור
javacard.framework זוהי חבילת הליבה בכרטיס. היא מגדירה שיעורים כגון ו , המהווים את אבני הבניין הבסיסיות עבור תוכניות Java Card ו , ו , המספקים ריצה ושירות מערכת לתוכניות כרטיס Java, כגון טיפול APDU ושיתוף אובייקט
javacardx.framework חבילה זו מספקת עיצוב מונחה עצמים עבור מערכת קבצים תואמת ISO 7816-4. הוא תומך בקבצים אלמנטריים (EF), קבצים ייעודיים (DF) ו- APDUs מונחה קבצים כמפורט ב- ISO7816
javacardx.crypto ו- javacardx.cryptoEnc שתי חבילות אלה תומכות בפונקציונליות קריפטוגרפית הנדרשת בכרטיסים חכמים

בהתאם לחוקת השמות של Java, חבילות Java Cardx הן הרחבות למסגרת Java Card. אין חובה שתתמוך בהם בכרטיס.

אבטחת Java Card

יישומוני Java כפופים למגבלות אבטחה של Java, אולם מודל האבטחה של מערכות Java Card שונה מג'אווה רגילה במובנים רבים.

מחלקת מנהל האבטחה אינה נתמכת בכרטיס Java. מדיניות אבטחת השפה מיושמת על ידי המכונה הווירטואלית.

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

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

איך הדברים עובדים יחד בתוך כרטיס Java

בתוך כרטיס Java, JCRE (Java Card Runtime Environment) מתייחס למכונה הווירטואלית של Java Card ולשיעורים במסגרת Java Card Framework. כל יישומון בתוך כרטיס Java משויך ל- AID ייחודי שהוקצה על ידי JCRE.

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