تجربه استفاده از فناوری روتوکن برای ثبت نام و مجوزدهی کاربران در سیستم (قسمت دوم)

عصر بخیر من می خواهم تجربه خود را در مورد این موضوع به اشتراک بگذارم.

روتوکن راهکارهای سخت افزاری و نرم افزاری در زمینه احراز هویت، امنیت اطلاعات و امضای الکترونیکی است. در اصل، این یک درایو فلش است که می تواند داده های احراز هویت را که کاربر برای ورود به سیستم استفاده می کند، ذخیره کند.

در این مثال از Rutoken EDS 2.0 استفاده شده است.

برای کار با این روتوکن شما نیاز دارید نصب درایور روی ویندوز.

برای ویندوز، نصب فقط یک درایور تضمین می کند که همه چیزهایی که نیاز است نصب شده است تا سیستم عامل Rutoken شما را ببیند و بتواند با آن کار کند.

شما می توانید به روش های مختلف با روتوکن تعامل داشته باشید. می توانید از سمت سرور برنامه یا مستقیماً از سمت سرویس گیرنده به آن دسترسی داشته باشید. این مثال تعامل با روتوکن را از سمت مشتری برنامه بررسی می کند.

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

تمام است، اکنون می توانیم از سمت کلاینت برنامه با روتوکن تعامل داشته باشیم.

این مثال ایده پیاده سازی یک الگوریتم مجوز کاربر در سیستم با استفاده از طرح چالش-پاسخ را مورد بحث قرار می دهد.

اصل ایده به شرح زیر است:

  1. مشتری یک درخواست مجوز را به سرور ارسال می کند.
  2. سرور با ارسال یک رشته تصادفی به درخواست مشتری پاسخ می دهد.
  3. کلاینت این رشته را با 32 بیت تصادفی اضافه می کند.
  4. مشتری رشته دریافتی را با گواهینامه خود امضا می کند.
  5. مشتری پیام رمزگذاری شده دریافتی را به سرور ارسال می کند.
  6. سرور با دریافت پیام رمزگذاری نشده اصلی امضا را تأیید می کند.
  7. سرور 32 بیت آخر را از پیام رمزگذاری نشده دریافتی حذف می کند.
  8. سرور نتیجه دریافت شده را با پیامی که هنگام درخواست مجوز ارسال شده است مقایسه می کند.
  9. اگر پیام ها یکسان باشند، مجوز موفقیت آمیز در نظر گرفته می شود.

در الگوریتم فوق چیزی به نام گواهی وجود دارد. برای این مثال، باید برخی از نظریه های رمزنگاری را درک کنید. در Habré وجود دارد مقاله عالی در مورد این موضوع.

در این مثال از الگوریتم های رمزگذاری نامتقارن استفاده خواهیم کرد. برای پیاده سازی الگوریتم های نامتقارن، باید یک جفت کلید و یک گواهی داشته باشید.

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

گواهی یک سند الکترونیکی است که حاوی اطلاعاتی در مورد کاربر صاحب گواهی و همچنین یک کلید عمومی است. با یک گواهی، کاربر می تواند هر داده ای را امضا کند و آن را به سرور ارسال کند، سرور می تواند امضا را تأیید کند و داده ها را رمزگشایی کند.

برای امضای صحیح یک پیام با گواهی، باید آن را به درستی ایجاد کنید. برای این کار ابتدا یک جفت کلید در روتوکن ایجاد می شود و سپس باید یک گواهی به کلید عمومی این جفت کلید متصل شود. گواهی باید دقیقاً دارای کلید عمومی باشد که در روتوکن قرار دارد، این مهم است. اگر ما به سادگی یک جفت کلید و یک گواهی را بلافاصله در سمت سرویس گیرنده برنامه ایجاد کنیم، چگونه سرور می تواند این پیام رمزگذاری شده را رمزگشایی کند؟ از این گذشته، او اصلاً هیچ چیز در مورد جفت کلید یا گواهی نمی داند.

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

اگر به مشکل خود برگردیم، راه حل آن بدیهی به نظر می رسد. شما باید به نوعی مرکز صدور گواهینامه خود را ایجاد کنید. اما قبل از آن، باید بفهمید که مرکز صدور گواهینامه بر چه اساسی باید برای کاربر گواهی صادر کند، زیرا او چیزی در مورد آن نمی داند. (مثلا نام، نام خانوادگی و...) چنین چیزی به نام درخواست گواهی وجود دارد. اطلاعات بیشتر در مورد این استاندارد را می توان به عنوان مثال در ویکی پدیا یافت ru.wikipedia.org/wiki/PKCS
ما از نسخه 1.7 - PKCS#10 استفاده خواهیم کرد.

اجازه دهید الگوریتم تولید گواهی در روتوکن را توضیح دهیم (منبع اصلی: مستندات):

  1. ما یک جفت کلید روی کلاینت ایجاد می کنیم و آن را در Rutoken ذخیره می کنیم. (ذخیره به صورت خودکار انجام می شود)
  2. ما یک درخواست گواهی برای مشتری ایجاد می کنیم.
  3. ما این درخواست را از مشتری به سرور ارسال می کنیم.
  4. هنگامی که درخواستی برای گواهی در سرور دریافت می کنیم، گواهی را از مرجع صدور گواهینامه خود صادر می کنیم.
  5. ما این گواهی را برای مشتری ارسال می کنیم.
  6. ما گواهی روتوکن را روی مشتری ذخیره می کنیم.
  7. گواهی باید به جفت کلیدی که در مرحله اول ایجاد شده است متصل شود.

اکنون مشخص می شود که سرور چگونه می تواند امضای مشتری را رمزگشایی کند ، زیرا خود گواهی را برای او صادر کرده است.

در قسمت بعدی، نگاهی دقیق تر به نحوه تنظیم مجوز گواهی خود بر اساس کتابخانه رمزنگاری متن باز کامل openSSL خواهیم داشت.

منبع: www.habr.com

اضافه کردن نظر