توکن امنیتی نت بد SecurityToken

PKCS#11

    در مبحث رمزنگاری، PKCS#11 یکی از اعضای خانواده استانداردهای رمزنگاری کلید عمومی  است که یک واسط برنامه نویسی  (API) مستقل از بستر برای توکن های رمزنگاری و کارت های هوشمند (Smart Cards) در اختیار قرار می دهد. نام دیگر این استاندارد، واسط توکن های رمزنگاری (Cryptographic Token Interface) است که به اختصار بدان کریپتوکی (Cryptoki) نیز گفته می شود.
    این استاندارد بسیار جامع، کامل و دقیق تدوین گشته و تمامی امکانات موردنیاز جهت ایجاد، ذخیره، تغییر، حذف و مدیریت انواع کلیدها و گواهی ها (Certificates) را ارائه می کند. همین ویژگی باعث شده است تا بیشتر مراکز صدور گواهی از این استاندارد به منظور اختصاص کلیدهای کاربران استفاده کنند. همچنین نرم افزارهای کاربردی بسیار زیادی از PKCS#11 پیشتیبانی به عمل می آورند که در واقع باعث سهولت استفاده و گسترش کاربرد آن شده است (استاندارد مشابه دیگری به نام CAPI توسط شرکت مایکروسافت ارائه شده است که بیشتر در برنامه های کاربردی تحت ویندوز، خصوصا نرم افزارهای تولیدی خود شرکت مایکروسافت کاربرد دارد، با اینحال خود آن نرم افزارها نیز معمولا با PKCS#11 سازگارند).
    اولین نسخه کریپتوکی در سال 1995 عرضه شد و از آن روز تا کنون چهارنسخه متفاوت 1.0، 2.01، 2.10 و 2.20 به همراه سه اصلاحیه از آن منتشر گردیده است.
    انعطاف پذیری کریپتوکی این امکان را برای توسعه دهندگان فراهم کرده است که بتوانند تنها با پیاده سازی بخش های کوچکی از این استاندارد توکن های خود را روانه بازار کنند، با اینحال ما در محصولات تولیدی خود این استاندارد را به صورت کامل پیاده سازی کرده ایم. پشتیبانی از کتابخانه پی کی سی اس شماره 11 باعث می شود بتوان ماژول امنیتی رمزنگاری را به سادگی در تمامی برنامه های کاربردی زیرساخت کلید عمومی به کار گرفت. البته در کنار این واسط استاندارد، هر تولید کننده می تواند ویژگی ها و کارکردهای مدنظرش را به محصول تولیدی خود بیفزاید. شمای کلی مدل کریپتوکی را در شکل زیر مشاهده می کنید.

Cryptoki Architecture

    در مدل نمایش داده شده، برنامه های کاربردی در بالاترین سطح قرار داشته و از طریق لایه های واسطی که ممکن است میان آن ها با کتابخانه ی کریپتوکی وجود داشته باشد، با آن در ارتباطند.
همانطور که در شکل فوق مشاهده می کنید، بیش از یک برنامه کاربردی در هر زمان امکان ارتباط با واسط کریپتوکی را دارست (هر وهله از واسط نیازمند یک توکن جداگانه است) و تمامی این ارتباطات از طریق یک هماهنگ کننده با لایه های زیرین در ارتباطند.
    در کریپتوکی با یک مفهوم انتزاعی به نام اسلات  روبرو هستیم. ارتباط با هر توکن از طریق یک اسلات برقرار می شود (هر توکن درون یک اسلات قرار می گیرند و ممکن است قابل جداسازی بوده  و یا به صورت ثابت همراه اسلات عرضه شود). در دنیای واقعی می توان این اسلات را به صورت دستگاه کارت خوانی  درنظر گرفت که کارت هوشمند درون آن قرار می گیرد و از طریق یک استاندارد مشخص (مانند ISO 8716) با دستگاه ارتباط برقرار کرده و دستورات موردنظر را اجرا می کند. در این حالت کارت قابل جداسازی از دستگاه کارت خوان می باشد و درنتیجه امکان مواجهه با اسلات خالی وجود خواهد داشت. حالت دیگر که شاید از موردقبلی پرکاربردتر نیز باشد، آن است که اسلات و توکن به صورت مجتمع و به شکل یک دستگاه با اتصال USB که استاندارد کریپتوکی را به طور درونی پیاده سازی می کند، عرضه شود. در این حالت توکن از اسلات قابل تفکیک نیست (در واقع آنچه ما به عنوان توکن رمزنگاری کریپتوکی می شناسیم شامل یک اسلات و توکن درون آن است). به هر حال ارتباط کریپتوکی با توکن از طریق مفهوم انتزاعی اسلات صورت می پذیرد.
    کریپتوکی شامل روش هایی برای مدیریت داده هائیست که از آن ها تحت عنوان شیئ  یاد می کند. در واقع در اینجا ما با تعداد زیادی شیئ داده ای و متدهایی جهت ایجاد، ویرایش، حذف، کنترل دسترسی و در یک کلام مدیریت آن ها روبرو هستیم. ساختار اشیای کریپتوکی به صورت انتزاعی در شکل زیر نمایش داده شده است.

سلسله مراتب اشیا در کریپتوکی

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

  • Normal User : کاربر عادی که پس از ورود به توکن (با استفاده از یک پین کد) امکان دسترسی به اشیای خصوصی  را خواهد داشت.
  • Security Officer یا SO : کاربر مسئول امنیتی که وظیفه ست کردن تنظیمات یا اصطلاحا شروع  توکن و اختصاص یا تغییر رمز کاربر عادی را بر عهده دارد.

    دسترسی هر کاربر به توکن در قالب یک نشست  صورت می پذیرد. کاربر در ابتدای هر نشست می توان نقش خود و نیز نوع نشست (یکی از انواع فقط خواندنی یا RO و خواندنی و نوشتی یا RW) را انتخاب نموده و با وارد نمودن پیدکد خود، نشست موردنظر را آغاز نماید. در صورت عدم ورود با پین کد مناسب، نشست به عنوان یک نشست عمومی درنظر گرفته خواهد شد. نمودار حالت نشست فقط خواندنی در شکل زیر نمایش داده شده است.


    در شکل فوق دو حالت R/O Public Session و R/O User Functions مشخص شده است که حالت اول قبل از ورود کاربر و حالت دوم پس از ورود می باشد. تفاوت آن حالت ها نیز در آن است که تا پیش از ورود کاربر، وی تنها به اشیای عمومی ذخیره شده بر روی توکن دسترسی خواهد داشت، اما پس از ورود می تواند اشیای خصوصی نیز دسترسی داشته باشد (حافظه غیرفرار  هر توکن به هنگام شروع آن، به دو بخش حافظه عمومی  و حافظه خصوصی  تقسیم می شود که اشیای عمومی بر روی حافظه عمومی و اشیای خصوصی بر روی حافظه خصوصی ذخیره خواهند شد). بدیهی است که در هر دو حالت دسترسی به صورت فقط خواندنی می باشد.

    اما نشست های خواندنی نوشتنی آن دسته از نشست هایی هستند که امکان ویرایش اشیا را (علاوه بر خواندن آن ها) فراهم می کنند.

نمودار حالت نشست خواندنی نوشتنی در کریپتوکی

    همانگونه که در شکل بالا ملاحظه می کنید، سه حالت برای نشست های خواندنی نوشتنی متصور است: اول حالت عمومی است که همانگونه که پیشتر نیز اشاره شد، در این حالت تنها امکان دسترسی به حافظه عمومی توکن میسر است. حالت دوم حالتی است که کاربر عادی وارد شده باشد که در آن حالت این کاربر به توابع خاص خود دسترسی خواهد داشت و نهایتا سومین حالت وقتی است که مدیر امنیتی با پین کد خود وارد سیستم شود که در این صورت وی به توابع خاص خود (که کاربر عادی اجازه اجرای آن ها را ندارد) دسترسی خواهد داشت.
    در کل بحث مدیریت نشست ها در کریپتوکی بسیار پیچیده و دشوار بوده و نیازمند دقت و ظرافت بالائیست که به لطف تعاریف واضح و شفاف و مثال های ارائه شده در استاندارد، در این پروژه به خوبی پیاده سازی شده اند.
    اما پس از بررسی حالت نشست های موجود در کریپتوکی نوبت به بررسی اصلی ترین بخش آن که همان توابع رمزنگاری و عملیاتی ارائه شده توسط استاندارد می باشند، می رسد. توابع موجود در کریپتوکی به 14 دسته کلی تقسیم بندی می شوند:


•    توابع همه منظوره (General Purpose Functions)
•    توابع مدیریت اسلات و توکن (Slot & Token Management Functions)
•    توابع مدیریت نشست (Session Management Functions)
•    توابع مدیریت اشیا (Object Management Functions)
•    توابع رمزگذاری (Encryption Functions)
•    توابع رمزگشایی (Decryption Functions)
•    توابع درهم سازی (Message Digesting Functions)
•    توابع امضا و احراز هویت پیام (Signing  & MACing Functions)
•    توابع بررسی صحت امضا و احراز هویت پیام (Functions for verifying signatures & MACs)
•    توابع رمزنگاری دومنظوره (Dual-purpose Functions)
•    توابع مدیریت کلید (Key Management Functions)
•    توابع تولید عدد تصادفی (Random Number Generation Functions)
•    توابع مدیریت توابع همروند (Parallel Function Management Functions)
•    توابع کال بَک (Callback Functions)

    هر دسته از توابع فوق کارکرد متفاوتی دارند، برخی از آن ها مانند توابع همه منظوره بایست حتما پیاده سازی شوند و پیاده سازی برخی دیگر مانند توابع کال بَک کاملا اختیاری است. بدیهی است که می توان توکن نهایی را با حداقل توابع پیاده سازی شده عرضه کردو یا همه ی توابع را به طول کامل و مطلوب پیاده سازی نمود. بسته به کیفیت و جامعیت پیاده سازی، توکن حاصله ممکن است مجوز کاربرد در سطوح مختلف امنیتی (ارائه شده در مستندات مرکز صدور گواهی ریشه) را کسب نماید.
    همچنین توابع رمزنگاری پیاده سازی شده ممکن است مکانیزم های رمزنگاری متفاوتی را پشتیبانی نمایند که این نیز یکی دیگر از عوامل ارزیابی کیفیت محصول نهایی خواهد بود. مزیت پیاده سازی بومی این استاندارد آن است که می توان از الگوریتم های سفارشی و بومی نیز در ساخت توکن بهره گرفت.



نظرات خوانندگان
تا کنون هیچ نظری درباره این مطلب ثبت نشده است
نظر جدید
نام*
ایمیل
نظر*

متن تصویر*
مشاهده لیست تمام مطالب...