چکیده
رمزنگاری در کارتهای هوشمند نیازی است که به هیچ وجه قابل انکار نیست. اما از بین روشهای مختلفی که در رمزنگاری وجود دارد کدامیک برای استفاده در کارتهای هوشمند مناسبتر است؟ در این مقاله ابتدا به بررسی سخت افزار کارتهای هوشمند پرداختهایم و در نهایت به دلایل برتری استفاده از رمزنگاری خمهای بیضوی در کارتهای هوشمند اشاره کردهایم.
معماری کارت هوشمند
کارتهای هوشمند در شکلهای گوناگون وجود دارند. کارتهای هوشمند از دیدگاه نحوه عملکرد به دو گروه کارتهای حافظه دار و کارتهای دارای پردازنده تقسیم میشوند. کارتهای حافظه دار شامل حافظه غیر فرار [۱]EEPROM هستند. این حافظه همانند دیگر وسایل ذخیره اطلاعات دارای ساختار فایل بوده و دسترسی به اطلاعات آن معمولاً از طریق یک کد عددی به اسم پین[۲] ممکن است. چون این حافظه غیر فرار است پس از خارج کردن کارت از کارت خوان اطلاعات در کارت باقی میماند. از آنجا که این کارتها فاقد توان رمزنگاری هستند برای کاربردهایی که حساسیت زیادی ندارند به کار میروند. کارتهای دارای پردازنده مشابه یک کامپیوتر کامل هستند. در این مقاله ما درباره کارتهای دارای پردازنده صحبت میکنیم. اما از دیدگاه نحوه ارتباط با کارت خوان، کارتها به دو گروه کارتهای تماسی[۳] و کارتهای بدون تماس[۴] تقسیم میشوند. دسته اول از روی شکل ظاهری تراشه طلایی رنگ کارت که قابل مشاهده است قابل تشخیص است اما در دسته دوم تراشه کارت میتواند درون کارت اعتباری یا کلید یا یک برچسب و … پنهان شده باشد. نمای بیرونی تراشه کارت در شکل آمده است:
اتصالات VCC و Ground الکتریسیته لازم را برای پردازنده از منبع خارجی تأمین میکنند. با استفاده از Reset همه پردازشهای کارت از نو انجام میشوند. اتصال Clock سیگنال ساعت منبع خارجی را به پردازنده اعمال میکند تا پردازشهای پردازنده هماهنگ شود. VPP ولتاژ لازم را برای برنامه نویسی EEPROM فراهم میکند و در پایان I/O یک کانال سریال دوطرفه را برای ارتباطات بین کارت هوشمند و پایانه های کنترل کارت فراهم میکند.
کارتهای بدون تماس با استفاده از الکتریسیته حاصل از القای مغناطیسی توان لازم برای پردازش را به دست میآورند ودر شکل امده است.
کارتهای هوشمند در هر شکلی که باشند کارکردشان در یک تراشه ساده فراهم میشود. بر خلاف تراشه های مشابه، تراشه کارت هوشمند در واقع یک کامپیوتر کامل است. شکل ۳ نمایی اولیه از تراشه کارت هوشمند است.

تراشه کارت هوشمند از اجزای زیر تشکیل شده است:
پردازنده مرکزی[۵] :قلب تراشه است که همه کار محاسباتی و مبادله دادهها توسط آن انجام میشود. بعضی وقتها یک کمک پردازنده رمزنگاری هم وجود دارد..
بیشتر پردازنده های کارت با نوسان[۶] ساعت ۳٫۵۷ مگاهرتز کار میکنند.
مدار منطقی آزمایش[۷] :بخشی که فقط در طول فرآیند تولید کارت برای آزمایش مدارهای داخلی و جلوگیری از خطاهای خط تولید بکار میرود.
مدار منطقی امنیت[۸] :مداری که دائماً شرایط محیطی را که میتوانند امنیت کارت را به خطر بیندازند بررسی میکند.
رابط ورود-خروج[۹] :با استفاده از پروتکل سریال دستورات خارجی را دریافت کرده و پاسخها را ارسال میکند.
حافظه فقط خواندنی[۱۰] :حافظه دائمی تراشه که شامل بخشهایی از سیستم عامل و برنامه های تست کارت است. اندازه این حافظه معمولاً ۳۲ کیلو بایت است.
حافظه با دسترسی تصادفی[۱۱] :حافظه موقت کارت است که برای ذخیره موقت دادهها مانند داد های هنگام مبادله اطلاعات، کلید جلسه[۱۲]، متغیرهای داخلی و داده های پشته بکار میرود. اندازه این حافظه معمولاً ۱ کیلو بایت است.
EEPROM:حافظه غیر فرار قابل بهروزرسانی که برای ذخیره کردن داده های برنامه های کاربردی مانند کلیدها، پینها، شماره تلفنها و یا حتی سیستم عامل به کار میرود.
گذرگاه داده[۱۳] :یک کانال ارتباطی که همه دادهها بین اجزای مختلف تراشه از این کانال عبور میکنند.
معماری نرم افزار کارت هوشمند:
کارتهای اولیه از یک مدل یکپارچه نرم افزاری استفاده میکردند که سیستم عامل و برنامه های کاربردی در هم تنیده شده بودند. کارتهای جدیدتر از طراحیهای پیمانه ای و جدا سازی وظایف برنامهها از همدیگر بهره میبرند. یک سیستم عامل متداول کارت هوشمند کارت جاوا[۱۴] نام دارد که از مفاهیم اثبات شده امنیتی زبان جاوا استفاده میکند. این سیستم عامل اجازه طراحی برنامه های انعطاف پذیر را میدهد. برنامهها میتوانند بعد از تولید کارت، کد نویسی شده و نصب شوند و حتی بعداً تغییر پیدا بکنند. البته در بعضی از انواع کارتها به دلیل مسائل امنیتی امکان تغییر برنامه را بعد از ساخت کارت نمیدهند.
سیستم عاملهای دیگری هم غیر از جاوا برای کارتهای هوشمند ایجاد شدهاند. از جمله میتوان به MULTOS و ویندوز اشاره کرد. علاوه بر این رابطهای برنامه نویسی[۱۵] که در طرف کارت هستند رابطهایی هم در طرف کارت خوان وجود دارند همانند OpenCard Framework و GlobalPlatform .
همه ارتباطات کارت با دنیای بیرون از طریق پردازنده و با مدیریت سیستم عامل انجام میشود. از آنجا که شرایط و مجوزهای دسترسی به کارت توسط سیستم عامل کنترل میشود در نتیجه سیستم عامل مسئول امنیت اطلاعات کارت است. با افزوده شدن رمزنگاری به کارتهای هوشمند میبایست محاسبات پیچیده ریاضی در کارتها انجام میشد لذا بخشهای تسریع کننده [۱۶]رمزنگاری به پردازنده اضافه شدهاند. این نوع از کارتها به کارتهای رمزی[۱۷] موسوم شدهاند و گرانتر از کارتهای معمولی هستند. اگر چه اقدامات رمزنگاری میتواند به صورت سخت افزاری در کارت تعبیه شود اما همیشه برنامه ای نرم افزاری برای کنترل اجرا در حافظه ثابت یا غیر فرار کارت ذخیره شده است.
ساختار دادهها درون کارت به صورت تودرتو بوده و EEPROM همانند یک دیسک سخت اجازه ساخت پوشه و فایل برای ذخیره دادهها را به کاربر میدهد.
ترمینالها یا همان کارت خوانها از طریق دستوراتی با کارت هوشمند ارتباط برقرار میکنند. شکل ۴ یک ساختار برای دستور را نشان میدهد.

ساختار دستور :دستورات از ۵ بایت رأس دستور و دنباله ای متغیر از دادهها تشکیل میشوند. CLA طبقه دستور و INS خود دستور را مشخص میکند. P1 و P2 پارامترهای دستور را مشخص میکنند و P3 طول داده های دستور یا طول پاسخ درخواستی را مشخص میکند.
کارتهای هوشمند شرایطی را برای دسترسی به اطلاعات خود اعمال میکنند تا از محتویات داده های موجود در فایلها محافظت بکنند. کاربران فقط در شرایطی میتوانند به نوشتن یا خواندن اطلاعات کارت اقدام کنند که شرایط دسترسی و مجوزهای لازم را داشته باشند.
تهدیدات امنیتی کارتهای هوشمند:
به دلایل مختلف کارتهای هوشمند اهدافی متداول برای مهاجمین هستند:
-
حملات موفق اجازه کلاه برداری را میدهند و با ارزش هستند.مهاجمین حرفه ای میتوانند از این طریق کار و کاسبی خوبی برای خود راه بیندازند.
-
کارتهای هوشمند ارزان هستند و به راحتی میتوان آنها را تهیه کرد. مهاجمین میتوانند به راحتی نمونههایی برای تمرین کردن تهیه کنند.
-
کارتهای هوشمند به راحتی حمل میشوند و مهاجمین میتوانند به راحتی آنها را به منطقه عملیاتی خود منتقل کرده و شرایط را کنترل کنند.
سازندگان کارت به خوبی از این تهدیدات مطلعند و توجهی ویژه به افزایش امنیت محصولات خود دارند. در عمل هیچگاه امنیت صد در صد قابل دسترسی نیست و نبرد سازندگان کارت و مهاجمین در عرصه امنیت کارت ادامه خواهد داشت.
حملات به ۳ گروه تقسیم میشوند:
-
حملات منطقی: این حملات از خطاهای محتمل در برنامه نویسی کارت بهره میبرند.
-
حملات فیزیکی: این حملات با تجزیه و تحلیل سخت افزار کارت و تغییر یا کپی برداری کارت انجام میشوند.
-
جملات کانال جانبی[۱۸] : این حملات از آثار فیزیکی جانبی استفاده از کارت بهره برداری میکنند همانند برق مصرفی حین استفاده از کارت یا تشعشعات مغناطیسی و … .
رمزنگاری در کارتهای هوشمند:
یکی از راههای افزایش امنیت کارتها استفاده از رمزنگاری است. فایده این کار در این است که اگر مهاجمی به هر روش بتواند به داده های درون کارت یا دادهها هنگام مبادله با دستگاههای واسط دسترسی پیدا کند با اطلاعاتی نامشخص مواجه گردد. رمزنگاری به دو شاخه اصلی متقارن[۱۹] و نامتقارن تقسیم میشود. یکی از قویترین روشهای رمزنگاری متقارن روش AES است. رمزنگاری در این روش را میتوان به زیر بخشهای ۸ بیتی تقسیم کرد که آنرا مناسب استفاده در کارتهای هوشمند میکند. اما روشهای متقارن با چالش عمده ای به نام کلید مشترک روبه رو هستند. برای حل این مشکل میتوان از روش مبادله کلید دیفی[۲۰]-هلمن[۲۱] استفاده کرد. اما راه حلهای کارامدتری با عنوان روشهای کلید عمومی[۲۲] وجود دارند. در این روشها کلید رمزگذاری از کلید رمزگشایی جدا است در نتیجه نیازی به مبادله کلید مشترک وجود ندارد.
از میان روشهای کلید عمومی دو روش RSA و روش خمهای بیضوی متداولتر هستند که در ادامه به مقایسه بین این دو روش خواهیم پرداخت.
روش RSA مبتنی بر سختی تجزیه عدد به ریشه های اول آن است. اگر روزی روشی برای تجزیه اعداد به عوامل اول پیدا شود یا سرعت کامپیوترها برای پردازش افزایش یابد و بتوان روش جستجوی فراگیر را سریعتر انجام داد RSA به خطر خواهد افتاد. در مورد خمهای بیضوی مجموعه ای نامتناهی از انواع خمهای بیضوی را میتوان برای رمزنگاری استفاده کرد. این امر شکستن رمز را در این روش بسیار مشکل میکند. طبق آزمایشات انجام شده مشخص گردیده است که روش خمهای بیضوی با طول کلید ۱۶۰ بیت استحکامی برابر با روش RSA با طول کلید ۱۰۲۴ بیت دارد. علاوه بر این روش خمهای بیضوی برای محاسبه نیاز به حافظه اضافی کمتری دارد.
طول کلید کوتاه تر نیاز به حافظه را کاهش میدهد. در نتیجه داده های کمتری بین کارت و برنامه کاربردی جابهجا میشوند. بنابراین زمان کمتری هم برای انتقال دادهها مصرف میشود و همین کاهش در زمان خود باعث جلوگیری از حملاتی مانند حمله کانال جانبی میشود.

روشهای دیگر به دلیل نیاز بیشتر به انجام محاسبات معمولاًَ به پردازنده کمکی نیاز دارند که باعث افزایش هزینه تولید کارت میشود. روزانه میلیونها کارت هوشمند تولید میشود که کاهش جزئی در هزینه تولید منجر به افزایش سوددهی برای تولیدکنندگان میشود.
تولید کلید کوتاهتر مزیت دیگری هم برای روش خمهای بیضوی دارد. در بعضی از کاربردها نیاز به تولید کلید خصوصی تصادفی وجود دارد که در روشهای دیگر تولید کلید کار دشواری است. اما در روش خمهای بیضوی تولید کلید به آسانی امکان پذیر است و زمان زیادی برای تولید کلید لازم نیست.
فکر میکنم دلایل کافی برای استفاده از روش خم بیضوی بیان شد اما اکنون ببینیم کدام خمها برای استفاده در کارتهای هوشمند مناسبتر هستند؟
عموماًَ خمهای بیضوی بر روی میدانهای دودویی GF(2k) رجحان بیشتری نسبت به میدان اعداد اول GF(p) دارند. دلیل این امر این است که در میدان اعداد اول نیاز به محاسبات پیمانه ای وجود دارد که میتواند منجر به استفاده از پردازنده کمکی برای محاسبه شود. در نظر داشته باشید که پردازنده کمکی ۲۰ تا ۳۰ درصد بر هزینه تولید کارت میافزاید. در محاسبات بر روی خمهای بیضوی در کارتهای هوشمند بهتر است که از تکنیکهای فشرده سازی نقاط واقع بر خم هم استفاده بشود. این کار نیاز به حافظه را باز هم کاهش میدهد.
در پایان لازم است به این نکته مهم هم اشاره بکنیم که به دلیل پیچیدگی ریاضیات مورد نیاز در خمهای بیضوی مطالعه در این زمینه همچنان ادامه دارد که میتواند به قدرت بیشتر این روش و یا حتی فروپاشی آن منجر گردد.
مراجع
-
David B Everett, Smart Card Tutorial
-
Tolga KILIÇLI, Smart Card HOWTO, http://www.tldp.org
-
István Zsolt BERTA and Zoltán Ádám MANN, IMPLEMENTING ELLIPTIC CURVE CRYPTOGRAPHY ON PC AND SMART CARD, PERIODICA POLYTECHNICA SER. EL. ENG. VOL. 46, NO. 1–۲, PP. 47–۷۳ (۲۰۰۲)
-
Kamilah Abdullah, Comparison between the RSA cryptosystem and elliptic curve cryptography, A thesis for Master of Science at the University of Waikato
-
AHMAD KHALED M. AL-KAYALI, Elliptic Curve Cryptography and Smart Cards
-
Henna Pietilainen, Elliptic curve cryptography on smart cards
[۱] Electrically Erasable Programmable Read-Only Memory
[۲] PIN (Personal Identification Number)
[۳] Contact Card
[۴] Contact-less card
[۵] CPU
[۶] Frequency
[۷] Test Logic
[۸] Security Logic
[۹] I/O Interface
[۱۰] ROM
[۱۱] RAM
[۱۲] Session Key
[۱۳] Data Bus
[۱۴] Java Card
[۱۵] API
[۱۶] Accelerator
[۱۷] Crypto-Cards
[۱۸] Side Channel Attack
[۱۹] Symmetric
[۲۰] Diffie
[۲۱] Hellman
[۲۲] Public key
[/vc_column_text][vc_column_text]
سلام لینک دریافت موحود نیست چرا ؟
اقا فوق العاده سایتتون مفیده تشکر
ممنون خوب بود
خواهش میکنیم، خوشحالیم که به درد شما خورد.
سلام
متن خیلی فوق العاده و مفید، فقط من یه سوال داشتم
مراحل سازنده کارت با کدام زبان برنامه نویسی میشوند؟؟
عالی