صد رازِ نهان

یک شمع، با روشن کردن شمعی دیگر چیزی از دست نمی‌دهد!

۵ مطلب با کلمه‌ی کلیدی «smartcardio» ثبت شده است

جاواکارت مقدماتی/8-برنامه نویسی جاواکارت در Eclipse

قسمت قبلی: برنامه نویسی جاواکارت در Netbeans

در قسمت قبل دیدیم که نسخه‌های جدید محیط برنامه نویسی Netbeans، به صورت پیشفرض، Pluginها و APIهای مورد نیاز برای برنامه نویسی جاواکارت را در خود دارند. متاسفانه در مورد محیط برنامه نویسی Eclipse اینگونه نیست (نویسنده از نسخه‌ی جدید این نرم افزار اطلاع ندارد). بنابراین نیاز است که برنامه نویس خودش Plugin و APIهای مورد نیاز را به آن بیفزاید.


سوال: IDE چیست؟ Plugin چیست؟ API چیست؟

پاسخ: IDE یا Integrated Development Environment یا محیط برنامه نویسی در واقع نرم افزارهایی مانند Netbeans، Eclipse یا Visual Studio هستند که فضایی را برای برنامه نویس فراهم می‌آوردند که برنامه‌های خود را به صورت راحت تر بنویسد و Compile/Interpret کند. 

API یا Application Programming Interface یا رابط برنامه نویسی نرم افزار، در واقع مجموعه ای از واسط/رابط ها بین برنامه ای که قرار است نوشته شود با کتابخانه‌های آن زبان یا سیستم عامل هستند. یکی از قابلیت‌هایی که IDE دارد این است که هنگام نوشتن برنامه و استفاده از این رابط های برنامه نویسی در کد برنامه، به صورت اتوماتیک چک می‌کند که آیا چنین رابطی وجود دارد یا خیر، و اگر موجود نبود، به برنامه نویس خطای استفاده از APIهای اشتباه می‌دهد و یا به وی کمک می‌کند آن را اصلاح کند. (بنابراین باید APIهای لازم را به محیط برنامه نویسی معرفی/اضافه کنیم).

و نهایتا Plugin مجموعه ای فایل است که برای یک نرم افزار مانند IDE نوشته شده اند که به آن قابلیتی اضافه کنند. 

به صورت روشن تر، وقتی ما JCDK را از سایت Oracle دانلود می‌کنیم، همه‌ی APIها و ابزارهای مورد نیاز برای نوشتن و ساخت یک اپلت در آن مجموعه وجود دارد. یعنی می‌توانیم بدون استفاده از هیچگونه IDE ای، اپلت خود را بنویسیم و فایل cap آن را تولید کنیم! منتهی باید با Notepad یا ابزاری مشابه آن، و یک مجموعه ابزارهای خط فرمانی دست و پنجه نرم کنیم، و هیچ گونه هشداری به ما در مورد نوشتن یک اسم API اشتباه یا خطاهای مانند آن به ما داده نمی شود، و تنها در مراحل پایانی، هنگام Compile/Interpret به واسطه ی اجرا نشدن موفق فرایند، متوجه وجود یک خطا در برنامه می‌شویم. کاری که IDE با Plugin هایش برای ما انجام می‌دهد، مکانیزه کردن کل این فرایندها و مخفی کردن ابزارهای خط فرمانی و مراحل آن ها، در پس چند کلیک ساده است. 


Eclipse:

خب، برای شروع، ابتدا Eclipse و سپس Java Card Development Kit 2.2.2 و پلاگین Eclipse-JCDE را دانلود می‌کنیم. 

نکته‌ی مهم اول: Eclipse و Java Development Kit و Java Card Development Kit 2.2.2 و Windows چهار مورد باید یا 32 بیتی باشند یا 64 بیتی. تفاوت یکی از این موارد با موارد دیگر موجب ناسازگاری مجموعه می‌شود و عدم کارکرد صحیح می‌شود.

نکته‌ی مهم دوم: همانطور که پیش‌تر گفته بودیم، پلاگین Eclipse-JCDE تنها برای JCDK2.2.2 نوشته شده است. بنابراین شما باید این نسخه از JCDK را دانلود کنید. (با ترفندی می‌توان از نسخه های پایین تر نیز استفاده کرد؛ لیکن، برای اجرای آن ترفندها، همچنان به نسخه‌ی 2.2.2 نیز نیاز است).

اما بعد؛ پس از دانلود موارد بالا:

  1.  ابتدا Java Development Kit را نصب کنید. پس از آن نرم افزار وارد پوشه‌ی Eclipse شوید(این نرم افزار به صورت Portable می‌باشد، یعنی نیاز به نصب ندارد و نهایتا تنها کاری که شما باید در مورد فایل دانلود شده‌ی آن بکنید، Extract کردن آن در یک دایرکتوری است).
  2. داخل پوشه‌ی Eclipse یک فولدر به نام plugins وجود دارد، محتویات Eclipse-JCDE (پلاگین دانلود شده) را در این فولدر قرار دهید.
  3. JCDK را در یک فولدر Extract کنید. وارد مسیر Extract شوید. داخل این دایرکتوری، چهار فایل فشرده می‌بینید. هر چهار مورد را مجدد Extract کنید (فایل اصلی java_card_kit-2_2_2-rr-bin-windows-do.zip است).
  4. حال نرم افزار Eclipse را باز کنید و از منوی Java Card (که به واسطه ی پلاگین دانلود شده به Eclipse اضافه شده است)، گزینه‌ی Preferences را انتخاب کنید. سپس روی Browse کلید کرده و مسیر پوشه ی  java_card_kit-2_2_2-rr-bin-windows-do را به آن بدهید و روی OK کلیک کنید. 
بعد از انجام مراحل بالا، محیط برنامه نویسی Eclipse برای ساخت پروژه های جاواکارت آماده است. برای ایجاد یک پروژه‌ی جاواکارت به این ترتیب عمل می‌کنیم:

1- File > New > Other

2- Java Card > Java Card Project - Next

3- Assigning a name to your project and then click on Finish.
 بعد از کلیک کردن روی دکمه‌ی Finish در منوی سمت راست Eclipse پوشه‌ای با نامی که شما در مرحله‌ی 3 به آن اختصاص دادید ظاهر می‌شود. این پوشه، پوشه‌ی خالی پروژه‌ی شماست:

4- File > New > Other > Java Card Applet
برای افزودن یک اپلت خام(:دی!) به پوشه‌ی پروژه، دو مسیر وجود دارد. راه نخست این که در حالی که پوشه‌ی پروژه انتخاب شده است، مجددا مراحل 1 و 2 را انجام دهیم، با این تفاوت که در مرحله‌ی 2، به جای Java Card Project،  گزینه‌ی Java Card Applet را انتخاب کنیم. مسیر دوم هم به این صورت است که به جای انتخاب کردن پوشه‌ی پروژه و رفتن به File > New، مستقیما روی خود پوشه‌ی پروژه کلید راست کنید و New و ... را پیش بروید. به هر حال از هر دو مسیر، پس از انتخاب Java Card Applet و کلیک روی Next، پنجره ی زیر ظاهر خواهد شد:

5- Assigning Package Name, Applet Name and Applet AID:

در مورد پنجره‌ی فوق چند نکته وجود دارد:
1- بنا بر رسم برنامه نویسی، اسم Package را با حرف کوچک و اسم Applet را با نام بزرگ شروع می‌کنند.
2- چنانچه Package Name را خالی بگذارید، Eclipse به شما هشداری نمی‌دهد، و حتی با کلیک کردن روی Finish، اپلت خام مورد نظر به پروژه اضافه می‌شود (که نام Package آن Default Package شده است)؛ اما، به هنگام ساخت فایل cap. خطایی دریافت می‌کنید که به هیچ وجه از متن آن مشخص نمی‌شود ایراد کجاست! بنابرین برای روبرو نشدن با خطا، حتما به Package یک نام اختصاص دهید.  
3- در این پنجره، تنها AID اپلت از برنامه نویس خواسته می‌شود و AID توسط IDE یک مقدار پیش‌فرض دریافت می‌کنید که در پنجره‌ی بعدی قابل تغییر است.

پس از کلیک کردن روی Finish پنجره ی نهایی که همان محیط برنامه نویسی جاواکارت است مجددا ظاهر می‌شود:

خطایی که مشاهده می‌کنید با پاک کردن override@ از متن برنامه حذف می‌شود. منوهایی که در کادر آبی مشاهده می‌کنید مواردی هستند که به کمک Plugin دانلود شده به Eclipse اضافه شده اند. JCWDE و CREF شبیه سازهای (Simulator) جاواکارت هستند که Oracle آن ها را در بسته‌ی Java Card Development Kit ارائه می‌دهد تا برنامه نویس بتواند بدون نیاز به یک کارت فیزیکی واقعی، برنامه‌ی خود را خطایابی کند. 

نهایتا پس از رفع خطا و ایجاد تغییرات مناسب در برنامه نوبت به ساخت فایل cap. می رسد. برای این کار یا از منوی Java Card در کادر آبی، یا با کلید راست کردن روی نام Package و رفتن به زیر منوی Java Card Tools، گزینه‌ی Convert را انتخاب می‌کنیم تا فایل cap ساخته شود:

6- Assigning Package AID and Generating CAP file:

از آنجا که در مراحل قبلی به Package برنامه AID اختصاص ندادیم، به صورت اتوماتیک یک پنجره باز می‌شود که از ما AID پکیج را می‌گیرد (چنانچه پیش از Convert از Set Package AID استفاده می‌کردیم، دیگر این پنجره ظاهر نمی‌شد). پس از اختصاص Package AID و کلیک روی OK، به احتمال خیلی زیاد، با خطای زیر مواجه خواهید شد:

علت این خطا، تنظیم بودن Compiler جاوا (بله جاوا، نه جاواکارت) در Eclipse روی نسخه‌هایی بالاتر از 1.3 است، برای ساخت فایل‌های cap جاواکارت نسخه‌ی 2.2.2 و قبل تر، کامپایلر جاوا حتما باید روی نسخه‌ی 1.3 (شاید 1.4 هم جوابگو باشد) تنظیم شود. برای تغییر آن، از منوی  Windows بالای پنجره‌ی Eclipse، گزینه‌ی Preferences را انتخاب کنید و سپس در پنجره‌ی باز شده مانند زیر عمل کنید:

حال، مجددا مرحله‌ی 6 را تکرار کنید تا فایل cap به صورت موفق آمیز ساخته شود:

همانطور که مشاهده می‌کنید در کادر سمت چپ، فایل cap ظاهر شده است. شما می‌توانید با کلیک راست کردن روی آن و انتخاب copy، آن را به هر کجای هارد انتقال دهید. همچنین می‌توانید با انتخاب properties، مسیر فعلی آن را مشاهده کنید.


آنچه پنهان در میان سینه باشد، عشق نیست
عاشقان با رسم رسوایی به میدان می‌روند
#عارفه_نصیری

۲۷ آبان ۹۴ ، ۲۳:۲۸ ۱ نظر موافقین ۰ مخالفین ۰
ابراهیم قاسمی

جاواکارت مقدماتی/7-برنامه نویسی جاواکارت در Netbeans

قسمت قبلی: نسخه‌های جاواکارت و اصطلاحات

در قسمت های پیشین با ساختار کلّی جاواکارت و مفاهیم ابتدایی ضروری آن آشنا شدیم و دانستیم که برای آغاز به نوشتن یک اپلت و تبدیل آن به فایل cap. (فایلی که روی کارت بارگذاری و نصب می‌شود) ابتدا به یک IDE (محیط برنامه نویسی)، یک مجموعه API (واسط‌ های از پیش نوشته شده‌ی JCDK , JDK)، یک ابزار برای بارگذاری و نصب اپلت و نهایتا یک ابزار برای ارتباط با آن نیاز داریم. در این قسمت مراحل نوشتن اپلت و تولید فایل cap. را در محیط Netbeans بررسی می‌کنیم.


Netbeans:

طبق آنچه پیش تر گفته شد، برنامه نویسی برای جاواکارت در محیط Netbeans، برای مواقعی مناسب از که کارت مورد نظر ما از نسخه ی جاواکارت 3.0.1 یا بالاتر پشتیبانی کند. البته لازم به ذکر است که به سبب Backward Compatible بودن استانداردهای جاواکارت، نوشتن اپلت هایی برای کارت های از ورژن پایین تر نیز در محیط Netbeans امکان پذیر است و حتی می‌توان از آنها فایل cap. تولید کرد و در Simulatorهای این IDE آن‌ها را بررسی کرد، لیکن، ورژن فایل نهایی 3.0.1 خواهد بود و قابلیت بارگذاری روی کارت پایین تر را نخواهد داشت. 

و اما روند نوشتن و تولید اپلت:

پس از اجرای Netbeans، از منوی File گزینه‌ی New Project را انتخاب می‌کتیم تا پنجره ی زیر ظاهر شود:

طبق تصویر بالا از سمت چپ گروه Java Card (چنانچه این گزینه را ندارید، باید نسخه‌ی جدیدتری از Netbeans را دریافت کنید یا پلاگین های مربوطه را دانلود و نصب کنید) و از سمت راست نوع پروژه را Classic Applet Project (جهت آشنایی به قبلی آموزش مراجعه کنید) انتخاب می‌کنیم و روی Next کلیک می‌کنیم تا پنجره‌ی زیر ظاهر شود:

در این پنجره و پنجره ی بعدی نام پروژه (نام کلاس اپلت)، نام پکیج اپلت، AID پکیج و AID اپلت را مشخص می‌کنیم. رسم بر این است که نام Package با حروف کوچک و نام Class با حروف بزرگ آغاز شود. همانطور که مشاهده می‌کنید Netbeans به صورت تصادفی یک AID شش بایتی به اپلت اختصاص داده است. فرمت این AID به صورت زیر است:
//aid/<First mandatory 5 bytes>/<Up to 11 bytes optional bytes>
به منظور راحت بودن در به خاطر سپردن AID می‌توانید مقدار دیگری مانند 010203040506 جایگزین آن کنید و پس از آن با کلیک مجدد روی Next به پنجره‌ی اختصاص AID به پکیج اپلت هدایت می‌شوید که فرمت آن به همان صورت AID مربوط به اپلت است. لازم به ذکر نیست که AID پکیج و اپلت باید با هم حداقل در یک "بیت" تفاوت داشته باشند. به صورت معنایی، اختصاص 5 بایت اول یکسان به AID اپلت و پکیج منطقی تر از متفاوت بودن آن‌ها است.
نکته: در میانه‌ی پنجره‌ی فوق دو گزینه‌ی Platforms و Cards به ترتیب نسخه‌های جاواکارت نصب شده روی Netbeans و نوع جاواکارتی که Simulator از آن استفاده می‌کند را مشاهده می‌کنیم. با احتمال بالایی، برای هرکدام تنها همین گزینه‌های مشخص شده را خواهید داشت، بنابرین در مورد آن‌ها بعدا صحبت خواهیم کرد.
پنجره‌ی نهایی که با اختصاص Package AID و کلیک روی Finish به صفحه‌ی نوشتن کد منتقل می‌شویم:

پس از کلیک روی دکمه‌ی Finish، نرم افزار Netbeans به صورت اتوماتیک سورس-کدِ ساده‌ترین اپلتِ ممکن را در اختیار شما قرار می‌دهد تا با ایجاد تغییر و توسعه‌ی آن، به صورت ساده تر اپلت مورد نظر خود را تولید کنید [سورس کد تولید شده توسط Netbeans تنها چهارچوب کلی است و هیچ فعالیتی انجام نمی‌دهد]. در مورد ساختار این سورس-کد و نحوه‌ی توسعه‌ی آن در پست های بعدی توضیحاتی داده خواهد شد، اما انتظار می‌رود خواننده خودش با مراجعه به سند Java Card API Specification دانش لازم را کسب کند.

پس از ایجاد تغییرات لازم، با استفاده از ابزارهای مشخص شده که معادل هر کدام از آنها در تَب  Run وجود دارد پروژه ی نوشته شده را Build می‌کنیم و در صورتی که قصد استفاده از Simulator را داشته باشیم با کلید روی مثلث سبز رنگ اپلت را اجرا می‌کنیم.

همانگونه که در تصویر بالا مشاهده می‌کنید، پس از کلید روی Build (چکش)، IDE با پیام BUILD SUCCESSFUL ما را از ساخت موفقیت آمیز فایل cap. آگاه می‌کند. چنانچه در کد برنامه خطایی وجود داشته باشد، عملیات Build با شکست مواجه می‌شود، ولی ساخت موفقیت آمیز فایل cap. نه به معنای این است که اپلت روی کارت به درستی کار خواهد کرد و نه حتی به معنای این است که اپلت روی کارت باگذاری و نصب خواهد شد! (در آینده با مثال هایی از هر دو مورد روبرو خواهیم شد).
قابل ذکر است که فایل cap. تولید شده، درون دایرکتوری ای با مسیر زیر قرار می‌گیرد:
Documents\NetBeansProjects\<YourProjectName>\dist\*.cap


آسمانی‌تر از آنی که کنارت باشم
حفظ کن فاصله را تا به تو عادت نکنم ...
#صنم_نافع
۱۸ آبان ۹۴ ، ۲۰:۴۸ ۰ نظر موافقین ۰ مخالفین ۰
ابراهیم قاسمی

جاواکارت-مقدماتی/5-ابزارهای مورد نیاز

قسمت قبلی: من یک جاواکار نیستم!

در این قسمت، به عنوان ادامه‌ای بر مباحث پیشین، ابزارهایی که از آغاز به نوشتن یک اپلت تا نصب آن روی کارت و ارتباط با آن نیاز است را معرفی می‌کنیم. در یک دید کلّی، ابزارهای مورد نیاز به دو دسته تقسیم می‌شوند:


1- سخت افزار: 
طبیعتا برای این که کارت بتواند داده ای از سمت رایانه دریافت کند یا داده ای به آن ارسال کند، نیازمند سخت افزاری است که "کارت خوان" (Card Reader) نامیده می‌شود. نکته‌ی جالب توجه اینجاست که دستگاهی به نام "کارت نویس" (Card Writer) نداریم و همان کارتخوان هر دو عمل نوشتن و خواندن را انجام می‌دهد. بدیهتا، کارتخوان کارت‌های تماسی با کارتخوان کارت‌های غیر تماسی متفاوت است و هنگام خرید باید این را مد نظر قرار دهیم که قرار است با چه نوع کارتی کار کنیم. ACR38 و ACR122U دو نمونه کارتخوان به ترتیب برای کارت های تماسی و کارت‌های غیرتماسی اند. همچنین ممکن است هنگام خرید کارتخوان، دستگاه هایی به نام Encoder و Decoder نیز به شما پیشنهاد شوند، که هیچ نیازی به آن ندارید. در واقع، این دو دستگاه برای ارتباط با کارت‌های مغناطیسی (کارت‌های با نوار مشکی- مانند کارت‌های بانکی) استفاده می‌شوند. کارت های مغناطیسی بر خلاف کارت‌های الکترونیکی تراشه دار، برای خواندن و نوشتن به دو دستگاه متفاوت نیاز دارند. دستگاهی که برای خواندن محتویات کارت‌های مغناطیسی استفاده می‌شود Decoder و دستگاهی که برای نوشتن روی این کارت‌ها استفاده می‌شود، Encoder نام دارد. 
شایان ذکر است که الزامی برای جدا بودن کارت‌خوان کارت های تماسی و کارت‌خوان کارت های غیر تماسی از یک دیگر وجود ندارد؛ یعنی هم کارت‌خوان هایی موجود است که فقط یک واسط را پشتیبانی می‌کنند و هم کارت‌خوان هایی وجود دارند دارای دو واسط ارتباطی اند. در مورد Encoder و Decoder هم به همین صورت است؛ یعنی هم به صورت مجزا و هم به صورت یک مجموعه‌ی واحد به فروش ‌می‌رسند.

2- نرم افزار:
بحث در مورد نرم افزارهای مورد نیاز در زمینه‌ی کارت‌های هوشمند را با دو مثال متفاوت آغاز می‌کنیم:
اگر دانشجوی الکترونیک باشید، حتما تجربه‌ی کار با میکروکنترلرها را در پرونده‌ی خود خواهید داشت. برای عملی کردن یک پروژه‌ی ساده‌ی خواندن اطلاعات یک سنسور و ارسال به پورت سریال رایانه، شما به سه مجموعه نرم افزار نیاز خواهید داشت:
  1. نرم افزاری که در آن برنامه‌ی مورد نظر را بنویسید (مانند Code vision، Bascom یا AVR Studio برای میکروهای AVR).
  2. نرم افزاری که به وسیله‌ی آن فایل ساخته شده را به میکرو منتقل کنید (مانند ProgISP یا Pony Prog).
  3. نرم افزاری که به وسیله‌ی آن داده های میکرو را از پورت سریال دریافت کنید (مانند Terminal یا Hyper Terminal یا Termite).
و اگر دانشجوی نرم افزار باشید و تجربه‌ی توسعه ی یک صفحه ی وب را داشته باشید هم می‌دانید برای انجام یک پروژه ی طراحی ساده حداقل به سه دسته ابزار زیر نیاز دارید:
  1. نرم افزاری که در آن کد برنامه‌/صفحه ی خود را می‌نویسید (مانند PHP Storm یا PyCharm).
  2. نرم افزاری که به وسیله ی آن برنامه/صفحه ی نوشته شده را به Host(فضای روی اینترنت) منتقل می‌کنید (مانند Git، FileZila یا Free FTP).
  3. نرم افزاری که با صفحه وب نوشته شده ارتباط برقرار می‌کنید (مانند Chrome, FireFox)
خب، در مورد کارت هوشمند هم [که در واقع یک میکرو کنترلر است] روال به همین صورت بالاست. یعنی شما به سه مجموعه نرم افزار مختلف برای نوشتن اپلت، بارگذاری و نصب اپلت و ارتباط با اپلت نیاز دارید. و مجددا همانطور که در مثال های بالا، نرم افزارهای چند گروه می‌توانند به صورت یک Package در یک ابزار ارائه شوند، در کارت هوشمند هم این سه دسته ابزار می‌توانند در یک بسته ارائه گردند. در زیر به صورت خلاصه نرم افزارهای موجود برای هر گروه را نام می‌بریم و در خلال پست های بعدی به صورت عملی با هر کدام آشنا خواهیم شد:

نوشتن اپلت:
بارگذاری و نصب اپلت:
ارتباط با اپلت ها:
  • OpenSCTool
  • PyAPDUTool
  • Your Reader SDK Tools
  • Python library that is named "PySCard"
  • Java package that is named "javax.smartcardio" (I think it is deprecated and is not available in JDK 1.7 and newer versions)
  • C/C++ library that is named "winscard" (:-?)

نکته: شما در هر کدام از مجموعه های بالا تنها به یک ابزار نیاز دارید و بسته به این که با کدام یک ارتباط بهتری برقرار می‌کنید، در آینده یکی را انتخاب خواهید کرد. لازم به ذکر است که همانگونه که پیشتر بیان شد ابزارهایی نیز ارائه شده اند که نرم افزارهای هر سه مجموعه را در یک Package گرد آورده اند، لکن از آنجا که غالب آنها یا به خاطر تحریم یا بنا به دلایلی از قبیل داشتن مشتری های حقوقی (و نه حقیقی) و انحصاری در دسترس نیستند یا به صورت رایگان نمی‌باشند، در این مجموعه در مورد آن ها صحبتی نخواهیم کرد (احتمالا). به عنوان مثال JCOP Tools و Gemalto Developer Suite دو نرم افزاری هستند که به ترتیب توسط شرکت NXP (یکی از بزرگترین تولیدکنندگان تراشه های کارت هوشمند) و شرکت Gemalto (یکی از بزرگترین تولیدکنندگان سیم کارت‌ها) ارائه شده اند و متشکل از تعداد زیادی پلاگین اند که روی هسته ی Eclipse سوار شده اند. 

سوال: Netbeans یا Eclipse؟
جواب: هر دو! پاسخ به این سوال ارتباط زیادی با نسخه‌ی جاواکارتی که قرار است با آن کار کنید دارد. از آنجا که Eclipse به صورت پیشفرض قابلیتی برای افزودن JCDK به آن ندارد، ما ناگریز باید از یک پلاگین استفاده کنیم (Eclipse-JCDE)  و از آنجا که این پلاگین به صورت عادی تنها با نسخه‌ی JCDK 2.2.2 و با کمی ترفند با نسخه های پایین تر از این ورژن کار می‌کند، پس برای کار با کارت‌های نسخه‌ی 2.2.2 و قبل از آن، Eclipse را انتخاب می‌کنیم. در مقابل، نرم افزار Netbeans به صورت پیشفرض با نسخه‌ی JCDK 3.0.1 Classic & Connected ارائه می‌شود و چنانچه ما برنامه ی برای نوشتن روی کارت‌های نسخه‌ی 3 و  بالاتر داریم، از این محیط برنامه نویسی استفاده خواهیم کرد.


"A ship is safe in harbor, but that’s not what ships are for." | William G.T. Shedd

۲۰ مهر ۹۴ ، ۲۲:۲۸ ۰ نظر موافقین ۱ مخالفین ۰
ابراهیم قاسمی

جاواکارت-مقدماتی/2-استانداردها + ساده سازی


استانداردها:

اما بعد! :دی 
معرفی استانداردها!
ما به صورت نا متناهی استاندارد داریم توی حوزه ی کارت های هوشمند و خصوصا سیمکارت ها. این استانداردها به سه دسته تقسیم میشن با اغماض:
  1. استانداردهایی که میان کانال ارتباطی رو از لحاظ فیزیکی بررسی میکنند که مثلا ولتاژ پایه ها باید اینقدر باشه و کلاک باید فرکانسش این باشه و .... یا فرکانس امواج الکترومغاطیسی برای کارت های غیرتماسی و .... ---> مهمترینش : ISO 7816 Part 3  برای کارت های تماسی و ISO 14443 برای کارت های غیرتماسی
  2. استانداردهایی که میگن مدیریت داخلی کارت باید به چه صورت باشه، مثلا حذف و نصب و تغییر کلیدرمزنگاری و ... به چه صورت هستش. ---> مهم ترینش : Global Platform برای هر دو نوع کارت های تماسی و غیر تماسی
  3.  استانداردهایی که (در واقع Specificationهایی که) APIهای جاواکارت، ویژگی های ویرچوآل ماشین جاواکارت و ویژگی های ران-تایم اِنویرومنت جاواکارت رو ارائه میدن. --> JCAPI Spec / JCRE Spec / JCVM Spec

سوال: جاواکارت با جاوا کارت فرق داره؟ :دی 
جواب: بله! جاواکارت زبون برنامه نویسی کارت هایی هستش که زبان "جاواکارت" رو ساپورت میکنند! و "جاوا کارت" همون کارت ها هستند. البته این نکته ای نیست که کسی رعایتش کنه، چیزی که باید مد نظرت باشه اینه که جاواکارت یه زبونه. :)

سوال: زبان های جاوا با جاواکارت خیلی تفاوت دارند؟ 
 جواب: هم بله هم خیر! خیر از این لحاظ که بالاخره ساختار زبان ها با هم یکی هستش و کسی که جاوا بلده، با یکم تقلا برنامه های زبان جاواکارت رو هم میفهمه. بله از این لحاظ که زبان جاواکارت به دو دلیل با جاوا تفاوت داره. دلیل اول این که قدرت سخت افزاری کارت ها با قدرت سخت افزار سیستم های معمولی قابل مقایسه نیست و بنابرین یه سری قابلیت ها از زبان جاوا حذف شده. مثلا جاواکارت ها فقط متغیر های نوع Byte و Short دارند (و int به صورت آپشنال)، در حالی که جاوا مغیرهای با سایز بزرگتر هم پشتیبانی میکنه. یا مثلا Clone کردن و ... از جاوا داخل جاواکارت نیستند. دلیل دوم هم این که به خاطر این که داخل کارت ما با حافظه ی  EEPROM و RAM به صورت غیر مستقیم سر و کار داریم و سرعت عملیات ها برامون مهمه، باید بتونیم حالت efficient بین تعریف کردن یه متغیر داخل یکی از این دو حافظه رو تشخیص بدیم.  (حافظه ی RAM موقتی هست،مقدار حجمش کمتره ولی سریع تره، حافظه ی EEPROM مقدار بزرگتری داره، کندتره و تعداد دفعات نوشتن و خوندن محدودی داره و تا پاک نکنیمش محتواش ماندگاره.)

 
 
بخش ساده سازی!

ببین عزیزم، جاواکارت رو به عنوان یه ساختمون n طبقه در نظر بگیر که پشت درب ورودیش یه سرایه دار نشسته و این سرایه دار از روزی که ساختمون ساخته میشه، تا روزی که ساختمون خراب میشه اونجاست و دو تا وظیفه داره! یکی این که هرکسی که میخواد بره توی ساختمون ساکن بشه یا کسی که ساکنه و میخواد از ساختمون بره بیرون، از این باید اجازه بگیره و کلا این کارای حمل و نقلش و خونه دادن بهش رو انجام میده. دوم این که اگه یه نفر از بیرون خواست چیزی بده به کسی که داخل ساختمونه و یا برعکس (ساکنین خواستند چیزی بدن به کسی که بیرون ساختمونه) این سرایه دار میشه واسطه!
حالا یعنی چی؟ 
کارت وقتی توی کارخونه ساخته میشه، یه اپلیکیشنی داخلش نصب میشه به اسم Card Manager یا Security Domain. این اپلیکیشن تا همیشه دیگه داخل کارت هست و از این به بعد اگه کسی خواست اپلِتی(به اپلیکیشن های روی کارت میگیم Applet) روی کارت نصب کنه، بایت-کدهاش رو به این میده و این براش نصب میکنه (همچنین واسه ی حذف یه روال مشابه طی میشه). همچنین اگه کسی خواست  دستوری/پیامی به یه اپلت روی کارت بفرسته، اول به این Card Managerمیگه من میخوام با فلان اپلت حرف بزنم، اگه Card Manager اجازه داد (اون اپلت وجود داشت، قفل نشده بود، رمز نمیخواست و...) اونوقت پیام رو میده باز به این کارت منیجر و کارت منیجر میده تش به اپلت و جواب رو میگیره و میده به کاربر بیرونی.



چه غم که عشق به جایی رسید یا نرسید؟

که آنچه زنده و زیباست، نفسِ این سفر است ...

#حسین منزوی

۱۲ مهر ۹۴ ، ۱۰:۴۹ ۲ نظر موافقین ۱ مخالفین ۰
ابراهیم قاسمی

جاواکارت-مقدماتی/1- مقدمه

به نام خدا
بنا بر این است که این پست، مقدمه ای باشد بر یک مجموعه‌ی چند قسمتی از پست‌هایی که با آغاز به معرفی انواع کارت‌های هوشمند و سپس تمرکز بر جاواکارت، طریقه‌ی برنامه نویسی برای این نوع کارت‌ها و ارتباط با آن‌ها را به بیان ساده به گونه ای آموزش دهد که برای همه‌ی خوانندگان قابل فهم باشد. به عنوان پیش نیاز می‌توان به آشنایی با اصول برنامه‌نویسی و اصول رمزنگاری را نام برد. از خواننده انتظار می‌رود که برای آشنایی با اصول برنامه نویسی خودش دست به کار شود، اما برای آشنایی با اصول رمزنگاری می‌توانید مجموعه‌ی دیگر پست های این وبلاگ را در این قسمت دنبال کند.


مقدمه:
کارت های الکترونیکی از چند منظر تقسیم بندی میشند که مهم ترین این تقسیم بندی ها واسط ارتباطی و تراشه ی داخلی و سیستم عامل می باشد که بدون اتلاف زمان مستقیما به بیان این دسته بندی ها می‌پردازیم:

واسط ارتباطی(Interface):
  1. کارتهای تماسی (Contact-Card) --> مانند کارت تلفن و سیم کارت ها
  2. کارتهای غیرتماسی (Contactless-Card) --> مانند کارت های مترو
  3. کارتهای دو واسطی (Dual-Interface Cards) --> کارتهای هوشمند ملی که بنا است جایگزین کارت ملی شوند، از این نوع خواهند بود.
سوال: کارت های غیرتماسی چگونه کار میکنند و با کارتخوان ارتباط برقرار میکنند؟ 
جواب : دور تا دور داخل این بدنه ی لاستیکی کارت یک سیم پیچ قرار گرفته است و  هنگامی که کارت به محدوده ای از فضای اطراف کارت خوان نزدیک می‌شود به واسطه ی میدان مغناطیسی کارتخوان، درون این سیم پیچ ولتاژی القاء شده و انرژی لازم برای تراشه ی کارت را فراهم می‌کند. داده هایی که قرار است تبادل شوند، سوار بر یک سیگنال شده و به کارت/کارتخوان ارسال می‌شوند. البته ناگفته نماند که کارتهایی نیز وجود دارند که به صورت داخلی نیز دارای یک باتری می‌باشند، ولی در حال حاضر هیچ نمونه ی داخلی ای از این کارت‌ها نداریم و کاربردی هم ندارند. کارت های غیرتماسی از لحاظ فرکانس کاری و بُرد به انواع مختلفی تقسیم می‌شوند ولی از آنجا که اطلاع از این جزئیات در بحث‌های آتی ما تاثیرات چندانی ندارد، صحبت در این زمینه را به آینده موکول می‌کنیم.

سوال: Combo Card و Hybrid Cards؟ 
 جواب: کارت هایی که دارای دو واسط اند (= Dual Interface) به دو صورت می‌توانند ساخته شده باشند. حالت اول این که داخل کارت تنها یک تراشه وجود داشته باشد و هر دو واسط با آن ارتباط برقرار کنند، و حالت دوم این که داخل کارت دو تراشه ی مجزا وجود داشته باشد و هر واسط مستقلا تنها با یکی از آن‌ها دو تا مرتبط باشد (مشابه این که دو کارت که یکی تماسی و یکی غیرتماسی است را در یک پکیج قرار داده باشیم). 
 به یکی از این حالات Combo و به حالت دیگر Hybrid می‌گویند.

 سوال: کارت‌ها بانکی و کارت های بارکدی در کدام گروه قرار می‌گیرند؟ 
 جواب: کارت های بانکی یا مغناطیسی یا Magnetic Stripe یا اصطلاحا MagStripe و کارت های بارکدی اصولا نباید جزو کارت های الکترونیکی حساب شوند، ولی از آنجا که برای ارتباط با آنها سنسور کارتخوان مربوطه باید به صورت مستقیم و بدون واسطه با نوار مغناطیسی/خطوط بارکد ارتباط برقرار کند تا بتواند محتویات کارت رو قرائت کند، گروهی آن ها را جزو کارت های تماسی به حساب می‌آورند.

تراشه ی داخلی (Chip):
  1. کارت های حافظه یا Memory Cards یا Dump Cards --> مانند کارت تلفن و کارت مترو
  2. کارت های هوشند یا Smart Cards یا Cards with uProcessor --> مانند کارت هوشمند ملی یا سیمکارت ها.
سوال: یعنی کارت تلفن و کارت مترو به جز واسط ارتباطی، از لحاظ تراشه داخلی تفاوت دیگری ندارند؟ 
جواب: چرا! کارت های حافظه، به چهار دسته تقسیم می‌شوند، گروه اول تنها یک EEPROM ساده بدون هیچ مکانیزم امنیتی است (این نوع کارت ها دیگر تولید نمی‌شوند و تنها به صورت یک تراشه‌ی حافظه از آن ها بعضا روی مدارهای الکتریکی استفاده می‌شود). گروه دوم متشکل از یک حافظه و یه قسمت منطقی امنیتی است که به عنوان مثال اجازه نمی‌دهد محتویات حافظه از صفر به یک تغییر کنند و تنها اجازه ی تبدیل مقادیر یک به صفر می‌دهند، و یا این که به صورت یه شمارنده تنها امکان تعداد خاصی فرایند را برای کاربر فراهم می‌کنند (کارت های تلفن قدیم به احتمال زیاد از این مدل بوده اند). گروه سوم از یک حافظه و  یه قسمت منطقی امنیتی پیشرفته تر است که تنها با داشتن یه رمز سه الی پنج رقمی اجازه ی تغییر محتویات حافظه را فراهم می‌کنند (مانند کارت های تلفن فعلی- SLE4442/52). و در نهایت گروه چهارم به صورت یه حافظه و مکانیزم امنیتی پیشرفته است که هم ارتباط بین کارت و کارت خوان را رمز می‌کنند و هم اجازه ی تغییر یا خواندن محتویات حافظه تنها در گرو داشتن یه سری کلید احراز هویت به کاربر می‌دهند(مانند کارت های مترو).  
 

سیستم عامل (OS): 
* این تقسیم بندی همان طور که از اسمش مشخص است، خاص کارت های هوشمند می باشد.
  1. Java Cards (هدف این مجموعه پست ها)
  2. MultOS (نسبت به جاواکارت قیمت بالاتر و امنیت بالاتری دارد، دانش توسعه‌ی آن خیلی انحصاری است، دارای Community فعالی نیست، زبان برنامه نویسی اصلی آن C و Assembly است ولی کامپایلر بیسیک و جاوا هم  برای آن ساخته شده است و نمونه‌ی داخلی از آن نداریم).
  3. Windows Cards (مرسوم نیست).
  4. Native Cards (سایر کارت های هوشمند بدون سیستم عامل).

هرکه دلارام دید
از دلش آرام رفت ..
#حافظ دوست داشتنی
۰۷ مهر ۹۴ ، ۲۱:۱۵ ۱ نظر موافقین ۲ مخالفین ۰
ابراهیم قاسمی