صد رازِ نهان

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

جاواکارت-مقدماتی/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 (سایر کارت های هوشمند بدون سیستم عامل).

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

اندر احوالات OpenSource

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

بگذریم، هدف از نوشتن این پست، همونطور که از تایتل بر می‌آد، تعریف و تمجید و توصیه به اخلاق OpenSource هست. حقیقت امر این که توی چند ماه اخیر که با ام‌تی‌پیِ دوست داشتنی و سینای عزیز آشنا شدم، نگرشی که به آموختن و اندوختنِ بی چشم‌داشت داشتم اونقدر تشدید شده که حاضر شدم  تصمیم بگیرم که به خاطرش هر ماه چند ساعت وقت بذارم و مطلب هایی که جسته گریخته یاد میگیرم و گرفتم رو منسجم کنم و به صورت پابلیک منتشر کنم و نکته ی مهم این که از تک تک ثانیه های این کار، لذت می برم.


حالا چرا OpenSource و چرا لذت؟ 

راستش جواب هاش زیاده، ولی چیزی که من رو تشویق میکنه این هاست:

یک: ما آدم ها، خواه ناخواه، یه میل شدید درونی به تاثیر گذاشتن و تغییر ایجاد کردن داریم. هیچ آدمی ذاتا نمیخواد به دنیا بیاد که یه گوشه ای زندگی خودش رو داشته باشه و بعد چند سال هم یدونه "گودبای" بگه و بره. در واقع هرچقدر هم این زندگی منزوی، مرفهانه باشه، اون تشنگی ایجاد تغییر، خودش رو یه جایی نشون میده و اون سوال "وات هَو یو دُون این یور لایف؟" اگه جواب قانع کننده ای براش نداشته باشی، آزارت میده.

میگی اینطور نیست؟

خب، قبول. چشم هات رو ببند، سال های آخر عمرت رو تصور کن، چین و چروک روی صورتت رو حس کن. خب، الان نه زیبایی گذشته هست، نه قدرت گذشته هست، نه خیلی از دوست هایی که داشتی. یکم به گذشته فکر کن، یه مصرف کننده ی صرف بودن چه حسی داره؟ یه کارمند ساده، یه برنامه نویس ساده، یه طراح ساده یا .... . تو فقط کارهایی رو که بهت گفتند انجام دادی و اون کارها هم یه گوشه ای از زمان زیر خاکستر فراموشی جذابیتش رو باخت. هووممم! چه حسی داره؟ :) از خودت بپرس آیا این خونه ی پر زرق و برق و این ماشین لوکسی که دم درب هست و این حقوق چند هزار دلاری، تهِ قدرت من بود داخل دنیا؟ اگه جوابت مثبته، کیپ گوئینگ! به هر حال، جواب من منفی بود. کارهای بزرگ و تاثیرهای بزرگ چیزی هست که از نظر من ارزش داره. و همین شاید دلیل تنفری هستش که رفته رفته توی شاخ و برگ علاقه‌م به علوم مهندسی ریشه میدوونه ...

دو: دنیایی رو تصور کن که هیچ کتابی داخلش نوشته نمیشه، هیچ کسی دانسته هاش رو ارائه نمیده و هیچ علمی منتشر نمیشه! آینده ای براش میبینی؟ حقیقت مسلّمی که با یه ذره تفکر هر آدمی بهش میرسه اینه که با یاد دادن سرعت آموختن و تثبیت دانسته ها خیلی تشدید میشه. 

سه: .... (پرایویت! :دی)


با دلارامی مرا خاطر خوش است

کز دلم یک‌باره برد آرام را

#حافظ دوست داشتنی

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

همان نتیجه‌ی همیشگی

اصلا، هیچ عاقلی به خاطر باران دنبال ابر می‌دود؟ یا مثلا داد و بی‌داد راه می‌اندازد که وای، ابر رفت، باران رفت و فلان و بهمان ؟!

دیر یا زود دارد، سوخت و سوز هم دارد؛ بدون تعارف و پنهان کاری تا بیایی به خودت بیایی و به یک نتیجه ی درست و حسابی برسی یک لذت و صفای خیلی خاصی هم دارد، اما بالاخره آدم یک جایی سرش به سنگ می‌خورد، یک جایی می‌فهمد مشکل کار کجاست، از کجا لنگ می‌خورد. 

می‌فهمد که آدم‌ها باید حکم ابر را داشته باشند برایش!

همین ابرهای یک شب و دو شب ماندگار که از بعضی یک باران دلچسب عایدت می‌شود و زمین شسته و تمیز و یک رایحه‌ی دلنشین از بوی گـُل و گـِل، از بعضی هم توفان و تگرگ و خرابی، و از غالب دیگرشان هم نهایتا یک سایه!

بعد می‌فهمد آمدن و رفتن این ابرها نه دست خودت است، نه دست ابر، دست یک نسیم است! یک نسیم که اصلا نمی‌بینی اش، فقط گاهی وقت ها ممکن است وجودش را حس کنی!

بعد می‌فهمد که باید تا وقتی ابر باران برایش به ارمغان می‌آورد، لذت ببرد و زندگی کند، وقتی هم رفت، بگذارد برود، سعی نکند زندگی اش را رها کند برود دنبال ابر، چون بی فایده است، حالا شاید یک روزی دوباره نسیم مسیرش را عوض کند و باز گردد، یا یک ابر دیگر بیاورد. 

و در واقع می‌فهمد به هیچ ابری نباید دل ببندد، هیچ ابری خاص نیست؛ این فقط احساسش است که ممکن است خیلی خاص باشد ...

اصلا خیلی خوب که نگاه کند می‌فهمد که همه‌ی جذابیت این ابرها برای این است که آدم چشمش آسمان را هم ببیند گاهی!

و نهایتا آدم فقط باید تلاش کند بعد رفتن ابر، نگاهش را از آسمان برنگرداند و آن طراوت و شستگی را حفظ کند، 

حفظ کند تا شاید ابری دیگر و ارمغانی دیگر ...


العبد یدبّر و الله یقدّر 
و الامور بالتقدیر، لا بالتدبیر


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