مقدمات رمزنگاری
رمزگذاری یعنی تبدیل اطلاعات به یک شکل غیر قابل فهم و انتقال آن و سپس برگرداندن اطلاعات رمز شده به حالت اولیه و قابل خواندن. عناصر مهمی که در رمزگذاری مورد استفاده قرار می گیرند به شرح زیر می باشد:
۱- معرفی و اصطلاحات
رمزنگاری علم کدها و رمزهاست. یک هنر قدیمی است و برای قرنها بمنظور محافظت از پیغامهایی که بین فرماندهان، جاسوسان، عشاق و دیگران ردوبدل می شده، استفاده شده است تا پیغامهای آنها محرمانه بماند.
هنگامی که با امنیت دیتا سروکار داریم، نیاز به اثبات هویت فرستنده و گیرنده پیغام داریم و در ضمن باید از عدم تغییر محتوای پیغام مطمئن شویم. این سه موضوع یعنی محرمانگی، تصدیق هویت و جامعیت در قلب امنیت ارتباطات دیتای مدرن قرار دارند و می توانند از رمزنگاری استفاده کنند.
اغلب این مساله باید تضمین شود که یک پیغام فقط میتواند توسط کسانی خوانده شود که پیغام برای آنها ارسال شده است و دیگران این اجازه را ندارند. روشی که تامین کننده این مساله باشد "رمزنگاری" نام دارد. رمزنگاری هنر نوشتن بصورت رمز است بطوریکه هیچکس بغیر از دریافت کننده موردنظر نتواند محتوای پیغام را بخواند.
رمزنگاری مخفف ها و اصطلاحات مخصوص به خود را دارد. برای درک عمیق تر به مقداری از دانش ریاضیات نیاز است. برای محافظت از دیتای اصلی ( که بعنوان plaintext شناخته می شود)، آنرا با استفاده از یک کلید (رشته ای محدود از بیتها) بصورت رمز در می آوریم تا کسی که دیتای حاصله را می خواند قادر به درک آن نباشد. دیتای رمزشده (که بعنوان ciphertext شناخته می شود) بصورت یک سری بی معنی از بیتها بدون داشتن رابطه مشخصی با دیتای اصلی بنظر می رسد. برای حصول متن اولیه دریافت کننده آنرا رمزگشایی می کند. یک شخص ثالت (مثلا یک هکر) می تواند برای اینکه بدون دانستن کلید به دیتای اصلی دست یابد، کشف رمز نوشته (cryptanalysis) کند. بخاطرداشتن وجود این شخص ثالث بسیار مهم است.
رمزنگاری دو جزء اصلی دارد، یک الگوریتم و یک کلید. الگوریتم یک مبدل یا فرمول ریاضی است. تعداد کمی الگوریتم قدرتمند وجود دارد که بیشتر آنها بعنوان استانداردها یا مقالات ریاضی منتشر شده اند. کلید، یک رشته از ارقام دودویی (صفر و یک) است که بخودی خود بی معنی است. رمزنگاری مدرن فرض می کند که الگوریتم شناخته شده است یا می تواند کشف شود. کلید است که باید مخفی نگاه داشته شود و کلید است که در هر مرحله پیاده سازی تغییر می کند. رمزگشایی ممکن است از همان جفت الگوریتم و کلید یا جفت متفاوتی استفاده کند.
دیتای اولیه اغلب قبل از رمزشدن بازچینی می شود؛ این عمل عموما بعنوان scrambling شناخته می شود. بصورت مشخص تر، hash functionها بلوکی از دیتا را (که می تواند هر اندازه ای داشته باشد) به طول از پیش مشخص شده کاهش می دهد. البته دیتای اولیه نمی تواند از hashed value بازسازی شود. Hash functionها اغلب بعنوان بخشی از یک سیستم تایید هویت مورد نیاز هستند؛ خلاصه ای از پیام (شامل مهم ترین قسمتها مانند شماره پیام، تاریخ و ساعت، و نواحی مهم دیتا) قبل از رمزنگاری خود پیام، ساخته و hash می شود.
1-1 یک چک تایید پیام (Message Authentication Check) یا MAC یک الگوریتم ثابت با تولید یک امضاء برروی پیام با استفاده از یک کلید متقارن است. هدف آن نشان دادن این مطلب است که پیام بین ارسال و دریافت تغییر نکرده است. هنگامی که رمزنگاری توسط کلید عمومی برای تایید هویت فرستنده پیام استفاده می شود، منجر به ایجاد امضای دیجیتال (digital signature) می شود.
1-2 Public Key یا کلید عمومی اعداد یا کلماتی که با یک شخص یا سازمان در ارتباط می باشد. کلید عمومی جزئی از جفت کلید عمومی/خصوصی می باشد وبه صورت عمومی در دسترس کسانی که قصد انتقال اطلاعات رمز شده را دارند، می باشد.
1-3 Private Key یا کلید خصوصی اعداد یا کلماتی که با یک شخص یا سازمان در ارتباط می باشد. کلید خصوصی جزئی از جفت کلید عمومی/خصوصی می باشد. کلید خصوصی فقط در دسترس مالک جفت کلید عمومی/خصوصی می باشد و برای بازگشایی اطلاعاتی که توسط کلید عمومی رمزگذاری شده استفاده می شود.
1-4 ایجادکننده های جفت کلید برای ایجاد یک جفت کلید عمومی و خصوصی طبق یک الگوریتم رمزگذاری مشخص استفاده می شود.
1-5 Key Factories برای تبدیل کلید های نامشخص به کلیدهای مشخص به کار می رود.
1-6 Keystores بانکی که برای مدیریت تعدادی از کلید ها به کار می رود.
1-7 الگوریتم های رمزگذاری الگوریتم ها و روشهایی که برای رمزگذاری اطلاعات به کار می رود. RSA و DES نام دو تا از معروفترین الگوریتم ها می باشد.
۲- الگوریتم ها
طراحی الگوریتمهای رمزنگاری مقوله ای برای متخصصان ریاضی است. طراحان سیستمهایی که در آنها از رمزنگاری استفاده می شود، باید از نقاط قوت و ضعف الگوریتمهای موجود مطلع باشند و برای تعیین الگوریتم مناسب قدرت تصمیم گیری داشته باشند. اگرچه رمزنگاری از اولین کارهای شانون (Shannon) در اواخر دهه ۴۰ و اوایل دهه ۵۰ بشدت پیشرفت کرده است، اما کشف رمز نیز پابه پای رمزنگاری به پیش آمده است و الگوریتمهای کمی هنوز با گذشت زمان ارزش خود را حفظ کرده اند. بنابراین تعداد الگوریتمهای استفاده شده در سیستمهای کامپیوتری عملی و در سیستمهای برپایه کارت هوشمند بسیار کم است.
۱-۲ سیستمهای کلید متقارن
یک الگوریتم متقارن از یک کلید برای رمزنگاری و رمزگشایی استفاده می کند. بیشترین شکل استفاده از رمزنگاری که در کارتهای هوشمند و البته در بیشتر سیستمهای امنیت اطلاعات وجود دارد data encryption algorithm یا DEA است که بیشتر بعنوان DES شناخته می شود. DES یک محصول دولت ایالات متحده است که امروزه بطور وسیعی بعنوان یک استاندارد بین المللی شناخته می شود. بلوکهای ۶۴بیتی دیتا توسط یک کلید تنها که معمولا ۵۶بیت طول دارد، رمزنگاری و رمزگشایی می شوند. DES از نظر محاسباتی ساده است و براحتی می تواند توسط پردازنده های کند (بخصوص آنهایی که در کارتهای هوشمند وجود دارند) انجام گیرد.
این روش بستگی به مخفی بودن کلید دارد. بنابراین برای استفاده در دو موقعیت مناسب است: هنگامی که کلیدها می توانند به یک روش قابل اعتماد و امن توزیع و ذخیره شوند یا جایی که کلید بین دو سیستم مبادله می شوند که قبلا هویت یکدیگر را تایید کرده اند عمر کلیدها بیشتر از مدت تراکنش طول نمی کشد. رمزنگاری DES عموما برای حفاظت دیتا از شنود در طول انتقال استفاده می شود.
کلیدهای DES ۴۰بیتی امروزه در عرض چندین ساعت توسط کامپیوترهای معمولی شکسته می شوند و بنابراین نباید برای محافظت از اطلاعات مهم و با مدت طولانی اعتبار استفاده شود. کلید ۵۶بیتی عموما توسط سخت افزار یا شبکه های بخصوصی شکسته می شوند. رمزنگاری DESسه تایی عبارتست از کدکردن دیتای اصلی با استفاده از الگوریتم DES که در سه مرتبه انجام می گیرد. (دو مرتبه با استفاده از یک کلید به سمت جلو (رمزنگاری) و یک مرتبه به سمت عقب (رمزگشایی) با یک کلید دیگر) مطابق شکل زیر:
این عمل تاثیر دوبرابر کردن طول موثر کلید را دارد؛ بعدا خواهیم دید که این یک عامل مهم در قدرت رمزکنندگی است.
الگوریتمهای استاندارد جدیدتر مختلفی پیشنهاد شده اند. الگوریتمهایی مانند Blowfish و IDEA برای زمانی مورد استفاده قرار گرفته اند اما هیچکدام پیاده سازی سخت افزاری نشدند بنابراین بعنوان رقیبی برای DES برای استفاده در کاربردهای میکروکنترلی مطرح نبوده اند. پروژه استاندارد رمزنگاری پیشرفته دولتی ایالات متحده (AES) الگوریتم Rijndael را برای جایگزیتی DES بعنوان الگوریتم رمزنگاری اولیه انتخاب کرده است. الگوریتم Twofish مشخصا برای پیاده سازی در پردازنده های توان ـ پایین مثلا در کارتهای هوشمند طراحی شد.
در ۱۹۹۸ وزارت دفاع ایالات متحده تصمیم گرفت که الگوریتمها Skipjack و مبادله کلید را که در کارتهای Fortezza استفاده شده بود، از محرمانگی خارج سازد. یکی از دلایل این امر تشویق برای پیاده سازی بیشتر کارتهای هوشمند برپایه این الگوریتمها بود.
برای رمزنگاری جریانی (streaming encryption) (که رمزنگاری دیتا در حین ارسال صورت می گیرد بجای اینکه دیتای کدشده در یک فایل مجزا قرار گیرد) الگوریتم RC4 سرعت بالا و دامنه ای از طول کلیدها از ۴۰ تا ۲۵۶ بیت فراهم می کند. RC4 که متعلق به امنیت دیتای RSA است، بصورت عادی برای رمزنگاری ارتباطات دوطرفه امن در اینترنت استفاده می شود.
۲-۲ سیستمهای کلید نامتقارن
سیستمهای کلید نامتقارن از کلید مختلفی برای رمزنگاری و رمزگشایی استفاده می کنند. بسیاری از سیستمها اجازه می دهند که یک جزء (کلید عمومی یا public key) منتشر شود در حالیکه دیگری (کلید اختصاصی یا private key) توسط صاحبش حفظ شود. فرستنده پیام، متن را با کلید عمومی گیرنده کد می کند و گیرنده آن را با کلید اختصاصی خودش رمزنگاری میکند. بعبارتی تنها با کلید اختصاصی گیرنده می توان متن کد شده را به متن اولیه صحیح تبدیل کرد. یعنی حتی فرستنده نیز اگرچه از محتوای اصلی پیام مطلع است اما نمی تواند از متن کدشده به متن اصلی دست یابد، بنابراین پیام کدشده برای هرگیرنده ای بجز گیرنده مورد نظر فرستنده بی معنی خواهد بود. معمولترین سیستم نامتقارن بعنوان RSA شناخته می شود (حروف اول پدیدآورندگان آن یعنی Rivest ، Shamir و Adlemen است). اگرچه چندین طرح دیگر وجود دارند. می توان از یک سیستم نامتقارن برای نشاندادن اینکه فرستنده پیام همان شخصی است که ادعا می کند استفاده کرد که این عمل اصطلاحا امضاء نام دارد. RSA شامل دو تبدیل است که هرکدام احتیاج به بتوان رسانی ماجولار با توانهای خیلی طولانی دارد:
امضاء، متن اصلی را با استفاده از کلید اختصاصی رمز می کند؛ رمزگشایی عملیات مشابه ای روی متن رمزشده اما با استفاده از کلید عمومی است. برای تایید امضاء بررسی می کنیم که آیا این نتیجه با دیتای اولیه یکسان است؛ اگر اینگونه است، امضاء توسط کلید اختصاصی متناظر رمزشده است.
به بیان ساده تر چنانچه متنی از شخصی برای دیگران منتشر شود، این متن شامل متن اصلی و همان متن اما رمز شده توسط کلید اختصاصی همان شخص است. حال اگر متن رمزشده توسط کلید عمومی آن شخص که شما از آن مطلعید رمزگشایی شود، مطابقت متن حاصل و متن اصلی نشاندهنده صحت فرد فرستنده آن است، به این ترتیب امضای فرد تصدیق می شود. افرادی که از کلید اختصاصی این فرد اطلاع ندارند قادر به ایجاد متن رمز شده نیستند بطوریکه با رمزگشایی توسط کلید عمومی این فرد به متن اولیه تبدیل شود.
اساس سیستم RSA این فرمول است: X = Yk (mod r)
که X متن کد شده، Y متن اصلی، k کلید اختصاصی و r حاصلضرب دو عدد اولیه بزرگ است که با دقت انتخاب شده اند. برای اطلاع از جزئیات بیشتر می توان به مراجعی که در این زمینه وجود دارد رجوع کرد. این شکل محاسبات روی پردازنده های بایتی بخصوص روی ۸ بیتی ها که در کارتهای هوشمند استفاده می شود بسیار کند است. بنابراین، اگرچه RSA هم تصدیق هویت و هم رمزنگاری را ممکن می سازد، در اصل برای تایید هویت منبع پیام از این الگوریتم در کارتهای هوشمند استفاده می شود و برای نشاندادن عدم تغییر پیام در طول ارسال و رمزنگاری کلیدهای آتی استفاده می شود.
سایر سیستمهای کلید نامتقارن شامل سیستمهای لگاریتم گسسته می شوند مانند Diffie-Hellman، ElGamal و سایر طرحهای چندجمله ای و منحنی های بیضوی. بسیاری از این طرحها عملکردهای یک ـ طرفه ای دارند که اجازه تاییدهویت را می دهند اما رمزنگاری ندارند. یک رقیب جدیدتر الگوریتم RPK است که از یک تولیدکننده مرکب برای تنظیم ترکیبی از کلیدها با مشخصات مورد نیاز استفاده می کند. RPK یک پروسه دو مرحله ای است: بعد از فاز آماده سازی در رمزنگاری و رمزگشایی (برای یک طرح کلید عمومی) رشته هایی از دیتا بطور استثنایی کاراست و می تواند براحتی در سخت افزارهای رایج پیاده سازی شود. بنابراین بخوبی با رمزنگاری و تصدیق هویت در ارتباطات سازگار است.
طولهای کلیدها برای این طرحهای جایگزین بسیار کوتاهتر از کلیدهای مورد استفاده در RSA است که آنها برای استفاده در چیپ کارتها مناسب تر است. اما RSA محکی برای ارزیابی سایر الگوریتمها باقی مانده است؛ حضور و بقای نزدیک به سه دهه از این الگوریتم، تضمینی در برابر ضعفهای عمده بشمار می رود.
3- روشهای رمزگذاری
3-1 روش متقارن Symmetric در این روش هر دو طرفی که قصد رد و بدل اطلاعات را دارند از یک کلید مشترک برای رمزگذاری و نیز بازگشایی رمز استفاده می کنند.در این حالت بازگشایی و رمزگذاری اطلاعات دو فرآیند معکوس یکدیگر می باشند. مشکل اصلی این روش این است که کلید مربوط به رمزگذاری باید بین دو طرف به اشتراک گذاشته شود و این سوال پیش می آید که دو طرف چگونه می توانند این کلید را به طور امن بین یکدیگر رد و بدل کنند. انتقال از طریق انترانت و یا به صورت فیزیکی تا حدی امن می باشد اما در انتقال آن در اینترنت به هیچ وجه درست نمی باشد.در این قبیل سیستم ها، کلید های رمزنگاری و رمزگشایی یکسان هستند و یا رابطه ای بسیار ساده با هم دارند .این سیستم ها را سیستم های متقارن یا " تک کلیدی " مینامیم. به دلیل ویژگی ذاتی تقارن کلید رمزنگاری و رمزگشایی، مراقبت و جلوگیری از افشای این سیستم ها یا تلاش در جهت امن ساخت آنها لازم است در بر گیرنده " جلوگیری از استراق سمع " و " ممانعت از دستکاری اطلاعات " باشد .
3-2 روش نامتقارن Asymmetric این روش برای حل مشکل انتقال کلید در روش متقارن ایجاد شد. در این روش به جای یک کلید مشترک از یک جفت کلید به نام های کلید عمومی و خصوصی استفاده می شود. در این روش از کلید عمومی برای رمزگذاری اطلاعات استفاده می شود. طرفی که قصد انتقال اطلاعات را به صورت رمزگذاری شده دارد اطلاعات را رمزگذاری کرده و برای طرفی که مالک این جفت کلید است استفاده می شود. مالک کلید، کلید خصوصی را پیش خود به صورت محرمانه حفظ می کند. در این دسته، کلید های رمزنگاری و رمزگشایی متمایزند و یا اینکه چنان رابطه پیچیده ای بین آنها حکم فرماست که کشف کلید رمزگشایی با در اختیار داشتن کلید رمزنگاری، عملا ناممکن است.
3-3 مقایسه رمزنگاری الگوریتم های متقارن و الگوریتم های کلید عمومی : بحث های زیادی شده که کدام یک از این الگوریتم ها بهترند اما جواب مشخصی ندارد. البته بررسی هایی روی این سوال شده به طور مثال Needham و Schroeder بعد از تحقیق به این نتیجه رسیدند که طول پیغامی که با الگوریتم های متقارن میتواند رمزنگاری شود از الگوریتم های کلید عمومی کمتر است. و با تحقیق به این نتیجه ریسیدند که الگوریتم های متقارن الگوریتم های بهینه تری هستند. اما وقتی که بحث امنیت پیش می آید الگوریتم های کلید عمومی کارایی بیشتریدارند. و بطور خلاصه می توان گفت که الگوریتم های متقارن دارای سرعت بالاتر و الگوریتم های کلید عمومی دارای امنیت بهتری هستند. در ضمن گاهی از سیستم ترکیبی از هردو الگوریتم استفاده میکنند که به این الگوریتم ها الگوریتم های ترکیبی (hybrid )گفته میشود. اما اگر به طور دقیق تر به این دو نگاه کنیم آنگاه متوجه خواهیم شد که الگوریتم های کلید عمومی و الگوریتم های کلید متقارن دارای دو ماهیت کاملا متفاوت هستند و کار برد های متفاوتی دارند به طور مثال در رمزنگاری های ساده که حجم داده ها بسیار زیاد است از الگوریتم متقارن استفاده میشود زیرا داده ها با سرعت بالاتری رمزنگاری و رمزگشایی شوند. اما در پروتکل هایی که در اینترنت استفاده میشود، برای رمز نگری کلید هایی که نیاز به مدیریت دارند از الگوریتم های کلید عمومی استفاده میشود.
3-4 Key Agreement همانطور که در بالا گفته شد به علت کند بودن و محدودیت رمزگذاری با روش نامتقارن از این روش فقط برای رمزگذاری کلید مشترک استفاده می شود. اما این روش نیز یک مشکل دارد و آن اینست که هر شخص نیاز به کلید عمومی و خصوصی مربوط به خود را دارد و باید برای انتقال اطلاعات آنرا برای طرف مقابل بفرستد. یک راه برای حل مشکل استفاده از کلید عمومی و یک مکانیزم به نام Key Agreement می باشد که به طبق آن یک توافق بر روی کلید مخفی بین طرفین به وجود می آید و به این ترتیب نیازی به انتقال کلید نمی باشد. وقتی که یک بار بر روی یک کلید مشترک توافق حاصل شد از آن می توان برای رمزگذاری و رمزگشایی اطلاعات مربوطه استفاده کرد. معمولا در این روش از الگوریتم Diffie-Hellman استفاده می شود. مراحل انتقال اطلاعات از این روش به صورت زیر می باشد: – آغازگر ابتدا یک جفت کلید عمومی و خصوصی ایجاد کرده و کلید عمومی را همراه با مشخصات الگوریتم (Algorithm Specification) به سمت طرف مقابل می فرستد. – طرف مقابل نیز یک جفت کلید عمومی و خصوصی همراه با مشخصات الگوریتم آغازگر ساخته و کلید عمومی را برای آغازگر می فرستد. – آغازگر یک کلید مخفی بر اساس کلید خصوصی خود و کلید عمومی طرف مقابل ایجاد میکند. – طرف مقابل نیز با استفاده از کلید خصوصی خود و کلید عمومی آغازگر یک کلید مخفی می سازد. الگوریتم Diffie-Hellman تضمین می کند که کلید مخفی هر دو طرف یکسان می باشد.
4- انواع روشهای رمزگذاری اسناد
1-4 رمزگذاری همه اطلاعات یک سند xml سند زیر را در نظر بگیرید:
<?xml version='1.0'?> <PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<CreditCard Limit='5,000' Currency='USD'>
<Number>4019 2445 0277 5567</Number>
<Issuer>Example Bank</Issuer> <Expiration>04/02</Expiration> </CreditCard> </PaymentInfo>
این سند پس از رمزگذاری بر اساس استانداردهای W3C به شکل زیر در می آید:
<?xml version='1.0'?> <EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#' MimeType='text/xml'> <CipherData> <CipherValue>A23B45C56</CipherValue> </CipherData> </EncryptedData>
2-4 رمزگذاری یک element مشخص از یک سند xml
رمزگذاری یک element مشخص بصورت زیر می باشد.
در این حالت <CreaditCard> رمزگذاری شده و به شکل زیر در آمده است:
<?xml version='1.0'?> <PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element'
xmlns='http://www.w3.org/2001/04/xmlenc#'>
<CipherData>
<CipherValue>A23B45C56</CipherValue>
</CipherData>
</EncryptedData>
</PaymentInfo>
3-4 رمزگذاری محتویات یک element مشخص در این حالت فقط محتویات و اطلاعات درون یک element رمزگذاری شده و خود element ثابت باقی خواهد ماند:
<?xml version='1.0'?>
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<CreditCard Limit='5,000' Currency='USD'>
<EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#'
Type='http://www.w3.org/2001/04/xmlenc#Content'>
<CipherData>
<CipherValue>A23B45C56</CipherValue>
</CipherData>
</EncryptedData>
</CreditCard>
</PaymentInfo>
در این حالت element <CreditCard> ثابت مانده ولی محتویات آن رمزگذاری شده است.
اطلاعات پس از رمزگذاری طبق استانداردW3C درون عنصر<ChipherData> قرار می گیرند. همچنین در این قسمت یک عنصر <EncryptedData> دیده می شود که شامل اطلاعاتی از قبیل نوع رمزگذاری و یا الگوریتم مورد استفاده برای رمزگذاری می باشد.
4-4 کلیدهای مورد استفاده در رمزگذاری وقتی یک سند XML یا بخشی از آن رمزگذاری می شود آن قسمت با عنصر <EncryptedData> تعویض می شود. این عنصر ممکن است شامل نوع رمزگذاری باشد که گیرنده از این اطلاعات استفاده می کند، مثلا اطلاعاتی شامل اینکه آیا کل سند رمزگذاری شده یا قسمتی از آن و همچنین اینکه نوع اطلاعات رمزگذاری شده متن است یا تصویر و غیره.
می توان مشخصات کلید مشترک را درون خود سند درون عنصر <EncryptedKey> قرار داد. اطلاعات واقعی که رمزگذاری شده اند درون عنصر <CipherData> قرار می گیرند. در داخل این قسمت نیز یک عنصر <CipherValue> قرار دارد که شامل اطلاعات واقعی رمزگذاری شده می باشد.
5-4 روشهای انتقال کلید طبق استاندارد W3C سه روش برای انتقال کلید موجود می باشد:
1. می توان کلید را درون همان سند قرار داد، عناصر <EncryptedData> و یا <EncryptedKey> می توانند یک عنصر <ds:KeyInfo> داشته باشند که مشخص کننده جزییات کلید می باشد. خود این عنصر شامل عناصر زیر می باشد: – عنصر <ds:KeyValue> که مقدار آن همان کلید عمومی یا کلید رمزگذاری شده می باشد. – عنصر <ds:KeyName> که به یک عنصر <EncryptedKey> اشاره می کند. – عنصر <ds:RetrievalMethod> که متد بازیابی کلید را مشخص می کند.
2. می توان یک فایل دیگر که شامل عنصر <EncryptedKey> می باشد ضمیمه سند کرد که در این حالت درون سند xml عنصر <DataReference> یا <KeyReference> قرار می گیرد که به آن ضمیمه اشاره می کند. 3. در روش سوم در هیچ قسمت از سند XML به کلید اشاره ای نمی شود و مسیر کلید از قبل مشخص می باشد.
5- امضای دیجیتالی
1-5 معرفی امضای دیجیتالی برای اینکه هویت فرستنده سند تایید شود و نیز برای اطمینان از اینکه سند در طول مدت انتقال به گیرنده دستکاری نشده است از امضای دیجیتالی استفاده می شود. می توان کل یک سند و یا قسمتی از آن را امضا کرد. به طور کلی سه دلیل برای استفاده از امضای دیجیتالی وجود دارد که شامل: 1. استفاده از کلید عمومی این اجازه را به هر شخصی می دهد که کلید خود را به سمت فرستنده اطلاعات بفرستد و سپس گیرنده پس از دریافت اطلاعات آنرا توسط کلید خصوصی خود بازگشایی می کند، بنابراین امضای دیجیتالی این امکان را می دهد که فرستنده یا گیرنده مطمئن شوند که اطلاعات از محل یا شخص مورد نظر دریافت می شود. 2. اطلاعات در طول مدت انتقال ممکن است توسط دیگران دستکاری شود برای اینکه از صحت اطلاعات رسیده مطمئن شویم نیاز به یک امضای دیجیتالی در این حالت احساس می شود. 3. رد کردن اطلاعات فرستاده شده. گیرنده اطلاعات برای اینکه مطمئن شود فرستنده بعدا از اطلاعاتی که فرستاده اعلام بی خبری نکند و آنها را رد نکند از فرستنده یک امضا درخواست می کند تا شاهدی بر این ادعا باشد.
برای پیاده سازی یک امضای دیجیتالی نیاز به سه الگورتم داریم: – یک الگوریتم برای ایجاد کلید – الگوریتم برای ایجاد امضا – الگوریتم برای تایید امضا
برای ایجاد یک امضای دیجیتالی باید یک عدد checksum برای سند مورد نظر محاسبه شود. فرض کنید Bob قصد ارسال یک پیام به Alice را دارد، Bob پیام خود را همراه با امضای دیجیتالی برای Alice می فرستد. این امضای دیجیتالی توسط کلید خصوصی که مالک آن Bob می باشد ایجاد شده است. در سمت دیگر Alice با استفاده از الگوریتم تایید امضا و کلید عمومی که از Bob دریافت کرده صحت امضا و اینکه امضا از طرف Bob می باشد را تایید می کند.
2-5 عناصر موجود در یک امضا در شکل زیر عناصر تشکیل دهنده یک امضای دیجیتالی را می بینید:
برای ایجاد یک امضای دیجیتالی باید طبق استاندارد W3C به صورت زیر عمل کرد:
1. ابتدا باید منبعی را که قصد امضای آنرا دارید مشخص کنید. عنصر <Reference> که در شکل دیده می شود مشخص می کند که چه چیزی در این قسمت امضا و علامت گذاری شده است. این منبع به صورت یک آدرس URI می باشد: http://www.abc-company.com/index.html به یک منبع از نوع فایل HTML اشاره می کند. http://www.abc-company.com/logo.gif به یک فایل تصویری اشاره می کند. http://www.abc-company.com/xml-files/info.xml به یک فایل از نوع XML اشاره می کند. http://www.abc-company.com/xml-files/info.xml#main به یک عنصر درون فایل XML به نام main اشاره می کند.
2. testInfo : به یک عنصر درون فایل XML فعلی اشاره می کند.
3. محاسبه مقدار digest به ازای هر منبع مشخص شده در <Reference>، که این مقدار در <DigestValue> قرار می گیرد. همچنین عنصر <Reference> شامل عنصر <DigestMethod> می باشد که الگوریتم مورد استفاده در محاسبه digest را معرفی می کند.
4. همه منابع که باید امضا شوند جمع آوری می شود:
SignedInfo Id="foobar">
<CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1" />
<Reference URI="http://www.abccompany.com/news/2000/03_27_00.htm">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue>
</Reference>
<Reference
URI="http://www.w3.org/TR/2000/WD-xmldsig-core-20000228/signature-example.xml">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>UrXLDLBIta6skoV5/A8Q38GEw44=</DigestValue>
</Reference>
</SignedInfo>
عنصر <CanonicalizationMethod> مشخص می کند که چه الگوریتمی برای قانونی کردن (canonize) عنصر <SignedInfo> استفاده شده است.
5. علامت گذاری امضا: در این قسمت مقدار digest برای عنصر <SignedInfo> محاسبه شده و درون عنصر <SignatureValue> قرار می گیرد. 5. اضافه کردن مشخصات کلید: می توانید مشخصات کلید خود را درون عنصر <KeyInfo> قرار دهید ولی این قسمت الزامی نیست و ممکن است شما نخواهید که این مشخصات معلوم گردد.
3-5 تایید یک امضای دیجیتالی مراحل تایید Verify یک امضای دیجیتالی به صورت خلاصی در زیر آورده شده است: – تایید امضای عنصر <SignedInfo>. برای این منظور ابتدا دوباره مقدار digest برای این عنصر را طبق الگوریتم مشخص شده در عنصر <SignatureMethod> محاسبه نموده و از کلید عمومی برای این کار استفاده می شود و برای تایید آن مقدار محاسبه شده را با مقدار معرفی شده در عنصر <SignatureValue> مقایسه می کنیم. – اگر مرحله قبل بدون مشکل تایید شد حالا به ازای هر منبع معرفی شده در عنصر <Reference> مقدار digest آنرا محاسبه نموده و با مقدار مشخص شده در عنصر <DigestValue> مقایسه می کنیم.
حملات متداول و راه حل های ممکن
مقدمه
ان از اینکه فقط کاربران مجاز،به اطلاعات حساس شرکت و یا ایمیل های شخصی خودشان دسترسی دارند میتوان کار چندان ساده ای نباشد با توجه به این حقیقت که به طور متوسط هر کاربر باید حداقل 4الی 5 رمز را بخاطر بیاورد که برخی از این رمزها باید به طور ماهیانه نیز عوض شوند اکثریت کاربران به هنگام انتخاب و یا به خاطر آوردن یک رمز دچار ناامیدی میشوند و کاملا از عواقب کارهایشان به هنگام کنترل داده های حسابشان، ناگاه هستند.
این مقاله بر این ضرورت دارد که چقدر رمزهای امنیتی با وجود شکستنی بودنشان مهم و ضروری هستند همچنین روشهای مختلفی برای ایجاد و پشتیبانی از رمز ها بیان خواهد شد و متدهای جایگزینی ممکن برای این رمزها که به سه دسته
Passphrases،Biomectrics وPKI(Public Key Infrastructure)
تقسیم میشوند بررسی خواهد شد.
خطرات تحمیلی رمزها:
با وجود اینکه هنوز اکثریت سازمانها و تقریبا 99% کاربران خانگی ،به رمز ها به عنوان اصلی ترین شیوه کنترل منابع شخصی و حساس،وابسته هستند،اما ایجاد،پشتیبانی ناامن و انتقالات در طول شبکه میتواند درهای اطلاعات شخصی و یا سازمانی هر گروه یا دسته ای را بروی هکرها باز کند.
مدیرانی که هوز از الگوی قدیمی پیروی میکنند،فکر میکنند که ضروری ترین و ساده ترین روش برای شناسایی یک کاربر در یا پایگاه داده شان ،استفاده از رمز (Password)است اما حقیقت این است که کاربران با درک این نکته که لازم است رمزشان را دائما تغییر دهند و یا باید رمز امن داشته باشند ویا از برخی دستورالعمل ها پیروی کنند تا حتی الامکان رمزشان را محفوظ نگه دارند ناامید و آزرده خاطر میشوند و نتیجه این میشود که تعداد زیادی رمز های قابل شکستن بوجود آمده که اکثریت آنها روی سیستم های مختلف یکی هستند وحتی یاداشت هایی که حاوی اسم کاربر و رمز عبور میباشد اطراف میز کاربران یافت میشود.
در هر سیستمی،برخی ازکاربران بخصوص،امتیازاتی دارند که دیگران نداسته و یا نداشته باشند با معرفی کردن خودتان روی یک سیستم کامپیوتری و با هر وب سایت مورد نظری،به شما دسترسی کامل به محیط کارتان و اطلاعات شخصی داده خواهند شد اطلاعات ودادههایی که حساس بوده و نمیخواهید عموم مردم به آنها دسترسی داشته باشند درست مثل حالتی که یک کمپانی نمیخواهد به رقبای خود اجازه دسترسی به اینترنت خود را دهد سناریوهای نه چندان جالب که در اثر فاش شدن داده های یک حساب(Account) بوجود میآند به شرح زیر میباشند:
Identity theft: دزدی هویت وقتی رخ میدهد که دادهای حساب شما و یا همان(Account) به دست شخص دیگری افتد و او خودش را به جای شما وانمود کرده تا کنترل هویت دیجیتالی شما را بدست گیرد این مساله باعث ایجاد خسارتهای مالی و هم شخصی خواهد شد
Sensitive Data Exposure: (فاش شدن داده های حساس)_محتوای ایمیل های شخصی شما ،پروژه های کاری ،اسناد و مدارک،… کیتواند به دست هکر ناشناس و یا کس دیگری که میخواهد مخصوصا شما را هدف قرار گذفته است، بیفتد
Company Data Exposure: فاش شدن داده های کمپانی)_ دزدیدن اطلاعات داخلی و محرمانه و حساس یک کمپانی در محافظت داده های حساب افراد میتواند تاثیر بدی روی آن کمپانی داشته باشد مه به طور مثال شما برایش کار می کنید:من شک دارم دوستی داشته باشید نقشه ها وبازار یابی شرکتی مه برایش کار میکنید از طریق شما به دست رقبایش بیفتد
Involvement In Criminal Activities: درگیر شدن در فعالیت های جنایی)_استفاده از حساب شما در فعالیت های مختلف جنایی نیز در اثر پیشتیبانی نادرست رمز ها حاصل میشود به خاطر داشته باشید که در این حالت همیشه با ردیابی مجرمین، پای حساب شما و در خود شما به ماجرا کشیده میشوید
توضیح:به نظر من موارد 1 و 2 کاربرد بیشتری داشته و بقیه موارد صرفا جهت اطلاع میباشد
سناریوهای متداول در فاش شدن رمزها:
Physical Security Breach: (شکستن امنیت به طور فیزیکی)_شکستن فیزیکی کامپیوتر شما حتی پیچیده ترین متدهای امنیتی و کد گذاری های دقیق را باز خواهد کرد یک Keylogger(قفل گشای) نرم افزاری وسخت افزاری ممکن است نصب شود و کلید PGP محرمانه شما فاش شود،بنا براین تمام دادههای حسابتان و با داده های کدگذاری شده شما آشکار خواهد شد مهم نیست که رمز شما چه اندازه کاراکتر داشته باشد و یا کاملا ایمن سازی شده باشد،زیرا شکستن فیزیکی رمز یکی از بحرانی ترین شرایط ممکن است.
Unintentionally Shared: (به اشتراک گذاری غیر عمدی)_یک کاربر ممکن است داده های حساب خود را به اشتراک گذارد بدون توجه به این که فاش کردن آن ،احتمال هک شدن توسط غریبه ها را افزایش میدهد معمولا یک رمز تحت شرایط مختلف بین دوستان ،رئیس ها وافراد خانواده به اشتراک گذارده میشود. یک منفعت بیان شده توسط برخی از کاربران برای این کار راحتی دو یا چند نفر است که با دانستن داده های یک حساب بخصوص میتوانند به یک منبع اطلاعتی ویژه دسترسی داشته باشند. همچنین رمزها از طریق بحث در مورد آنها بین همکاران یک شرکت نیز ممکن است به اشتراک گذارده شود به این ترتیب که در این بحث و گفتگو سیاست های اخیر شرکت برای اینتخاب رمز متدهای ی که هر کاربر برای انتخاب رمز خود استفاده کرده است و چگونگی پشتیباتی رمزها بیان میشود، و در بعضی از موارد در مورد این مساله که هرگز مدیریت از روش آنها برای مخفی کردن داده های حسابشان مطلع نخواهند شد صحبت میشود یکی از ساده ترین و بحرانی ترین روش برای دستیابی به دادهای حساس یک شرکت،سوال در مورد آن است، چه بطور مستقیم و یا غیر مستقیم که در حالت موضوعی است که در حال حاضر مورد توجه مهندسی اجتماعی است.
Cracked: ( شکستن)_گاهی اوقات در بعضی از شرایط دزدی،فایل رمز آن هکر شروع به شکستن فایل رمز خواهد شد ،به این ترتیب که تمام ترکیبات ممکن را بکار خواهد برد تا ضعیف ترین رمز را پیدا کرده و بعدا بتواند با استفاده از آن دیگر رمز ها را نیز باز کند در این شرایط که شرکت از دزدیده شدن فایل های رمز خود مطلع میشود باید بلافاصله به تمام کارمندان هشدار داده شود تا رمز های خود را تغییر دهند که حتی اگر ضعیف ترین رمز نیز شکسته شود دیگر اعتبار نداشته باشد گرچه، تگر شرکت از فاش شدن فایل رمز خود بیخبر باشد باید همواره سعی کند که فایل رمز خود را مثل یک هکر شکسته و ضعیف ترین رمز ها را فیلتر گذاری کند.
Sniffed: (تجسس مخفیانه)_آیا شما میدانید که چند کارمند از طریق کامپیوتری که قبلا رمزش شکسته شده و یا از طریق دوستانشان به اطلاعات و دادهای مهم و حساس دسترسی دارند؟
پاورقی:
(( داشتن قویترین رمزها لزوما مخفی ماندن آنها را تضمین نمیکند خصوصا اگر نقل وانتقالات از طریق اینترنت، کاملا ایمن سازی نشده باشد
به کاربران خود خود این توانایی را ندهید که بین متن ساده و یا SSL، یکی را برای رمز گذلری انتخاب کنند.در عوض تمام ارتباطات شبکه را مجبور سازید تا از حالت کد شده استفاده کنند یک توصیه مهم دیگر این است که بای هرکس خصوصیت (Last Login Form)(فرم آخرین اتصال) را فراهم سازید تا اگر متوجه Login بدون اجازه شدند بلافاصله مورد را گزارش دهند.
Gvessed: (حدس زدن)_نعداد زیادی کاربر هنوز هم سیاست های ساختار یافته رمز گذاری را به نحوی با گذاشتن رمز های حسی خود به بازی میگیرند که این روش به ظاهر قوی ولی در عمل ضعیف هنوز هم متداول است وعلتش هم اینست که تعداد کاربران زیادی برای رمز گذاری از کلمه های پیش پا افتاده مانند : (شماره تلفن،شماره شناسنامه،اسم دوست دختر،….)استفاده میکنند. گرچه امروزه به ندرت از این متد در مقایسه با دیگر روش های بحث شده استفاده میشود.
نکته: همیشه این نکته را به خاطر داشته باشید که بعضی از کاربران هنوز از رمزهایی استفاده میکنند که برپایه موضوعات ویا مارک های تجاری اشیای روی میز کارشان میباشد.
متداول ترین خطاها درپشتیبانی رمزها :
1- خاصیت Auto Fill: (پر کردن خودکار)_اکثریت برنامه کاربردی به شما این اجازه را میدهید که رمز ها و دادهای حساب خود را به حافظه بسپارید، اما اگر مطمئن نیستید که ان کامپیوتر کاملا در برابر شکستن فیزیکی رمز ها ایمن سازس شده است جدا از این به شما توصیه میشود که نگذارید به این روش رمزتان در حافظه برنامه باقی بماند مطمئن شوید که این ویژگی در مکان های عمومی مثل کافی نت ها نیز بکار گرفته نشود.
2- یادداشتهای"Post It"(الحاقی)_اغلب اوقات رمزها روی کاغذ نوشته شده و یا بدنر از همه کنار مانیتور و یا روی میز کار گذاشته میشود در این صورت به راحتی توسط مهاجمین احتمالی و یا افراد داخلی قابل مشاهده است.
3- " The Secret Place" (جایگاه مخفی)_خیلی از مردم فکر میکنند که یک جایگاه مخفی را برای خودشان زیر صفحه کلید و یا زیر میز پیدا کرده اند که کاملا فکر اشتباهی است زیرا اگر کسی متوجه شود نه تنها جایگاه مخفی آنها را یاد گرفته بلکه به راحتی میتواند با پرت کردن حواس آنها به رمز و یا حسابشان دست یابد با این وجود از آنجایی که خیلی از افراد دادهای حسابشان را روی کاغذ و یا PDAهای (رایانه دستی) و غیره نگه میدارند استراتژی زیر میتواند کمک بزرگی را در حفظ دادهایشان انجام دهد تا زمانیکه آن رمز یا داده ها را به خاطر بسپارند و آن کاغذ را دور انداخته و از شر آن خلاص شوند:
حداقل 6 یا 7 رمز متفاوت و قلابی را اطراف رمز اصلی یادداشت کنید حتی برخی از رمز ها را خط بزنید حتی رمز حقیقی را. زیرا اگر شانس بیاورید 2 یا 3 بار Login ناموفق باعث بسته شدن حسابتان خواهد شد و اگر یاداشت های شما بدست شخص دیگر افتاد هنوز این شانس را دارید که ممکن است آن شخس رمز حقیقی را پشدا نکند.گر چه این روش تضمین جدی را مهیا نخواهد ساخت واصلا توصیه نمیشود اما یک روش موثر برای کسانی که رمز خود را نا حفظ شدن کامل روی کاغذ نوشته وپیش خود نگاه میدارند.
چگونه یک رمز ایمن را انتخاب کنید:
انتخاب رمزهای ایمن مستلزم این است که بدانید رمزهای غیر امن کدامند.چگونه رمزها شکسته میشوند و پشت سر ایت"حاداقل 8 کاراکتر متشکل از حروف کوچک،بزرگ،اعداد وارقام و کاراکتر های ویژه"چه چیز هایی نهفته است به طور کلی هر چقدر رمز کوتاهتر باشد احتمال حدس زدن وشکستن آن بیشتر میشود یه هکر رمز تمام ترکیبات موجود از حروف و ارقام را بکار خواهد برد تا رمز مورد نظر را کشف کند استفاده ازحروف مختلف الفبا و آعداد(0-9)که به نام "رمز بر پایه اعداد"شناخته شده است باعث میشود احتمال شکسته شدن رمزتوسط هکر کاهش یابد روش متداول استفاده از دیکشنری مانند استکه بعنوان پایگاه داده رمزهای که به شکل لغات لیست شده و در آن دیکشنری میباشند به راحتی توسط هکر قابل شکسته شدن است به همین دلیل است که توصیه میکنم از رمزهای طولانیتر که شامل حروف و ارقام میباشد استفاده کنید تا هکر مجبور شود وقت بیشتری را صرف شکستن فایل رمز دزدیده کند.
هر زمان که رمزی را میسازید نکات زیر را مدنظر داشته باشید:
1- حداقل طول آن 7کاراکتر باشد و در آن از ترکیب حروف کوچک و بزرگ و حداقل یک عدد و کاراکتر های ویژه چون + -()%$#@! و … استفاده کنید
2- از یک لغت موجود در دیکشنری و یا ترکیب منطقی ازکارکنر ها مثل aaa555ccc ویا123456789استفاده نکنید.
3- سعی کنید رمزی که قبلا روی سیستم دیگری استفاده میکردید را بکار نبرید هر گز از یک رمز برای دسترسی به تمام داده ها و اطلاعات مهم خود در مکانها وسیستم های مختلف استفاده نکنید.
روش های مختلف رمز نگاری قوی اما در عین حال ساده برای به خاطر آوردن به شرح زیر است:
1- از یک لغت موجود در دیکشنری استفاده کرده مانند(Success) ولی آن را برعکس کنید(sseccus)
2-جلو و یا پشت آن لغت چند عدد اضافه کنید مثلا(146sseccus یا sseccus953)
3-همیسه حداقل از یک کاراکتر ویژه در جایی از رمز خود استفاده کنید مثل(=+-()*&^%$#@!)
4-استفاده حداقل یک حرف بزرگ در رمز احتمال شکسته شدن رمز را افزایش میدهد
5-بجای برخی از کاراکتر ها از اعدادی که به آنها مربوط میباشند استفاده کنید:مثلا به جای Securityاز کلمه s3cur1ty استفاده منید3به جای e و1به جای استفاده شده است
6-هر حروف را با یک عدد از هم جدا کنید مثلا(به جای security از این s1e3c5u7r9i2t4y8 اسنفاده کنید)
چگونه رمز ها را حفظ کنیم:
حفظ کردن تعداد مخفی رمز برای کاربرد های گوناگون،مشکل اصلی اکثریت کاربر استبه همبن علت اغلب آنها حفظ کردن رمز را نادیده گرفته،آنها را روی کاغذ نوشته و یا از رمزهای ضعیف ولی آسان برای بخاطر آوردن استفاده میکننداما اگر افراد سعی کنند رمزها را نه بعنوان ترکیبی از کاراکترهای به دردنخور،بلکه روشی برای مشخص کردن هویتشان درست مثل زمانی که از دستگاه خود پرداز پول میگیرند حفظ کنند به خاطر آوردن این رمزها ساده خواهد شد زیرا در این حالت داده های شخصی وشرکتشان است که باید سعی در محافظت آن کنند
1- مربوط کردن رمزها به یکدیگر:ارنباط رمزها نقش مهمی در حفظ کردن آنها بازی میکند با صرف یک زمان مشخص،حتی میتوانید از یک آدم ژاپنی یاد بگیرید آکر آن شخص بفهمد که شما چه روشی را برای حفظ کردن استفاده میکنید و از همه مهمتر چگونه چیزها را مربوط میسازید دیدن رمز،یک روش بسیار مهم دیگر برای حفظ کردن آن است و ظرف مدت کوتاهی حتی بدون اینکه فکر کنید چه چیزی را تایپ میکنید به راحتی رمز را وارد خواهید کردن یک عادت موقت با توجه به این حقیقت که اکثریت سازمانها وشرکت ها دائما رمزهای خود را تغییر میدهند
2- رمز ها را برای خودتان توضیح دهید:برای مثال رمزY13#tiruceS در حقیقت همان لغت security است که وارونه نوشته شده و اولین وآخرین حرف آن بزرگ بوده و بعد از حرف اول عدد تاریخ تولد دوستتان آمده و بعد یکی از کاراکتر های ویژه استفاده شده است به جای یک مشت کاراکتر های نامربوط حالا شما به زبان کدگذای خودتان نوشته شده است
راه حلهای ممکن :
وقتی متد های رمز نگاری را در هر دو سطح سیاست های ایمن سازی و شبکه،ضروری میکنید اکثریت کاربران ثابت کرده اند که در ایجاد و نگهداری رمزهای قوی وقابل اطمینان نمیباشند بخش خدمات شرکتها، غالبا گرفتارتراز این هستند که تقاضای مربوط به "یافتن رمزهای فراموش شده" را پاسخ دهند و اگر شرکت آگاهی های لازم در خصوص سیستم رمز نگاری را ندهد این مشکل همچنان رشد خواهد کرد.
Passphrases ها راحت تر میتوان به خاطر آورد ولی ظاهرا شکستن آنها غیر ممکن است اکثر نرم افراهای کدگذاری ازشما میخواهند که از یک Passphrases بعنوان کلید شخصی خود به جای رمز استفاده کنید
Passphrases ها معمولا شبه جمله ای هستند که شما همیشه یاد میاورید،مثلا یک شعار ،یک جمله مرد علاقه و یا ترکیبی از اعداد و حروف وکاراکتر های ویژه گرچه مجازا نمیتوان Passphrases ها رابا استفاده از یک KeyLogger(قفل گشا) میتوان باز کرد و یا به هنگام ارتباطات شبکه ای از طریق ردو بدل متن ساده آنها را حدس زد.
Biomectrics ها نسل بعدی متدهای کدگذاری هستند با وجود اینکه هنوز به دلیل هزینه های مربوطه در مراحل اولیه پیاده سازی هستند و گاهی اوقات نیز نتایج اشتباه به بار میاورند اما Biomectricsها روشی را که ما خودمان را مجاز به استفاده از چیزی میکنیم، تغییر خواهند داد و احتمالا دقتشان99%خواهد بود Biomectricsرا نمیتوان دزدید،فراموش کرد و یا به شخص دیگری داد سیستم های Biomectrics میتواند شامل سیستم های زیر باشد:
سیستمهای انگشت نگاری،تشخیص صدا ،اسکن شبکیه چشم ، تشخیص نقوش کفدست و تشخیص دست خط.
PKI(Public Key Infrastructure)
توابعPKI(ساختارهای کلید عمومی)به کاربران و سرورها این توانایی را میدهد که با هم ارتباط داشته،خود را شناسایی کرده و هویت خود را توسط مدارک دیجیتالی مشخص کنند که هر یک شامل کایدهای عمومی وشخصی است.
کلید عمومی برای هرکس که میخواهد داده ها را با شخص دیگری مبادله کند در دسترس قرار میگیرد و کلید شخصی تنها روش برای باز کردن کد و یا تشخیص هویت صحصیح است.PKI خصوصا به هنگام ارتباط از طریق شبکه های ناامن مثا اینترنت و یا سرورهای داخلی مفید واقع میشود.
با وجود اینکه متداول ترین روش برای شناسایی یک کاربر از گذشته بسیار دور،استفاده رمز بوده است اما کاربران و سازمان ها متوجه ضعف این روش شده ئ تدریجا در حال تغییر روش خود و استفاده از متدهای دیگر هستند کدگذاری مهمترین قدم بعدی برای اکثر شرکتهای کوچک و متوسط خواهد بود و هم چنین استفاده از متدهای مختلف Biomectrics در سر فصل این تغییرات قرار خواهد گرفت.
راه حلی برای حفظ امنیت داده ها
آیا روشی وجود دارد که رمزنوشته ها را از تعرض حفظ کند؟ چه فناوری هایی برای نیل به این هدف در دست رس است؟
از زمان ظهور کامپیوترهای جدید همواره با مساله ی رمزنگاری روبه رو بوده ایم. بنابراین وجود اولین کامپیوترهای قابل برنامه نویسی در جنگ جهانی دوم (Colossus) برای رمزگشایی پیغام های جنگ چندان هم تصادفی نبوده است.
رمزنگاری به معنای استفاده از رمزهای مخصوص در پیغام هاست؛ به این شکل که خواندن این مطالب بدون به کاربردن کلید رمزگشا (تراشه) یا محاسبات ریاضی امکان پذیر نیست. هرچه طول تراشه (تعدادبیت ها) بیش تر باشد حل معما سخت تر خواهدبود. با وجود آن که شکستن بسیاری از رمزها به شکل عملی امکان پذیر نیست، با صرف زمان و نیروی پردازش کافی تقریبا می توانیم همه ی رمزها را در بررسی های تئوری حل کنیم.
برنادر پارسن، مدیر ارشد بخش فناوری شرکت امنیت نرم افزار BeCrypt، در این باره توضیح می دهد که دو روش اصلی رمزگذاری مجزا وجود دارد. روش رمزنگاری متقارن که به دوران امپراطوری روم برمی گردد و رمزنگاری نامتقارن که قدمت چندانی ندارد.
در رمزنگاری متقارن یک فایل (برای مثال برای حفظ اطلاعات ذخیره شده در یک لپ تاپ در ماجرای سرقت) از یک تراشه ی منفرد برای رمزگذاری و رمزگشایی اطلاعات استفاده می شود. پارسن می گوید: "با افزایش درک عمومی نسبت به فعالیت های رمزشناسی، الگوریتم های زیادی مبتنی بر مسایل پیچیده ی ریاضی به این حوزه سرازیر شد."
قبل از هر چیز باید بدانیم که این مسایل با استفاده از روش های معمول محاسبه قابل حل نیستند. هم چنین بیان این نکته ضروری است که تنظیم این مسایل نه تنها به مهارت های خاصی در حوزه ی ریاضیات نیازمند است بلکه برای جلوگیری از بروز مشکلات به هنگام مبادله ی فایل ها، گروه های مختلف باید برای استفاده از الگوریتم های مشابه رمزنویسی و رمزگشایی با یکدیگر توافق داشته باشند.
درنتیجه ی این محاسبات و با ظهور کامپیوترهای مدرن در اواسط دهه ی 70 استانداردهای این رشته به بازار معرفی شد. از اولین استانداردها می توانیم به استاندارد رمزنگاری اطلاعات (DES)، الگوریتمی که از تراشه هایی به طول 56 بیت استفاده می کند، اشاره کنیم. در آن زمان بانک ها از DES در دستگاه های خودکار تحویل پول استفاده می کردند، اما با افزایش قدرت پردازش، DESهای سه تایی جای آن ها را گرفتند. DESهای سه تایی اطلاعات مشابه را سه بار و با استفاده از الگوریتم DES اجرا می کردند، به این ترتیب عملکرد آن را تضمین می کردند.
پارسن می گوید: "در اواخر دهه ی 80 شیوه ی فعالیت DESهای سه تایی زیر سوال قرار گرفت. یک روش رمزنویسی جدید به نام AES (استاندارد رمزنویسی پیش رفته) در سال 2001 پیش نهاد شده است و هنوز هم بی هیچ مشکلی پاسخ گوی مشکلات است.
رمزنویسی متقارن روش قابل قبولی است اما اگر می خواهید گیرنده، پیغام رمزی شما را رمزگشایی کند، چه گونه اطمینان حاصل می کنید که این پیغام به فرد مورد نظر برسد؟ می توانید تراشه را با یک تراشه ی دیگر رمزنویسی کنید، اما مشکل فرستادن این تراشه ی دوم به گیرنده ی مورد نظر هنوز هم به قوت خود باقی است. نبود امکان انتقال فیزیکی پیام ها در تجارت راه را برای تجاوز و رمزگشایی بدون اجازه ی آن ها برای افراد فرصت طلب گشوده است و این جا است که روش دوم؛ یعنی رمزنگاری نامتقارن (کلید عمومی رمزگشایی) قابلیت های خود را نشان می دهد. کلید عمومی رمزگشایی از دو کلید استفاده می کند: روش عمومی و روش اختصاصی. در صورت استفاده ی یک روش برای رمزنگاری با روش دیگر رمزگشایی می کنیم. اگر شرکت A قصد دارد پیغامی را به شرکت B بفرستد از کلید عمومی شرکت B استفاده می کند. این کلید رمزنویسی در اختیار همه ی کارکنان این شرکت است. با یک بار رمزنگاری تنها راه برای رمزگشایی این پیغام به کاربردن کلید اختصاصی است که فقط فرد گیرنده آن را داراست. ایجادکنندگان این روش هم چنین بخش امنیتی RSA را به وجود آوردند که در تولیدات فعلی خود نیز از الگوریتم فوق استفاده می کند.
مایک وگارا، رییس بخش مدیریت تولید RSA، می گوید: "کلید رمزنویسی متقارن همواره از روش نامتقارن سریع تر عمل می کند، بنابراین کافی است برای رمزنگاری از روش متقارن استفاده کرده، الگوریتم RSA را برای رمزگشایی به کار برید. کم ترین طول تراشه ی AES، 128 بیت و کم ترین طول تراشه ی الگوریتم RSA، 1024 بیت است. اما عامل برقراری توازن در این میان به گفته ی نیکو ون سومرن، رییس بخش فناوری در شرکت تولیدکننده ی تراشه های رمزنگاری، رمزگشایی RSA بسیار مشکل است. او ادعا می کند که از نظر زمانی رمزگشایی تراشه های RSA، 30 هزار واحد زمانی طول می کشد. روش جای گزین الگوریتم RSA، منحنی رمزنگاری بیضوی است که با 160 بیت کار می کند. از این منحنی به عنوان کلید رمزنگاری نامتقارن در تلفن های هوش مند استفاده می شود.
اما استفاده از این راه حل نیز مشکل تایید را حل نمی کند. اگر شرکت A با استفاده از کلید عمومی B تراشه ای را رمزنگاری نکند و آن را برای شرکت B ارسال کند، با هیچ روشی نمی توانیم بفهمیم که این تراشه را شرکت A فرستاده است. ممکن است پای دسته ی سومی در میان باشد و قصد آن ها از فرستادن این پیغام گیج کردن شرکتB باشد.امضای دیجیتالی پایانی بود برای تمام این مشکلات، به این شکل که افراد تراشه ها و پیغام های ارسالی خود را امضا می کنند.
شرکت Aبا استفاده از کلید خصوصی خود امضایی دیجیتالی طراحی می کند. مانند قبل این شرکت پیغام مورد نظر خود را با استفاده از یک الگوریتم متقارن رمزنگاری می کند، سپس با به کاربردن کلید عمومی B تراشه را رمزنگاری می کند. اما شرکت A با استفاده از یک الگوریتم محاسباتی به نام تابع مخرب پیغام بدون رمز را اجرا می کند. این تابع زنجیره ای منفرد از اعداد تولید می کند. سپس این زنجیره را با کلید اختصاصی خود رمزنگاری می کند. در مرحله ی آخر همه چیز به شرکت B ارسال می شود.
مانند گذشته شرکت B از کلید اختصاصی خود برای رمزگشایی تراشه ی متقارن و هم چنین پیغام A استفاده می کند. در مرحله ی بعد B از کلید عمومی A برای رمزگشایی زنجیره ی تخریب استفاده می کند. در واقع B از همان الگوریتم مورد استفاده ی A برای ساختن زنجیره ی یاد شده برای رمزگشایی به کار می برد. در صورت تطابق این دو الگوریتم، B به دو نکته ی اساسی پی می برد: اول این که این پیغام همان پیغام ارسالی A از طریق الگوریتم یاد شده است و در طول مسیر، مورد سو استفاده قرار نگرفته است. دیگر این که این پیغام، به طور قطع از جانب A ارسال شده است؛ زیرا B با کلید عمومی A آن را رمزگشایی کرده است. به این معنا که این پیغام با کلید اختصاصی مشابهی رمزنگاری شده است.
الگوریتم های مخرب، مانند رمزنگاری متقارن ویژگی های متنوعی دارد. MD5 هنوز هم در بسیاری از سیستم ها کاربرد دارد، اما در اواسط دهه ی 90 آژانس امنیت ملی، SHA-1 را جای گزین آن کرد. البته امنیت این روش نیز توسط جامعه ی رمزنگاران مورد سوال قرار گرفته است.
البته باید توجه داشته باشیم که شکست یک الگوریتم تمام یک پروژه را زیر سوال نمی برد. دیوید نکاش، نایب رییس بخش تحقیقات و نوآوری شرکت کارت هوشمند گمپلوس، می گوید: "وقتی کل عملکرد یک تابع زیر سوال قرار می گیرد، نتایج مستقیم و بلافاصله نیستند. بسیاری از ایرادها در مرحله ی نظری باقی مانده، در دنیای واقعیت تحقق نمی یابند. به طور معمول کمیته ی رمزنگاری پس از یک حمله ی تئوریک همه ی جوانب را بررسی و راه کارهای لازم را به اطلاع افراد می رساند.
کلید عمومی رمزگشایی هنوز هم با مشکلات زیادی روبه رو است، برای مثال همواره باید از صحت کلیدهای عمومی و اختصاصی و جلوگیری از سواستفاده ی برخی افراد، از آن ها مطمئن شد. برخی سازمان های تایید شده (مانند VeriSign) برای مدیریت و کنترل تولید این کلیدها (زیربنای کلیدهای عمومی(PKI)) ایجاد شده است. این سازمان ها علامت های مشخصی را برای کلیدهای شرکت ها در نظر می گیرند. البته به دلیل مشکلاتی که از جانب برخی شرکت ها مانند شرکت پشتیبانی فناوری بالتیمور ایجاد شد، افراد دیرتر از آن چه که انتظار می رفت به این روش اعتماد کردند.
با تمام این توضیحات چه مشکلی وجود داشت؟ اندی مالهلند، مدیر بخش فناوری روز در کپجمینی، می گوید: "در آن زمان پرداختن به چنین مساله ای هنوز خیلی زود بود. 5 سال در زمان توسعه ی PKI افراد نامناسبی به تجارت آن لاین مشغول بودند. در آن زمان حجم تجارت آن لاین بسیار کم بود." او می گوید: "ما در واقع بدون هیچ فعالیت بازرگانی تبلیغی موفقیت زیادی در PKI به دست آوردیم. اما اگر PKI در سال 2005 ایجاد شده بود، عکس العمل ها متفاوت بود."
وکلای PKI مانند وگارا برای مبارزه با این نظریه ی عمومی که استفاده از PKI را برای مصرف کنندگان مشکل می داند، بیش تر فناوری مربوط به کلید عمومی مانند Secure Sockets Layer و Transport Layer Security را در اختیار عموم قرار می دهد. این فناوری آیکن قفل مربوط به مرورگر امنیتی را دربر دارد. برای بهره برداری از این امکان نیازی به هیچ مجوزی نیست.
آرتر بارنز، مشاور ارشد موسسه ی امنیتی دیاگنال، می گوید در بسیاری موارد وقتی به مجوز هر دو گروه مشتری و سرور نیاز باشد PKI برای مصرف کنندگان مشهود و کارآمد نیست.
افرادی که این مطلب را باور ندارند باید به مقاله ی "چرا جانی نمی تواند به راحتی به هر جا که می خواهد سرک بکشد؟" نوشته ی آلما ویتن نگاهی بیندازند. این مقاله به بررسی این مطلب می پردازد که بسیاری از افراد تحمل صرف 90 دقیقه برای امضا و رمزنگاری پیغام های خود را ندارند و به همین دلیل عده ی بسیاری از شرکت کنندگان در تست ویتن در این تست شکست خوردند.
شرکت کنندگان در آزمون از PGP، یک ابزار نرم افزاری کلید عمومی رمزنگاری ساخته ی فیل زیمرمن در سال 1991، استفاده می کردند. عملکرد PGP خارق العاده است؛ زیرا مشکلات مجوز بسیاری از گونه های PKI را با به کار بردن "دنیای وب تاوم با اعتماد" پشت سر گذاشته بود. در این مدل مجوز گواهی نامه جای خود را به افراد مورد اعتمادی که با امضا کردن به جای دیگران کلیدهای آن ها را تایید می کنند.
PGP زیمرمن را در تعرض با دولت ایالات متحده قرار داد، مسئولان امنیتی این دولت معتقدند این روش کنترل امنیتی را دچار مشکل می کند. مساله تا جایی پیش رفت که مسئولان امنیتی ایالات متحده علیه او اقامه ی دعوی کردند. مساله ی دخالت حکومت ها در رمزنگاری هنوز هم مورد اعتراض بسیاری از شرکت های خصوصی است. گذشته از کنترل خارجی آگاهی دولت ها از رمزها و توانایی آن ها به رمزگشایی، هسته ی مرکزی این مجادلات را به خصوص در انگلستان و پس از تصویب قانون نظارتی قدرت تحقیقات در سال 2000، تشکیل می دهد.
گوین مک گینتی، مشاور حقوقی در مرکز مشاوره ی IT پینسنت ماسنز، می گوید: این قانون دولت ها را در شرایط خاصی مجاز به جست وجو در حریم خصوصی اشخاص می داند. "اولین اصل در این مورد این است که شرکت ها در صورت امکان می توانند اطلاعات مورد نیاز ماموران دولت را در بدون کلید آن در اختیار آن ها قرار دهند، در غیر این صورت رمزگشایی مجاز است."
همه ی این مسایل در بررسی های اولیه پاسخ گو به نظر می رسد، اما برخی روش های رمزنگاری مانند steganography کارایی چنین قوانینی را زیر سوال می برد. در این روش گونه ای از اطلاعات در پس زمینه ی گونه ی دیگر پنهان می شود: برای مثال یک پرونده ی فایل word در پس زمینه ی یک فایل Jpeg.
ویژگی های این ابزار جدید چندان مورد توجه بارنز قرار نگرفته است. او می گوید:
"steganography به عنوان یک ابزار غیر قابل کشف به بازار عرضه شده است ولی در مدتی کوتاه عکس این مطلب اثبات شده است. فقط باید بدانید دنبال چه نوع اطلاعاتی می گردید."
امروزه علم رمزنگاری به مرحله ای از رشد و پختگی رسیده است که به راحتی در معرض تغییرات گسترده قرار نمی گیرد. الگوریتم های متقارن و نامتقارن زیادی وجود دارند که برای راضی نگاه داشتن طرف داران رمز و رمزنگاری کفایت می کنند و بسیاری از آن ها برای مدیران IT قابل تشخیص نیستند.
با وجود این چالش ها هم چنان به قوت خود باقی است. عملکرد ضعیف PKI گودلی عمیق در بازار جهانی رمزنگاری برجای گذاشته است. برای پر کردن این فواصل به نوعی مدل مدیریت شناخت نیاز است.
رمزنگاری در شبکه
مراحل اولیه ایجاد امنیت در شبکه
شبکه های کامپیوتری زیر ساخت لازم برای عرضه اطلاعات در یک سازمان را فراهم می نمایند . بموازات رشد و گسترش تکنولوژی اطلاعات، مقوله امنیت در شبکه های کامپیوتری ، بطور چشمگیری مورد توجه قرار گرفته و همه روزه بر تعداد افرادی که علاقه مند به آشنائی با اصول سیستم های امنیتی در این زمینه می باشند ، افزوده می گردد . در این مقاله ، پیشنهاداتی در رابطه با ایجاد یک محیط ایمن در شبکه ، ارائه می گردد .
سیاست امنیتی
یک سیاست امنیتی، اعلامیه ای رسمی مشتمل بر مجموعه ای از قوانین است که می بایست توسط افرادیکه به یک تکنولوژی سازمان و یا سرمایه های اطلاعاتی دستیابی دارند، رعایت و به آن پایبند باشند . بمنظور تحقق اهداف امنیتی ، می بایست سیاست های تدوین شده در رابطه با تمام کاربران ، مدیران شبکه و مدیران عملیاتی سازمان، اعمال گردد . اهداف مورد نظر عموما" با تاکید بر گزینه های اساسی زیر مشخص می گردند .
" سرویس های عرضه شده در مقابل امنیت ارائه شده ، استفاده ساده در مقابل امنیت و هزینه ایمن سازی در مقابل ریسک از دست دادن اطلاعات "
مهمترین هدف یک سیاست امنیتی ، دادن آگاهی لازم به کاربران، مدیران شبکه و مدیران عملیاتی یک سازمان در رابطه با امکانات و تجهیزات لازم ، بمنظور حفظ و صیانت از تکنولوژی و سرمایه های اطلاعاتی است . سیاست امنیتی ، می بایست مکانیزم و راهکارهای مربوطه را با تاکید بر امکانات موجود تبین نماید . از دیگر اهداف یک سیاست امنیتی ، ارائه یک خط اصولی برای پیکربندی و ممیزی سیستم های کامپیوتری و شبکه ها ، بمنظور تبعیت از سیاست ها است . یک سیاست امنیتی مناسب و موثر ، می بایست رضایت و حمایت تمام پرسنل موجود در یک سازمان را بدنبال داشته باشد .
یک سیاست امنیتی خوب دارای ویژگی های زیر است :
* امکان پیاده سازی عملی آن بکمک روش های متعددی نظیر رویه های مدیریتی، وجود داشته باشد .
* امکان تقویت آن توسط ابزارهای امنیتی ویا دستورات مدیریتی در مواردیکه پیشگیری واقعی از لحاظ فنی امکان پذیر نیست ، وجود داشته باشد .
* محدوده مسئولیت کاربران ، مدیران شبکه و مدیران عملیاتی بصورت شفاف مشخص گردد .
* پس از استقرار، قابلیت برقرای ارتباط با منابع متفاوت انسانی را دارا باشد . ( یک بار گفتن و همواره در گوش داشتن )
* دارای انعطاف لازم بمنظور برخورد با تغییرات درشبکه باشد .( سیاست های تدوین شده ، نمونه ای بارز از مستندات زنده تلقی می گردنند . )
سیستم های عامل و برنامه های کاربردی : نسخه ها و بهنگام سازی
در صورت امکان، می بایست از آخرین نسخه سیستم های عامل و برنامه های کاربردی بر روی تمامی کامپیوترهای موجود در شبکه ( سرویس گیرنده ، سرویس دهنده ، سوئیچ، روتر، فایروال و سیستم های تشخیص مزاحمین ) استفاده شود . سیستم های عامل و برنامه های کاربردی می بایست بهنگام بوده و همواره از آخرین امکانات موجود بهنگام سازی ( patches , service pack , hotfixes) استفاده گردد . در این راستا می بایست حساسیت بیشتری نسبت به برنامه های آسیب پذیر که زمینه لازم برای متجاوزان اطلاعاتی را فراهم می نمایند ، وجود داشته باشد .
برنامه های : IIS ,OutLook , Internet Explorer , BIND و sendmail بدلیل وجود نقاط آسیب پذیر می بایست مورد توجه جدی قرار گیرند . متجاوزان اطلاعاتی ، بدفعات از نقاط آسیب پذیر برنامه های فوق برای خواسته های خود استفاده کرده اند .
شناخت شبکه موجود
بمنظور پیاده سازی و پشتیبانی سیستم امنیتی ، لازم است لیستی از تمام دستگاههای سخت افزاری و برنامه های نصب شده ، تهیه گردد . آگاهی از برنامه هائی که بصورت پیش فرض نصب شده اند، نیز دارای اهمیت خاص خود است ( مثلا" برنامه IIS بصورت پیش فرض توسط SMS و یا سرویس دهنده SQL در شبکه های مبتنی بر ویندوز نصب می گردد ) . فهرست برداری از سرویس هائی که بر روی شبکه در حا ل اچراء می باشند، زمینه را برای پیمایش و تشخیص مسائل مربوطه ، هموار خواهد کرد .
سرویس دهندگان TCP/UDP و سرویس های موجود در شبکه
تمامی سرویس دهندگان TCP/UDP در شبکه بهمراه سرویس های موجود بر روی هر کامپیوتر در شبکه ، می بایست شناسائی و مستند گردند . در صورت امکان، سرویس دهندگان و سرویس های غیر ضروری، غیر فعال گردند . برای سرویس دهندگانی که وجود آنان ضروری تشخیص داده می شود، دستیابی به آنان محدود به کامپیوترهائی گردد که به خدمات آنان نیازمند می باشند . امکانات عملیاتی را که بندرت از آنان استفاده و دارای آسیب پذیری بیشتری می باشند ، غیر فعال تا زمینه بهره برداری آنان توسط متجاوزان اطلاعاتی سلب گردد. توصیه می گردد ، برنامه های نمونه (Sample) تحت هیچ شرایطی بر روی سیستم های تولیدی ( سیستم هائی که محیط لازم برای تولید نرم افزار بر روی آنها ایجاد و با استفاده از آنان محصولات نرم افزاری تولید می گردند ) نصب نگردند .
رمزعبور
انتخاب رمزعبور ضعیف ، همواره یکی از مسائل اصلی در رابطه با هر نوع سیستم امنیتی است . کاربران، می بایست متعهد و مجبور به تغییر رمز عبور خود بصورت ادواری گردند . تنظیم مشخصه های رمز عبور در سیستم های مبتنی بر ویندوز، بکمک Account Policy صورت می پذیرد . مدیران شبکه، می بایست برنامه های مربوط به تشخیص رمز عبور را تهیه و آنها را اجراء تا آسیب پذیری سیستم در بوته نقد و آزمایش قرار گیرد .
برنامه های john the Ripper ، LOphtcrack و Crack ، نمونه هائی در این زمینه می باشند . به کاربرانی که رمز عبور آنان ضعیف تعریف شده است ، مراتب اعلام و در صورت تکرار اخطار داده شود ( عملیات فوق، می بایست بصورت متناوب انجام گیرد ) . با توجه به اینکه برنامه های تشخیص رمزعبور،زمان زیادی از پردازنده را بخود اختصاص خواهند داد، توصیه می گردد، رمز عبورهای کد شده ( لیست SAM بانک اطلاعاتی در ویندوز ) را بر روی سیستمی دیگر که در شبکه نمی باشد، منتقل تا زمینه بررسی رمزهای عبور ضعیف ، فراهم گردد . با انجام عملیات فوق برروی یک کامپیوتر غیر شبکه ای ، نتایج بدست آمده برای هیچکس قابل استفاده نخواهد بود( مگراینکه افراد بصورت فیزیکی به سیستم دستیابی پیدا نمایند) .
برای تعریف رمز عبور، موارد زیر پیشنهاد می گردد :
* حداقل طول رمز عبور، دوازده و یا بیشتر باشد .
* دررمز عبور از حروف کوچک، اعداد، کاراکترهای خاص و Underline استفاده شود.
* از کلمات موجود در دیکشنری استفاده نگردد .
* رمز های عبور ، در فواصل زمانی مشخصی ( سی و یا نود روز) بصورت ادواری تغییر داده شوند .
* کاربرانی که رمزهای عبور ساده و قابل حدسی را برای خود تعریف نموده اند، تشخیص و به آنها تذکر داده شود .( عملیات فوق بصورت متناوب و در فواصل زمانی یک ماه انجام گردد).
عدم اجرای برنامه ها ئی که منابع آنها تایید نشده است .
در اغلب حالات ، برنامه های کامپیوتری در یک چارچوب امنیتی خاص مربوط به کاربری که آنها را فعال می نماید ، اجراء می گردند.دراین زمینه ممکن است، هیچگونه توجه ای به ماهیت منبع ارائه دهنده برنامه توسط کاربران انجام نگردد . وجود یک زیر ساخت PKI ) Public key infrastructure ) ، در این زمینه می تواند مفید باشد . در صورت عدم وجود زیرساخت امنیتی فوق ، می بایست مراقبت های لازم در رابطه با طرفندهای استفاده شده توسط برخی از متجاوران اطلاعاتی را انجام داد. مثلا" ممکن است برخی آسیب ها در ظاهری کاملا" موجه از طریق یک پیام الکترونیکی جلوه نمایند . هرگز یک ضمیمه پیام الکترونیکی و یا برنامه ای را که از منبع ارسال کننده آن مطمئن نشده اید ، فعال و یا اجراء ننمائید . همواره از برنامه ای نظیر Outlook بمنظور دریافت پیام های الکترونیکی استفاده گردد . برنامه فوق در یک ناحیه محدوده شده اجراء و می بایست امکان اجرای تمام اسکریپت ها و محتویات فعال برای ناحیه فوق ، غیر فعال گردد .
ایجاد محدودیت در برخی از ضمائم پست الکترونیکی
ضرورت توزیع و عرضه تعداد زیادی از انواع فایل های ضمیمه ، بصورت روزمره در یک سازمان وجود ندارد .بمنظور پیشگیری از اجرای کدهای مخرب ، پیشنهاد می گردد این نوع فایل ها ،غیر فعال گردند . سازمان هائی که از Outlook استفاده می نمایند، می توانند با استفاده از نسخه 2002 اقدام به بلاک نمودن آنها نمایند . ( برای سایر نسخه های Outlook می توان از Patch امنیتی مربوطه استفاده کرد ) .
فایل های زیر را می توان بلاک کرد :
نوع فایل هائی که می توان آنها را بلاک نمود .
.bas .hta .msp .url .bat .inf .mst .vb .chm .ins .pif .vbe
.cmd .isp .pl .vbs .com .js .reg .ws .cpl .jse .scr .wsc .crt
.lnk .sct .wsf .exe .msi .shs .wsh
در صورت ضرورت می توان ، به لیست فوق برخی از فایل ها را اضافه و یا حذف کرد. مثلا" با توجه به وجود عناصر اجرائی در برنامه های آفیس ، میتوان امکان اجرای برنامه ها را در آنان بلاک نمود . مهمترین نکته در این راستا به برنامه Access بر می گردد که برخلاف سایر اعضاء خانواده آفیس ، دارای امکانات حفاظتی ذاتی در مقابل ماکروهای آسیب رسان نمی باشد .
پایبندی به مفهوم کمترین امتیاز
اختصاص حداقل امتیاز به کاربران، محور اساسی درپیاده سازی یک سیتم امنیتی است. رویکرد فوق بر این اصل مهم استوار است که کاربران می بایست صرفا" دارای حقوق و امتیازات لازم بمنظور انجام کارهای مربوطه باشند ( بذل و بخشش امتیازات در این زمینه شایسته نمی باشد!) . رخنه در سیستم امنیتی از طریق کدهای مخربی که توسط کاربران اجراء می گردند، تحقق می یابد . در صورتیکه کاربر، دارای حقوق و امتیازات بیشتری باشد ، آسیب پذیری اطلاعات در اثر اجرای کدها ی مخرب ، بیشتر خواهد شد . موارد زیر برای اختصاص حقوق کاربران ، پیشنهاد می گردد :
* تعداد account مربوط به مدیران شبکه، می بایست حداقل باشد .
* مدیران شبکه ، می بایست بمنظور انجام فعالیت های روزمره نظیر خواندن پیام های پست الکترونیکی ، از یک account روزمره در مقابل ورود به شبکه بعنوان administrator ،استفاده نمایند .
* مجوزهای لازم برای منابع بدرستی تنظیم و پیکربندی گردد . در این راستا می بایست حساسیت بیشتری نسبت به برخی از برنامه ها که همواره مورد استفاده متجاوزان اطلاعاتی است ، وجود داشته باشد . این نوع برنامه ها ، شرایط مناسبی برای متجاوزان اطلاعاتی را فراهم می نمایند. جدول زیر برخی از این نوع برنامه ها را نشان می دهد .
برنامه های مورد توجه متجاوزان اطلاعاتی
explorer.exe, regedit.exe, poledit.exe, taskman.exe, at.exe,
cacls.exe,cmd.exe, finger.exe, ftp.exe, nbstat.exe, net.exe,
net1.exe,netsh.exe, rcp.exe, regedt32.exe, regini.exe,
regsvr32.exe,rexec.exe, rsh.exe, runas.exe, runonce.exe,
svrmgr.exe,sysedit.exe, telnet.exe, tftp.exe, tracert.exe,
usrmgr.exe,wscript.exe,xcopy.exe
* رویکرد حداقل امتیاز ، می تواند به برنامه های سرویس دهنده نیز تعمیم یابد . در این راستا می بایست حتی المقدور، سرویس ها و برنامه ها توسط یک account که حداقل امتیاز را دارد ،اجراء گردند .
ممیزی برنامه ها
اغلب برنامه های سرویس دهنده ، دارای قابلیت های ممیزی گسترده ای می باشند . ممیزی می تواند شامل دنبال نمودن حرکات مشکوک و یا برخورد با آسیب های واقعی باشد . با فعال نمودن ممیزی برای برنامه های سرویس دهنده و کنترل دستیابی به برنامه های کلیدی نظیر برنامه هائی که لیست آنها در جدول قبل ارائه گردید، شرایط مناسبی بمنظور حفاظت از اطلاعات فراهم می گردد .
چاپگر شبکه
امروزه اغلب چاپگرهای شبکه دارای قابلیت های از قبل ساخته شده برای سرویس های FTP,WEB و Telnet بعنوان بخشی از سیستم عامل مربوطه ، می باشند . منابع فوق پس از فعال شدن ، مورد استفاده قرار خواهند گرفت . امکان استفاده از چاپگرهای شبکه بصورت FTP Bound servers ، Telnet و یا سرویس های مدیریتی وب ، وجود خواهد داشت . رمز عبور پیش فرض را به یک رمز عبور پیچیده تغییر و با صراحت پورت های چاپگر را در محدوده روتر / فایروال بلاک نموده و در صورت عدم نیاز به سرویس های فوق ، آنها را غیر فعال نمائید .
پروتکل SNMP)Simple Network Management Protocol)
پروتکل SNMP ، در مقیاس گسترده ای توسط مدیران شبکه بمنظور مشاهده و مدیریت تمام کامپیوترهای موجود در شبکه ( سرویس گیرنده ، سرویس دهنده، سوئیچ ، روتر، فایروال ) استفاده می گردد .SNMP ، بمنظور تایید اعتبار کاربران ، از روشی غیر رمز شده استفاده می نماید . متجاوزان اطلاعاتی ، می توانند از نفطه ضعف فوق در جهت اهداف سوء خود استفاده نمایند . در چنین حالتی، آنان قادر به اخذ اطلاعات متنوعی در رابطه با عناصر موجود در شبکه بوده و حتی امکان غیر فعال نمودن یک سیستم از راه دور و یا تغییر پیکربندی سیستم ها وجود خواهد داشت . در صورتیکه یک متجاوز اطلاعاتی قادر به جمع آوری ترافیک SNMP دریک شبکه گردد، از اطلاعات مربوط به ساختار شبکه موجود بهمراه سیستم ها و دستگاههای متصل شده به آن ، نیز آگاهی خواهد یافت . سرویس دهندگان SNMP موجود بر روی هر کامپیوتری را که ضرورتی به وجود آنان نمی باشد ، غیر فعال نمائید . در صورتیکه بهر دلیلی استفاده از SNMP ضروری باشد ، می بایست امکان دستیابی بصورت فقط خواندنی در نظر گرفته شود . در صورت امکان، صرفا" به تعداد اندکی از کامپیوترها امتیاز استفاده از سرویس دهنده SNMP اعطاء گردد .
تست امنیت شبکه
مدیران شبکه های کامپیوترهای می بایست، بصورت ادواری اقدام به تست امنیتی تمام کامپیوترهای موجود در شبکه (سرویس گیرندگان، سرویس دهندگان، سوئیچ ها ، روترها ، فایروال ها و سیتستم های تشخیص مزاحمین ) نمایند. تست امنیت شبکه ، پس از اعمال هر گونه تغییر اساسی در پیکربندی شبکه، نیز می بایست انجام شود .
رمزنگاری و امنیت تبادل داده
1- مقدمه
رمزنگاری از دیر بازبه عنوان یک ضرورت برای حفاظت ازاطلاعات خصوصی در مقابل دسترسی – های غیر مجاز درتجارت و سیاست و مسایل نظامی وجود داشته است به طور مثال تلاش برای ارسال یک پیام سری بین دو هم پیمان به گونه ای که حتی اگر توسط دشمن دریافت شود قابل درک نباشد، در رم قدیم نیزدیده شده است(رمز سزار).در سالیان اخیر رمزنگاری وتحلیل رمز از یک هنر پا را فراترگذاشته ویک علم مستقل شده است و در واقع به عنوان یک وسیله عملی برای ارسال اطلاعات محرمانه روی کانا ل های غیر امن همانند تلفن ، ماکرویو و ماهواره ها شناخته می شود.پیشرفت علم رمز نگاری موجب به وجود آمدن روشهای تحلیل مختلفی شده است به گونه ای که به طور متناوب سیستم های رمز مختلف شکسته شده اند . معروف ترین نمونه این نوع سیستمها ماشین "انیگما " بوده است . انیگما ماشین رمز گذار و کد گذار وکد کننده ای بوده است که حزب نازی در زمان جنگ جهانی دوم برای ارسال پیام ها یشان از طریق رادیو به سایر نقاط استفاده می کردند .
رمزنگاری که به طور عمده به دو بخش رمزنگاری متقارن یا رمزنگاری با کلید خصوصی و رمزنگاری نامتقارن یا رمزنگاری با کلید عمومی صورت می گیرد، تلاش می کند برای ایجاد یک ارتباط سری از طریق سیستمهای مخابراتی و شبکه های کامپیوتری مباحث مربوط به محرمانگی و احراز هویت، را تحت فرضهای مشخص به درستی اثبات نماید .
2- الگوریتم های رمزنگاری کلید خصوصی
رمزهای کلید خصوصی بر مبنای نوع عملکرد ، چگونگی طراحی و پیاده سازی و کاربردهایشان به دو گونه رمزهای قطعه ای و رمزهای دنباله ای تقسیم می شوند . که در هر یک از آ نها عملکرد رمز نگاری به صورت یک عملکرد دوجانبه بین دو طرف فرستنده و گیرنده می باشد که با ایجاد یک ارتباط اولیه با یکدیگر روی کلید خصوصی توافق میکنند به گونه ای که دشمن آن کلید را نداند. فرستندهS می خواهد پیام m1,….mi را به گونه ای به طرف گیرنده R بفرستد که او بتواند به محتوای پیام دست یابد و در عین حال حریف مخالف A نتواند محتوای پیام را درک کند حتی اگر A تمامی آنچه بین R و S انتقال می یابد را دریافت نماید.
به همین منظور فرستنده S هر متن روشن mi رابه وسیله الگوریتم رمزگذاری E و کلید خصوصی به متن رمز شده تبدیل میکند ودریافت کننده نیزکه متن رمز شده را دریافت کرده می تواند با الگوریتم رمز گشائی D و کلید خصوصی متن اصلی را بدست آورد.
2-1- رمزهای دنباله ای
در طراحی رمزهای دنباله ای یک مولد بیت شبه تصادفی نقش تولید کننده رشته کلید را برای سیستم رمزدنباله ای دارد . در واقع این مولد میتواند مولد رشته کلید نیز محسوب شود . از دیدگاه رمز نگاری یک مولد رشته کلید امن باید دارای سه پارامتر مهم زیر باشد :
1- پریود رشته کلید تولید شده باید به حد کافی بزرگ باشد تا با طول پیام ارسال شده سازگاری داشته باشد .
2- دنباله بیت خروجی حاصله از مولد باید به راحتی قابل تولید کردن باشد .
3- بیتهای خروجی باید به سختی قابل پیش بینی باشند .
در واقع با در اخثیار داشتن مولد و اولین n بیت خروجی a(0) ، a(1) …….a(n-1) از لحاظ محاسباتی پیش بینی بیت n+1 ام یعنی a(n+1) در دنباله با احتمال بیشتر از 1/2 باید غیر ممکن باشد.
حال مسئله اصلی این است با کدام مبنا واصولی میتوان این نتیجه گیری را انجام داد که سیگنال های خروجی از یک مولد رشته کلید به سختی قابل پیش بینی است ؟ به طور کلی اصولی قابل بررسی و کاربردی ارائه شده است تا امنیت مولد های بیت را ضمانت کند . در واقع تا کنون روشهای بسیاری برای تولید رشته کلیدهای امن پیشنهاد شده است و در مقابل نیز تحلیل هائی طرح شده است که با توجه به پیچیده ترشدن دنباله ها به صورت ماهرانه تری به تحلیل دنباله ها می پردازند. در ادامه به برخی از روشهای تولید بیت های شبه تصادفی می پردازیم.
2-1-1- ساختار مولد های بیت شبه تصادفی و رمزهای دنباله ای
غیر قابل پیش بینی بودن یک دنباله همانند تصادفی بودن آن تعبیر می شود برای اینکه یک دنباله تصادفی باشد پریود آن باید به حد کافی بزرگ باشد و همچنین تکه های گوناگون درون دنباله دارای توزیعی تا حد ممکن یکنواخت باشند. در اینجا به طور خلاصه چندروش تولید بیت های شبه تصادفی ودنباله های شبه تصادفی شرح داده شده است .در این روش ها به طور مشخص ثبات های انتقال خطی برای ساختن مولدها به کار گرفته شده اند.
2-1-2- مولدهای همنهشتی خطی(LCG)
در این روش برای تولید اعداد شبه تصادفی از روابط بازگشتی نظیر x j+1=axj+b بهره گرفته میشود .در اینجا سه تا ئیa) ،b،m) پارامترهائی را مشخص میکنند ،که مولد را شرح میدهند از این سه تائی به عنوان کلید مخفی میتوان استفاده کرد.با توجه به اینکه x0 هسته مولد میباشد ، اگر پارامترها بدقت انتخاب شوند اعدادی نظیر xj به صورت تکراری نخواهیم داشت مگر آنکه تمامی اعداد صحیح درون فاصله [0,m-1] در خروجی ظاهر شده باشند ." بویر" نشان داد که دنباله های تولید شده توسط LCG ها از نظر رمز نگاری امن نیستند . درواقع با در اختیار داشتن قطعه ای طولانی ازدنباله میتوان با روشهائی پارامترهای mو b وa را بازسازی نمود .
2-1-3- ثبات های انتقال پس خور ) FSR (
دنباله های مورد استفاده در رمزنگاری می توانند بر مبنای ثبات های انتقال طراحی بشوند حتی وقتی که دارای پس خوری خطی باشند . یک ثبات انتقال پس خور از N فلیپ فلاپ و یک تابع پس خور تشکیل شده است . تابع پس خور هر عنصر جدید همانندt ) ) a از دنباله را به صورت جزئی از عناصری که از قبل تولید شده اند همانند a(t-1) ،…… a(t-n-1) ، a(t-n) بیان می کند . گونه ای از توابع پس خور وجود دارند که به صورت زیر عمل میکنند:
a(t) =g( a(t-1), a(t-2) ………,a(t-n+1)) a(t-
n)
بسته به اینکه آیا تابع g خطی است (با عملگر Xor تنها قابل اجراست( یانه ،مولد یک ثبات انتقال پس خور خطی (LFSR) یا ثبات انتقال پس خور غیر خطی (NLFSR) خوانده می شود.
پریود دنباله تولید شده بوسیله یک FSR به تعداد مراحل ذخیره سازی و جزئیات اتصال پس خور بستگی خواهد داشت و بطور کلی حداکثر پریود یک دنباله که توسط یک FSR دارای n مرحله تولید میشود ، 2 n خواهد بود .
2-1-4- ثبات های انتقال پس خور غیر خطی (NLFSR )
دیاگرام حالت گونه هائی از FSR ها میتواند شامل چرخه های کوچک باشد و حالات تکراری داشته باشد و دنباله اگر در یکی از این حالات قرار بگیرد ممکن است نا امن شود . یک روش مناسب طراحی ثبات انتقال n مرحله ای که دنباله هائی با حداکثر پریود 2 n تولید می نماید و دنباله های " دی بروئن " می باشد.که تعداد دنباله های ممکنn مرحله ای آن به بزرگی 2 (2n-1)-n میباشد.که همگی آنها دارای توزیعهای ایده آلی میباشند .اما این دنباله ها که از ثبات های انتقال غیر خطی ساخته میشوند دارای مشکلاتی برای پیاده سازی توسط الگوریتمهای شناخته شده هستند . همچنین تولید سریع این دنباله ها به سختی صورت می گیرد . همچنین برخی از خواص همبستگی بین عناصر تولید شده می تواند راهکارهای مناسبی برای تحلیل این دنباله ها ایجاد نماید .
2-1-5- ثبات های انتقال پس خور خطی (LFSR)
این ثبات ها مدت ها برای کدهای کنترل خطا ، آزمایشهای VLSI و مخابرات طیف گسترده مورد استفاده بوده اند و از جمله مهمترین اجزاء در ساختار مولدهای شبه تصادفی می با شند آنها توابع پس خوری به شکل زیر دارند .
a(t) =c1 a(t-1) c2 a(t-2) …………. c(n-1) a(t-n-1) a(t-n)
c i[0,1]
و با چند جمله ای پس خور زیر نشان داده میشوند .
f(n) = 1+ c1x + c2x2 + ……..+ c( n-1) x ( n-1) + x(n)
به طور کلی برای اینکه حداکثر پریود ممکن 2n-1 را برای دنباله خروجی از یک LFSR داشته باشیم ، چند جمله ای پس خور آن می باید اولیه باشد . تعداد چند جمله ای های اولیه درجه n از رابطه (2 n -1)/n بدست می آید که(n) نمایانگر تابع اویلر می باشد که تعداد اعداد صحیح مثبت و اول کوچکتر از عدد n را نشان میدهد .
به هر صورت با توجه به توابع توزیع احتمال این دنباله ها با حداکثر پریود دیده می شود که خواص آماری مطلوبی در این دنباله ها به وجود می آید . اما در برابر این خصوصیات مولد های شبه تصادفی وبه علت استفاده گسترده از ثبات های انتقال در این گونه مولدها روش های تحلیل فراوانی نیز برای تحلیل دنباله خروجی حاصل طرح شده که استفاده از این ثبات ها را در ساختار مولدهای بیت شبه تصادفی دچار مشکل می کند .
2-1-6- کاربردهای رمزهای دنباله ای ،مزایا و معایب
بسیاری از رمزهای دنباله ای کاربردی بر مبنای LFSR ها عمل می نمایند و از آنجائیکه یک ثبات انتقال در واقع آرایه ای از بیت های حافظه و یک سری فیدبک می باشد و با یک سری Xor قابل پیاده سازی است ، می توان امنیت قابل توجهی را تنها با تعداد کمی گیت منطقی بدست آورد .بنابراین رمزهای دنباله ای می توانند برای مصارف سخت افزاری بسیار موثر و کارا باشند .
اما در عین حال مشکلی که LFSR ها و در نتیجه رمزهای دنباله ای مبتنی بر آنها دارند ، ناکارآمد بودن آنها در نرم افزار است . در واقع برای مناسبت های نرم افزاری چندجمله ایهای فیدبک و تعداد فیدبک ها بسیار مهم می باشد. در حالیکه موثر انتخاب نکردن این چندجمله ایها امکان حملات وابستگی را نیز ممکن است فراهم آورد .
بنابراین رمزهای دنباله ای حتی انواع ساده تر آنها در اجراهای نرم افزاری نمی توانند سریعتر از رمزهای قطعه ای عمل نمایند . رمزهای دنباله ای به علت پیاده سازی موثرتر سخت افزاری کاربردهای فراوانی در صنایع نظامی به خصوص خطوط مخابرات نظامی دارند . از آنجا که در اینگونه رمزها هر یک از بیت های داده های اصلی به صورت مستقل رمز می شوند ، بکارگیری اینگونه رمزها در لینک های مخابراتی پر از اغتشاش و نویز به جهت امکان آشکارسازی و تصحیح خطاها موثرتر می باشد . در عین حال که برای رمز نمودن حجم عظیمی از داده ها بعلت سرعت اجرای بالا، رمزهای دنباله ای می توانند گزینه مناسبی باشند . همانطور که در سیستم های امنیت مخابراتی و رمزنگاری نظیر BEU ها دیده می شود .
تحلیل و آنالیز نمودن رمزهای دنباله ای نیز معمولاً ساده تر از رمزهای قطعه ای صورت می گیرد . در عین حال امکان طرح حملات وابستگی بر روی اینگونه سیستم ها که بر مبنای ثبات های انتقال خطی عمل می نمایند ، بیشتر است اغلیب رمزنگارها سعی می نمایند اجزاء مختلف اینگونه الگوریتم ها را در حالتی غیرخطی ترکیب نمایند و یا از ثبات های انتقال غیرخطی استفاده نمایند تامصونیت وابستگی لازم پدید آید.
2-1-7- نمونه های رمزهای دنباله ای پیاده سازی شده
رمزهای دنباله ای بسیاری در طرح های مختلف پیاده سازی شده اند .
A5 یک الگوریتم رمز دنباله ای است که برای رمز نمودن سیستم ارتباط گروهی موبایل و یا در واقع سیستم مخابراتی GSM به کار می رود . این الگوریتم برای رمز نمودن لینک ارتباطی میان گوشی تلفن به ایستگاه پایه به کار می رود .
الگوریتم XPD/KPD که توسط شرکت هیوز طراحی شده است ، در رادیوهای تاکتیکی نظامی ارتش و تجهیزات جهت یاب به کار رفته است .
الگوریتم رمز دنباله ای NaNoTEQ که نام یک شرکت الکترونیکی در آمریکای جنوبی است برای رمز نمودن ارتباطات و مراسلات از طریق فاکس در اداره پلیس آمریکای جنوبی بکار رفته است .
می توان انواع دیگر رمزهای دنباله ای طرح شده را بیان نمود ، اما آنچه مشخص است اینگونه رمزها در تجهیزات مخابراتی و سخت افزاری کاربرد گسترده و فراوان دارند . به خصوص در خطوط رادیوئی که امکان اغتشاشات و نویزهای فراوان در آنها موجود می باشد . اما به علت سرعت نامناسب اجرای نرم افزاری آنها ، برای استفاده در شبکه های کامپیوتری و یا ایجاد امنیت در پروتکل های امنیت اینترنت بکار نمی روند .
2-2- رمز قطعه ای
رمزهای قطعه ای که از جمله پرکاربردترین رمزهای کلیدخصوصی هستند ، به علت قابلیت های فراوان که در اجرای سریعتر و برقراری امنیت و ایجاد مقاومت در برابر انواع حملات متن منتخب و سایر انواع حمله های رمزنگاری دارند ، یکی از بهترین گزینه ها در ایجاد اهداف طرح های رمزنگاری می باشند . یک رمز قطعه ای قدرتمند قابلیت آن را دارد که توسط روش های مختلف بکارگیری به عنوان یک رمز دنباله ای قوی استفاده شود و یا اینکه ایجاد یک سامانه احراز هویت نماید .بر همین مبنا همواره سعی می شود یک الگوریتم رمز قطعه ای بر مبنای راهکارها و دستاوردهای نوین روش های طرح اینگونه رمزها و با توجه به تحلیل های جدید تر سامانه های رمز و حمله هائی که بر مبنای این تحلیل ها برروی رمز های قطعه ای طرح می شوند ، بدست آید ودر عین حال یک ساختار منظم ، قابل توسعه و در عین حال نوین از رمزهای قطعه ای معرفی شود که در صورت نیاز به توسعه در طول کلید سری مورد استفاده و یا طول قالب داده های ورودی به الگوریتم ، اصل ساختار الگوریتم توانائی این توسعه را بدون از دست دادن ساختار کلی شبکه رمز ، عملگرها و مبناهای بکارگرفته شده داشته باشد . الگوریتم رمز طرح شده باید بتواند امنیت مورد نیاز اطلاعات محرمانه را ایجاد نماید و حاشیه امنیت لازم برای حمله های نوین ارائه شده و قابل توسعه را نیز داشته باشد . در طراحی الگوریتم ، امنیت کامل وقابل اثبات در مقابل حمله های موثر و پرکاربردی نظیر حمله های تفاضلی و خطی و سایرحمله هائی که مبنای تازه تری برای تحلیل رمزهای قطعه ای دارند ، هدف اولیه بوده و در ادامه نیزپیاده سازی و اجرای موثر رمز که لازمه طراحی می باشد جزء اهداف در نظر گرفته می شود . چنین طرحی می تواند با ایجاد حداکثر امنیت ممکن در یک سامانه اطلاعاتی به سرعت اجرا شود و حوزه کاربردهای مختلف اطلاعات را برآورده سازد .در واقع با توجه به نوع اطلاعات مورد استفاده از لحاظ استراتژیک و تاکتیکی بودن می توان در کاربردهای مختلف مورد نیاز طرح کلی این الگوریتم را استفاده نمود .
رمزهای قطعه ای که تعریف آنها بر مبنای ترکیب توابع جایگزینی و جایگشتی می باشد ، ساختارهای متعددی دارند که هر یک مزایا و کاربردهای متعدد مربوط به خود را دارند . خواص رمزهای قطعه ای امن را به صورت زیر می توان بیان نمود .
1- دستیابی به متن اصلی از طریق متن رمزگذاری شده بدون در اختیار داشتن کلید باید غیرممکن باشد . می توان این خصلت را با یکطرفه بودن الگوریتم رمزنگاری مقایسه نمود . در واقع کلید خصوصی الگوریتم دریچه تابع رمزنگاری می باشد که با در اختیار داشتن آن می توان از متن رمز شده ، متن اصلی را بدست آورد .
2- آگاهی از الگوریتم نباید سبب تضعیف رمز شود . مخفی نگاه داشتن جزئیات الگوریتم در امنیت آن نقشی ندارد و امنیت الگوریتم باید تنها به کلید سری بستگی داشته باشد .
3- هر بیت متن رمزشده باید به تمامی بیت های متن اصلی وابسته باشد . در اینصورت کوچکترین تغییردر متن اصلی ، متن رمزشده متفاوتی ایجاد می نماید . به اینگونه از رمزها کامل گفته می شود .
4- هر بیت متن رمزشده می بایست به تمامی بیت های کلید سری وابسته باشد که در اینحالت در صورت کوچکترین تغییر در کلید ، متن رمزشده متفاوتی ایجاد می شود .
5- تغییر هر بیت در داده های ورودی بدون تغییر کلید ، باید موجب تغییرات عمده در قطعه خروجی شود .
6- تغییر هر بیت در کلید سری بدون تغییر متن اصلی ، باید موجب تغییرات عمده در متن رمزگذاری شده گردد .
7- الگوریتم باید دارای عمل جانشینی بیت ها تحت کنترل داده های ورودی وکلید باشد .
8- الگوریتم باید دارای عملکرد جابجائی بیت ها تحت کنترل داده های ورودی وکلید باشد .
9- الگوریتم رمز نباید دارای ساختار جبری ساده باشد . در غیراینصورت تابع رمزگذاری با یک رابطه دارای بیان جبری ساده معادل خواهد شد .
10-طول متن اصلی باید با طول متن رمز شده برابر باشد .
11-تمامی کلیدهای سری بکار گرفته شده باید رمز قوی تولید نمایند .
خصوصیاتی که بیان شد شرایط لازم برای طرح یک رمز قطعه ای قوی می باشد در حالیکه شروط لازم و کافی برای ارزیابی و حصول اطمینان از امنیت هر سیستم رمزی ، مقاومت آن در برابر حملات نوع اول ، دوم و سوم در رمزنگاری می باشد .
در سال های گذشته بعلت نیازهای فراوانی که برای کاربردهای غیرنظامی رمزنگارها وجود داشته است ، بحث استاندارد سازی الگوریتم های رمزنگاری مطرح شده است . که نمونه های استاندارد شده آن در سال های گذشته DES با ساختاری به صورت فیستل و در سال های اخیر AES بوده که الگوریتم رایندال را با ساختاری نوین و به گونه ای مربعی بکار برده است .
الگوریتم DES از انجام عملیت بر روی قطعه های 1،4،6و 28 بیت بهره می گیرد که این عملکردهاپیاده سازی الگوریتم را برای مصارف نرم افزاری با مشکل روبرو می سازد . اما الگوریتم هائی نظیر FEAL که به منظور پیاده سازی سریع نرم افزاری طراحی شده است ، از زیر عملیات هائی بر روی قطعات 8 بیتی بهره می گیرد . بنابراین دیده می شود که یک الگوریتم رمزنگاری متناسب با پیاده سازی نرم افزاری لزوماً از عملوندهای منطبق با بایت و یا ضرایبی از بایت بهره می گیرد .
2-2-1- احراز هویت و شناسائی و توابع درهم ساز
کاربردهای گوناگون رمز های قطعه ای را می توان توسط مد های کاربردی که تعیین کننده گستره وسیع کاربردی رمزهای قطعه ای در مصارفی نظیر احراز هویت پیام ، مولد های بیت شبه تصادفی ، توابع درهم ساز و مدیریت کلید می باشد ، بیان نمود .
رمزهای قطعه ای در حالات ECB ،OFB ،CBC و CFB بکاربرده می شوند . حالات بکارگیری رمز در مدهای CFBو OFBدر ایجاد مولدهای بیت شبه تصادفی و طراحی رمزهای دنباله ای کاربردهای فراوان دارند. در حالیکه مد OFB دارای مزایائی نظیر امنیت بالا ، انتشار خطای محدود و ایمنی در برابر حمله های لغت نامه ای و فعال می باشد و در عین حال سنکرون نبودن این گونه سیستم ها می تواند معایبی را در این نوع کاربرد به وجود آورد .
مزایای بکارگیری روشهای CBC و CFB را می توان در جامعیت پیام های ارسالی و قابلیت دسترسی گسترده به داده ها و تامین ایمنی در برابر حملات لغت نامه ای و مهم تر از همه تامین کد هویت و شناسائی پیام دانست .که قابلیت احراز هویت رابه کاربردهای رمزهای قطعه ای می افزاید . اما این دو حالت بکارگیری عیوب عمده ای نظیر انتشار خطا در خطوط ارتباطی را می توانند در بر داشته باشند .
استاندارد X909 الگوریتم DES را در حالت CBC به عنوان روش احراز هویت بیان می کند که در هر هفته در حدود5/1 تریلیون دلار از طریق آن میان موسسات مالی به شکل عمده مبادله می شد .
تکنیک های فراوانی نیز موجود می باشد که در آنها نشان داده شده است که از رمزهای قطعه ای می توان در طراحی توابع درهم ساز که از ملزومات روش های احراز هویت و امضاهای دیجیتال می باشند ، استفاده نمود .
3- طراحی الگوریتم رمز قطعه ای
الگوریتم باید به گونه ای طراحی شود که معیارهای طراحی رمزهای استاندارد پیشرفته را برآورده سازد که این معیارها در زیر آورده شده اند .
¨ طول کلید الگوریتم باید حداقل 128 بیت باشد . در واقع طبق آخرین استاندارد های ارائه شده توسط NIST برای جلوگیری از حمله های جستجوی فضای جامع کلی حداقل طول کلید باید 80 بیت باشد که استاندارد آن را برای پیاده سازی مناسب نرم افزاری 128 در نظر می گیرند .
¨ الگوریتم تا حد ممکن کلید ضعیف و نیمه ضعیف نداشته باشد .
¨ پیاده سازی الگوریتم باید روی زمینه های مختلف سخت افزاری و نرم افزاری موثر و کارا باشد . به خصوص شرایطی که پیاده سازی نرم افزاری الگوریتم را با توجه به طرح حاضر ، موثرتر می سازد فراهم شود .
¨ طرح الگوریتم در برابر تبادل های موجود میان امنیت و اجرا در کاربردهای مختلف در رمزنگاری باید بسیار منعطف باشد و قابلیت استفاده برای کاربردهائی نظیر مولد بیت های شبه تصادفی امن ، توابع در هم ساز و MAC را داشته باشد وبرای مقاصدی نظیر احراز هویت و مدیریت کلید نیز قابل بکارگیری باشد .
¨ طرح الگوریتم باید بسیار ساده باشد و به سهولت قابل بیان و آنالیز باشد و در عین حال قابل توسعه باشد .
اما با توجه به شرایطی که الگوریتم های رمز قطعه ای امن باید داشته باشند معیارهای زیر نیز در طراحی الگوریتم و برقراری امنیت آن باید مورد نظر باشد .
¨ الگوریتم به گونه ای طرح شود که عملکرد های رمزگذاری و رمزگشائی آن تاحد ممکن یکسان عمل نمایند و اجرای سخت افزاری و نرم افزاری آنها مشابه یکدیگر باشند .
¨ الگوریتم دارای طرحی موازی باشد و با استفاده از این الگوها پیاده سازی سریعتر و موثرتری داشته باشد .
¨ امنیت الگوریتم در برابر تحلیل های شناخته شده در رمزنگاری همانند حمله های خطی و تفاضلی و تحلیل هائی که مبنای آنها این نوع حمله ها می باشند ، تضمین شده باشد . همچنین حاشیه امنیت لازم را برای حمله های تازه تر داشته باشد .
¨ طرح تولید زیرکلید های الگوریتم ، امن و موثر باشد که در برابر حمله های مرتبط با کلید بتواند استقامت لازم را ایجاد نماید .
¨ طرح کلید الگوریتم قابلیت پیش محاسبه شدن را با حداکثر سرعت ممکن داشته باشد و یا اینکه با حداقل حافظه مورد نیاز و حداکثر سرعت به صورت شناور بتواند زیرکلید ها را تولید نماید .
در طراحی الگوریتم رمز طرح حاضر می بایست تمامی نکاتی را که به عنوان اهداف طراحی بیان شد، لحاظ شود .
3-1- طراحی امنیت و اجرای موثر الگوریتم رمز قطعه ای
هر یک از الگوریتم های رمز قطعه ای لزوماً باید خصوصیاتی را برآورده سازند که این خصوصیات شرایط لازم برای طرح یک رمز قطعه ای قوی می باشند در حالیکه شروط لازم و کافی برای ارزیابی و حصول اطمینان از امنیت هر سیستم رمزی ، مقاومت آن در برابر حملات نوع اول ، دوم و سوم در رمزنگاری می باشد .
حمله های طرح شده بر روی رمزهای قطعه ای نیز می تواند روش هائی برای طرح اینگونه رمز ها پیشنهاد نمایند . در واقع طرح اینگونه حمله ها ، ویژگی ها و معیارهای لازم در رمز های قطعه ای را برای مقاومت در برابر این حمله ها مشخص می نمایند . در ادامه چند حمله مختلف بر روی رمزهای قطعه ای که در اثر برخی خصوصیات تابع رمزگذاری طرح شده ، آورده می شود.
3-2- انواع حملات قابل اجرا بر روی الگوریتم
آزمون جامع فضای کلید: این حمله با در اختیار داشتن چند زوج متن اصلی و متن رمز شده متناظر با آن صورت می گیرد وعبارتست از آزمودن تمامی 2 m کلید ممکن به منظور یافتن کلید اصلی رمزنگاری که همان کلید سری می باشد .
حمله مکملیت : این حمله توسط خاصیت مکملیت صورت می گیرد . در واقع اگر X و Y دو بردار باینری به طول n باشند و X+Y=(1,…,1) باشد ، در اینصورت این دو بردار مکمل یکدیگر می باشند و خواهیم داشت Y=X .
حال اگر f مبین تابع یک رمز قطعه ای باشد و C=f(P,K) ، آنگاه رمز دارای خصلت مکملیت است اگر: P ,K :
f(P,K)=C در اینصورت اگر فضای کلید رمزنگاری K به دو زیر فضای S وS که K=SS باشد در اینصورت آزمون جامع فضای کلید را می توان فقط در فضای S اعمال نمود .
حمله از طریق ویژگی بسته بودن : برای هر رمز قطعه ای به طول n و کلیدی به طول m هر کلید یک تابع جابجائی از بردارهای باینری به طول n را مشخص می نماید . اگر G مجموعه تمام این 2 m جابجائی را نشان بدهد و داشته باشیم H={ Ti*Tj : Ti ,Tj G }و * نماد ترکیب نگاشت ها باشد ، آنگاه G بسته است اگر H=G باشد . در واقع Gبسته است اگر برای هر Tiو Tjدر Gبتوان Tkرا در Gبه گونه ای یافت که برای تمام متون اصلی داشته باشیم :
(Ti*Tj )(P) = Tk(P)
اما از آنجا که یکی از روش های متداول افزایش امنیت رمز های قطعه ای رمزنگاری متوالی هر قطعه می باشد ، ویژگی بسته بودن یک رمز تاثیر این روند تکراری را از بین خواهد برد و موجب ضعف در امنیت رمز می گردد .
سایر حمله های طرح شده بر روی رمزهای قطعه ای همانند حمله ملاقات در میانه ، حمله از طریق ویژگی آفینی و سایر حمله ها می توانند ویژگی های نامطلوب رمزهای قطعه ای را آشکار نمایند . اما بهترین و موثرترین تحلیل های ارائه شده بر روی اینگونه رمزها حمله های خطی وتفاضلی هستند که از جمله قدرتمندترین حمله ها ی نوع دوم و سوم بر روی رمز های قطعه ای می باشند . بنابراین امنیت بسیاری از رمز های قطعه ای به استحکام رمز در برابر این دو حمله بستگی خواهد داشت . در واقع معیار اصلی طراحی هررمز قطعه ای مقاومت دربرابر اینگونه حمله ها و سایر انواع حمله های طرح شده با توجه به شرایط تحلیل گر و آگاهی های او می باشد و تحلیل هائی که در ابتدا بیان شد به عنوان شروط لازم طراحی بکار می روند .
در میان دسته بندی تحلیل های رمزی چهار نوع عمومی از حمله های رمزنگاری وجود دارد که در هر کدام از آنها فرض می شود که تحلیل گر آگاهی لازم وکامل را از الگوریتم رمزگذاری مورد استفاده در اختیار دارد . این تحلیل ها به صورت زیر دسته بندی می شوند .
3-3- چهار نوع عمومی از حمله های رمزنگاری
3-3-1- حمله فقط متن رمز شده
در این نوع حمله تحلیل گر متن رمز شده پیام های مختلف را که همه آنها با استفاده از یک الگوریتم مشابه رمز شده اند ، در اختیار دارد . کار تحلیل گر بدست آوردن متن اصلی پیام های مختلف و یا یافتن کلید استفاده شده در عملکرد رمزگذاری است تا بوسیله آن سایر پیام های رمز شده را بتواند رمزگشائی نماید .
در واقع با در اختیار داشتن C1=EK(P1) تا Ci=EK(Pi) تحلیل گر سعی می نماید P1,…,Pi و K و یا الگوریتمی که بتواند Pi+1 را از Ci+1=EK(Pi+1) نتیجه بگیرد ، بدست آورد .
3-3-2- حمله متن روشن معلوم
در این حمله تحلیل گر نه تنها به متن رمزی پیام های مختلف بلکه به متن روشن این پیام ها نیز دسترسی دارد و کار اصلی او نتیجه گرفتن کلید و یا کلید های استفاده شده برای رمزگذاری پیام ها و یا بدست آوردن الگوریتمی که بتواند پیام های جدید رمزشده با کلید مشابه را رمزگشائی نماید ، می باشد . در واقع با در اختیار داشتن C1=EK(P1) و P1 تا Ci=EK(Pi) و Pi بتواند کلید K و یا الگوریتمی را بدست آورد که Pi+1 را از Ci+1=EK(Pi+1) حاصل نماید .
3-3-3- حمله متن روشن منتخب
در این حمله تحلیل گر نه تنها به متن رمز شده و متن روشن مربوط به آن دسترسی دارد بلکه می تواند متون اصلی را نیز برای رمزگذاری انتخاب نماید . این تحلیل از یک حمله متن روشن معلوم قویتر می باشد زیرا تحلیل گر می تواند بلوک های متن روشن را برای رمزنمودن تعریف نماید و قطعه ای را انتخاب نماید که اطلاعات بیشتری درباره کلید از آن بدست آید . کار تحلیل گر نتیجه گرفتن کلید مورد استفاده در رمزگذاری پیام و یا بدست آوردن الگوریتمی برای رمزگشائی پیام های رمز شده جدید با کلید مشابه می باشد . در واقع با در اختیار داشتن C1=EK(P1) و P1 تا Ci=EK(Pi) و Pi که در آن P1 تا Pi را انتخاب نموده است ، کلید K و یا الگوریتمی برای بدست آوردن Pi+1 از Ci+1=EK(Pi+1) حاصل نماید .
3-3-4- حمله تطبیقی متن روشن منتخب
این نوع تحلیل یک مورد خاص از حمله متن روشن منتخب می باشد که در آن تحلیل گر نه فقط می تواند متن روشن را که رمزگذاری می شود انتخاب نماید بلکه می تواند انتخاب خود را بر مبنای نتایج رمزگذاری قبلی اصلاح نماید . در یک حمله متن روشن منتخب یک تحلیل گر ممکن است فقط قادر به انتخاب یک بلوک بزرگ از متن روشن برای رمزگذاری باشد .اما در یک حمله تطبیقی از نوع متن روشن منتخب او می تواند بلوک کوچکتری از متن روشن انتخاب نماید و سایر بلوک ها را بر مبنای نتایج این بلوک ابتدائی انتخاب نماید و به همین ترتیب ادامه دهد .
چند نوع حمله دیگر بر روی سیستم های رمزنگاری وجود دارد که در موارد خاص می توان از آنها استفاده نمود . همانند حمله متن رمزی منتخب که در آن تحلیل گر امکان انتخاب متون رمزشده را نیز دارد و یا حمله کلید منتخب که در این حمله تحلیل گر آگاهی هائی درباره روابط میان کلید های مختلف در اختیار دارد . اما تحلیل هائی که بر مبنای حمله های متن روشن و متن روشن منتخب صورت می گیرند بسیار معمول تر و واقعی تر می باشند و تحلیل های موثری بر مبنای این حمله ها تا کنون طرح شده است که بر روی بسیاری از رمزها موثر بوده اند . به طور مثال تحلیل های خطی و تفاضلی که بر روی DES موثر بوده اند از این گونه می باشند . در بکارگیری حمله های متن روشن منتخب بیشترین آگاهی از سیستم رمز در اختیار تحلیل گر قرار دارد بنابراین قویترین نوع حمله از نوع متن روشن منتخب می باشد که در آن تحلیل گر آگاهی کامل به الگوریتم رمزنگاری مورد استفاده دارد و امکان انتخاب و نمونه گیری از سیستم رمز را نیز خواهد داشت . بنابراین رمزی که در برابر این نوع حمله مقاوم باشد در بدترین شرایط می تواند امنیت کافی را اعمال نماید .
3-4- ملزومات طرح موثر و کارای نرم افزاری الگوریتم رمز.
3-4-1- در الگوریتم از پرش های شرطی در حلقه درونی الگوریتم باید اجتناب شود . هر تغییر غیر قابل پیش بینی در جریان کنترل الگوریتم به طور طبیعی موجب اختلال در عملکرد مقاوم پردازش و در نتیجه افزایش تعداد سیکل های ساعت مورد نیاز ، خواهد شد . بنابراین به طور مشخص هر عملگر و یا دستور همانند if ، then و یا else در زبان Cو یا اسمبلی موجب پرش در جریان اجرا خواهد شد . پرش ها همچنین آسیب پذیری رمز را در برابر حمله های زمانی که در آورده شده ، افزایش می دهد .
3-4-2- از عملگرهائی که طبیعتاً ساختارهای سنگینی دارند استفاده نشود . در این دسته بندی می توان عملگرهای ضرب و تقسیم و سایر عملگرهائی را که بر روی پردازنده ها به سختی اجرا می شوند، قرار دارند . به طور مثال یک عملگر چرخش/انتقال متغیر ، ( که مقدار چرخش و یا انتقال در مرحله اول مشخص نمی باشد ) بر روی پردازنده پنتیوم نیاز به 4 سیکل ساعت برای اجرا خواهد داشت و در عین حال با هیچ عملگر دیگری نمی تواند به طور همزمان اجرا شود بنابراین به صورت چند زیر مجموعه از عملگرهای ساده انجام می شود و زمان مورد نیاز اجرای آن بیشتر از یک عملگر ساده تنها خواهد بود .
3-4-3- در طرح الگوریتم باید تا حد ممکن تعداد متغیرهای مورد نیاز را محدود نمود . بسیاری از پردازنده های مدرن شامل تعداد زیادی ثبات چندمنظوره می باشند . اما در برخی این تعداد ثبات چند منظوره بسیار کم می باشد . به طور مثال در پنتیوم تنها هفت ثبات چندمنظوره وجود دارد و در صورتیکه در حلقه درونی الگوریتم تعداد زیادی متغیر بکار رود تمامی آنها در ثبات ها قرار نمی گیرند و به علت نیاز به دسترسی به حافظه ، اجرا سنگین تر خواهد شد .
3-4-4- اندازه جداول بکار رفته تا حد ممکن باید کوچک باشد . هرچند که جداول بزرگتر از نظر رمزنگاری مناسبتر می باشند اما انواع کوچکتر آنها برای اجرای سریعتر نرم افزاری مطلوب تر هستند . با توجه به پردازنده های کنونی جداول باید به گونه ای در نظر گرفته شوند که بیش از چهار کیلو بایت برای ذخیره سازی نیاز نداشته باشند .
3-4-5-در طرح عملگرهای بکار رفته باید تا حد ممکن از الگو های موازی بسیار استفاده شود . ایده عمومی بکارگیری عملگرهای مستقل از یکدیگر و اجرای همزمان و موازی با هم این عملگرها می باشد . این الگو می تواند تا حد بسیار زیادی در افزایش سرعت اجرا موثر باشد .
نکاتی که بیان شد بسیار ساده می باشند اما با بهره گیری از آنها می توان تا حد بسیار زیادی پیاده سازی موثر و سرعت اجرای بالای نرم افزاری را برای الگوریتم ایجاد نمود .
4- مدیریت کلید
یک سیستم مخابراتی امن شامل اجزا و قسمت هائی همچون الگوریتم رمزنگاری ، پروتکل های قراردادی و … می باشد . با فرض اینکه تمامی این اجزاء قابلیت اطمینان لازم و کافی را داشته باشند ، هنوز یک مسئله باقی است و آن کلید های بکاررفته در مبادلات صورت گرفته است .
با توجه به اینکه در صورت غیرقابل شکست بودن الگوریتم های رمزنگاری و پروتکل های مورد استفاده ، بکارگیری کلیدهای ضعیف و یا استفاده نامناسب از کلیدهای مورد نیاز می تواند نقاط ضعف بسیاری را برای تحلیل امنیت باقی بگذارد .
در دنیای واقعی مدیریت کلید سخت ترین قسمت رمزنگاری محسوب می شود . طراحی الگوریتم های رمزنگاری امن ساده نیست اما با تکیه بر تحقیقات آکادمیک بسیار می توان به نتایج قابل اطمینانی رسید . اما از آنجا که امنیت تمامی ارتباطات باید تنها به کلیدهای بکاررفته داشته باشد ، نگاه داشتن سری کلیدها بسیار سخت تر خواهد بود . بطوریکه بسیاری از تحلیل گرها و رمزشکن ها به سیستم های رمز کلید همگانی و الگوریتم های متقارن از طریق مدیریت کلید آنها حمله می نمایند . از اینرو طراحی مطمئن و قدرتمند روند مدیریت کلید نقش بسزائی در امنیت تبادل ها دارد .
مواردی که در یک پروسه مدیریت کلید باید در نظر گرفته شود فسمت های مختلفی را شامل می شود که هر کدام می توانند معیارهائی برای اجرای یک روند مناسب در اختیار بگذارند .
4-1 تولید کلیدها
الگوریتم تولید کلید می بایست شرایط مناسبی را برقرار نماید تا کلیدهای ضعیف تولید نشود .بر همین مبنا روند تولید کلیدها باید به گونه ای باشد که فضای کلید کاهش یافته به وجود نیاید و از تمامی بیت های کلید در نظر گرفته شده استفاده شود . به طور مثال اگر الگوریتمی از یک کلید 56 بیتی استفاده می نماید و برنامه ای برای تولید کلیدها از قالب ASCII استفاده نماید به طور طبیعی بیت مرتبه بالاتر هر بایت صفر در نظر گرفته می شود که موجب کاهش فضای کلید و در نتیجه امکان تحلیل رمز مورد استفاده شاید تا هزاران بار سریعتر می گردد .
همچنین انتخاب کلیدهای ضعیف می تواند منافذی را برای تحلیل امنیت الگوریتم رمز ایجاد نماید . از آنجا که حملات جستجوی فضای کلید در ابتدا کلیدهای ملموس تررا مورد نظر قرار می دهد ، تحلیل گر می تواند لغتنامه ای از کلیدهای معمول در نظر گرفته و به اصطلاح حمله لغتنامه ای انجام دهد .
کلیدهای خوب معمولاً رشته اعداد تصادفی تولید شده توسط یک پروسه اتوماتیک می باشند . تولید این کلیدها باید توسط یک منبع تصادفی قابل اطمینان و یا یک مولد بیت شبه تصادفی امن صورت بگیرد . همچنین کلیدهای ضعیف الگوریتم رمزنگاری مورد استفاده باید تا حدامکان حذف شود و یا مشخص باشند تا در هنگام تولید و انتخاب کلیدها استفاده نگردند .
به عنوان نمونه هائی از الگوریتم های تولید کلید می توان به استاندارد ANSI X9.17 اشاره نمود که روشی برای تولید کلید توسط الگوریتم رمز کلید خصوصی 3 DES ارائه می دهد و می تواند کلیدهای جلسه مناسب و یا اعداد شبه تصادفی تولید نماید .
در صورتیکه EK(X) تابع رمزگذاری با 3 DES بر روی X با کلید K باشد و V0 یک هسته 64 بیتی امن و T مهر زمانی آن باشد ، برای تولید کلید تصادفی Ri به صورت زیر عمل می شود :
Ri=EK(EK(Ti)+Vi)
Vi+1= EK(EK(Ti)+Ri)
که کلیدهای 64 بیتی تولید می نماید و با به هم چسباندن دنباله های 64 بیتی می توان نمونه های بلندتر نیز بدست آورد .
4-2 ارسال و توزیع کلیدها در شبکه های بزرگ
در یک مبادله اطلاعاتی امن مسئله ارسال کلید جلسه یک الگوریتم متقارن مسئله قابل تعمقی است . رمزنگاری با الگوریتم های کلید عمومی این مشکل را می توانند حل نمایند . هر چند که ممکن است تکنیک های مناسب را در شرایط گسترده در اختیار نگذارند
از آنجائیکه معمولاً کانال های امن مخابراتی به سادگی قابل حصول نیستند روش های مختلفی برای ارسال کلید سری یک مبادله متقارن در نظر گرفته شده است . استاندارد X 9.17 دو نوع کلید به صورت کلیدهای رمزگذاری کلید که برای رمز نمودن سایر کلیدها برای توزیع بکار می روند و کلیدهای داده که برای رمز نمودن ترافیک پیام ها بکار می روند در نظر گرفته است که کلید های رمزگذاری کلید معمولاً به صورت تعریفی و یا قراردادی توزیع می شوند .
روش دیگر می تواند تقسیم کلیدهای ارتباطی به بخش های مختلف و ارسال هر یک از طریق یک کانال باشد که لزوماً ممکن است روشی موثر و قابل بکارگیری نباشد . بنابراین شاید بهترین روش ها برای تبادل کلیدهای جلسه استفاده از الگوریتم های تبادل کلید بر مبنای روش های کلید عمومی و یا حتی الگوریتم های کلید خصوصی باشد .اما توزیع کلید در شبکه های بزرگ به لحاظ تبادل های بسیار کلید میان کاربران مشکلاتی را به همراه دارد . به طور مثال در یک شبکه با 6 کاربر تعداد 15 تبادل کلید مورد نیاز می باشد .بنابراین در شبکه های گسترده ایجاد و استفاده از یک مرکز خدمات کلید امن و یا سازماندهی ساختار های کلید عمومی (PKI) می تواند بسیار موثر باشد .
4-3 تصدیق کلیدها
در تمامی تبادل های کلید در مبادلات امن می بایست کلید های ارسال شده مورد بررسی و تصدیق قرار گیرند . به طور مثال اگر کلید جلسه ارتباطی توسط کلید رمزگذاری کلید رمزشده باشد گیرنده میتواند به این واقعیت اعتماد نماید که کلید رمزگذاری کلید جلسه تنها در اختیار فرستنده می باشد .
یک روش مطمئن برای تصدیق و احراز اصالت کلیدها می تواند استفاده از پروتکل های امضاء دیجیتال برای امضاء کلیدها باشد و یا استفاده از مرکز توزیع و خدمات کلید امن برای انتقال امضاء کلیدهای عمومی بکارگرفته شده باشد که در اینصورت باید اطمینان کافی به این مرکز وجود داشته باشد .
در این میان ممکن است خطاهائی در ارسال کلید به وجود آید و از آنجائیکه کلیدها ممکن است برای رمزگشائی چندین مگابایت از متون رمزشده بکاررود لذا لزوم بررسی و تصحیح خطاها وجود دارد که لزوماً این خطاها باید آشکارسازی شوند .یکی از پرکاربردترین روش های بکاررفته برای این کار رمزنمودن یک مقدار ثابت با کلید دریافت شده و ارسال 2 تا 4 بایت متون رمزشده با کلید می باشد در سمت دیگر نیز همین عمل انجام می شود و سپس با انطباق مقادیر رمز شده مشخص می شود که کلید صحیح ارسال شده و یا نیاز به تصحیح و ارسال دوباره دارد .
4-4 – طول عمر کلیدها
هیچ یک از کلیدهای رمزنگاری برای مدت نامعینی بکار گرفته نمی شوند . برای هر کاربرد رمزنگاری می بایست یک سیاست امنیتی بر مبنای مدل های امنیتی تعریف شده در سیستم در نظر گرفته شود گه در آن طول عمر کلیدها نیز مشخص شده باشد . کلیدهای متفاوت طول عمرهای متفاوت دارند . در سیستم هائی که بر روی کانال های مخابراتی خاص و حساس عمل می نمایند ، کلیدها بسته به ارزش و مقدار داده های اصلی و مقادیر رمز شده و اعتبار آنها در طول مدت تعیین شده باید نسبتاً طول عمرهائی کوتاه داشته باشند . برای سیستم هائی که در هر ثانیه چندین گیگا بایت اطلاعات را مبادله می نمایند نیز نسبت به خطوط کم ترافیک تر تغییر کلیدها بیشتر صورت می گیرد . کلیدهای رمزگذاری کلید معمولاً به طور متناوب تغییر نمی کنند . این کلیدها به منظور تبادل کلید به کار می روند کلیدهای خصوصی رمزهای کلید عمومی نیز طول عمرهای متفاوتی وابسته به کاربردهایشان دارند .
از جمله موارد دیگری که در مدیریت کلید باید مورد نظر قرار گیرد مسائل مربوط به انهدام کلیدهای مصرف شده ، ذخیره نمودن و Backup گرفتن از آنها می باشد که در طرح یک سیستم جامع باید مد نظر باشد .
5- مدیریت کلید توسط روشهای کلید عمومی
الگوریتم های کلید عمومی می توانند مدیریت کلید را بسیار ساده تر نمایند هر چند که مشکلات مربوط به خود را دارند . در واقع زمانی که کار برها در یک شبکه گسترده زیاد می شوند بدست آوردن کلید عمومی طرف مورد نظر مبادله می تواند مشکلاتی را به همراه داشته باشد . فرستنده برای ارسال پیام را از وی و یا یک بانک اطلاعاتی شامل کلید عمومی کاربران دریافت نماید که این عمل امکان اجرای حملات شخص در میانه( Man in the middle attack ) و جایگزینی کلید نفوذگرها توسط آنها با کلید عمومی گیرنده را به وجود می آورد .
گواهی های عمومی در واقع کلید عمومی کاربری است که توسط یک مرکز قابل اطمینان امضاء می شود و امکان جایگزینی کلیدها را برطرف می نماید . گواهی ها معمولاً در برگیرنده اطلاعات شخصی دارنده کلید می باشند و نقش مهمی را در تعدادی از پروتکل های کلید عمومی همانند PEM و X509 دارند . سازماندهی ساختارهای مطمئن کلید عمومی می تواند تمامی جزئیات وجود را در بر بگیرد . برقراری ساختارهای کلید عمومی PKI از جمله روش هائی است که می تواند امنیت و در عین حال مدیریت کلید را در شبکه های کامپیوتری تضمین نماید . این ساختارها را می توان به صورت مجموعه سخت افزارها ، نرم افزارها ، کاربران ، سیاست ها و رویه هائی که برای ایجاد مدیریت ، ذخیره ، توزیع و انهدام گواهی های مبتنی بر رمزنگاری با کلید عمومی مورد نیاز می باضشد ، تعریف نمود . در سازماندهی ساختار های کلید عمومی دو عمل اصلی تولید گواهی (Certification) و تعیین اعتبار (Validation) مورد نیاز می باشند تا خصوصیاتی نظیر محرمانگی ، تمامیت ، احراز هویت ، عدم انکار و کنترل مدون را برآورده سازند .
6- الگوریتم های تبادل کلید
تبادل و یا توزیع کلیدهای جلسه رمزنگاری میان دو طرف مبادله به طور معمول از روش های کلید عمومی انجام می شود . معروف ترین پروتکل تبادل کلید ، الگوریتم دیفی – هلمن می باشد که بر مبنای روش های کلید عمومی و با تکیه بر دشواری محاسبه لگاریتم گسسته در یک میدان متناهی صورت می گیرد . اما این روش در برابر حملات شخص در میانه ضعیف می باشد که برای برطرف نمودن چنین منافذی پروتکل های ایستگاه به ایستگاه ( Station to Station) ارائه شده که در آن دو طرف مبادله اطلاعات مورد تبادل را امضاء نموده و از یک مرکر بیرونی امن و مطمئن نیز برای گرفتن گواهی اعتماد استفاده می نمایند .
شاید روش های کلید عمومی بهترین گزینه برای الگوریتم های تبادل کلید و اجرای مدیریت کلید باشند . اما در طرح هائی که مبنای رمزگذاری اطلاعات در آن استفاده از رمزهای کلید خصوصی می باشد می توان با استفاده موثر و امن از الگوریتم های کلید خصوصی نیاز به طراحی ، بررسی و تحلیل رمزهای کلید عمومی و در عین حال خطر بکارگیری آنها را که هرگز قادر نیستند امنیتی بدون قید و شرط را برقرار نمایند ، از میان برداشت .در واقع در صورتیکه از امنیت وقابلیت یک الگوریتم رمز کلید خصوصی و متقارن اطمینان حاصل شده باشد و تمامی منافذ تحلیل آن بررسی و پوشانده شده باشد ، می توان به جای بکارگیری یک رمزکلید عمومی و درگیری با مسائل تحلیلی آن از همان رمز متقارن برای مدیریت کلید استفاده نمود .
به عنوان نمونه پروتکل هائی موجود می باشند که در آنها نیاز به تبادل کلیدهای سری و یا کلیدهای عمومی نمی باشد و در عملکرد آنها از رمز متقارنی استفاده می شود که خصلت جابجائی پذیری دارد . پروتکل زیر نحوه ارسال پیام M را توسط فرستنده ای با کلید A به گیرنده ای با کلید سری B نشان می دهد .
1- فرستنده M را با کلید خود رمز نموده و به گیرنده می دهد . C1=EA(M)
2- گیرنده C1 را با کلید خود رمزنموده و به فرستنده ارسال می نماید .C2=EB(EA(M))
3- فرستنده C2 را با کلید خود رمزگشائی می نماید و به طرف دوم می دهد .
C3=DA(EB(EA(M)))=DA( EA(EB(M)) )=EB(M)
4-گیرنده C3 را رمزگشائی نموده و M را بازیابی می نماید .
به غیر از پروتکل بیان شده روش های دیگری نیز وجود دارد که در آن از رمزهای متقارن برای تبادل پیام و کلید و با استفاده از کلیدهای خصوصی و عمومی استفاده می شود .
نمونه زیر برای ایجاد امنیت و احراز هویت در شبکه های کامپیوتری طرح شده و در آن یک کلید سری مشترک برای رمز نمودن یک کلید عمومی استفاده می شود . در واقع دو طرف مبادله در یک کلمه عبور مشترک نظیر P توافق می نمایند.
1-فرستنده یک کلید تصادفی همانند K' را تولید نموده و آن را توسط یک الگوریتم متقارن و P به عنوان کلید خصوصی رمز نموده و EP(K') را به گیرنده می فرستد .
2-گیرنده P را می داند . بنابراین پیام را برای حصول K' رمزگشائی می نماید و سپس یک کلید جلسه تصادفی نظیر K را تولید نموده و آنرا توسط کلیدی که از رمزگشائی بدست آورده رمز می نماید و مقدار EP(EK'(K)) را به فرستنده ارسال می نماید .
3-فرستنده می تواند پیام را رمزگشائی نموده و K را بدست بیاورد .
بنابراین دو طرف کلیدهای خصوصی طرف دیگر را در اختیار دارند و می توانند توسط آن ارتباطی امن را برقرار نمایند .
برنامه رمزنگاری در C++
در این برنامه که از روش رمزگذاری جانشینی استفاده شده است ابتدا فایل test.txt را که در درایو C وجود دارد رمزنگاری نموده وسپس در فایل encrypts.txt که در درایو جاری برنامه C++ وجود دارد ذخیره می سازد.
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
#include <stdlib.h>
class encryptS{
private:
char eTable[26];
char addressefile[128];
int size;
char size2[512];
char *reshte;
char* encrypt(char*);
public:
encryptS::encryptS();
void gereftanejadval();
char* getETable();
void neveshtaneaddressefile(char [128]);
void emaletaghirat();
};
encryptS::encryptS(){
reshte = new char[512];
size = 512;
}
void encryptS::gereftanejadval(){
int i;
char ch;
for (i=0 ; i<26 ; i++){
ch = i + 97;
cout << "Please enter the substitution character for " << ch << " >>>";
cin >> eTable[i];
}
}
char* encryptS::getETable(){
return eTable;
}
void encryptS::neveshtaneaddressefile(char str[128]){
strcpy(addressefile , str);
}
void encryptS::emaletaghirat(){
int i;
ifstream ifs (addressefile);
if ( ! ifs )
{
cout << "n Couldn't open file : " << addressefile << endl;
exit (0);
}
ofstream ofs("encryptS.txt");
if ( ! ofs )
{
cout << "n Couldn't open file : encryptS.txt " << endl;
exit (0);
}
while ( !ifs.eof() ){
ifs.getline(size2 , size);
reshte = encrypt(size2);
for (i=0 ; i<strlen(reshte) ; i++)
ofs.put(reshte[i]);
}
ifs.close();
ofs.close();
}
char* encryptS::encrypt(char *str){
int i;
int a;
char ch;
char *strResult = new char[512];
for (i=0 ; i<strlen(str) ; i++){
a = *(str+i);
a -= 97;
ch = eTable[a];
*(strResult + i) = ch;
}
*(strResult + i) = 'n';
return strResult;
}
class encodeS{
private:
char eTable[26];
int size;
char size2[512];
char *reshte;
char* encode(char*);
public:
encodeS::encodeS();
char getACharFromTable(char);
void setETable(char [26]);
void emaletaghirat();
};
encodeS::encodeS(){
reshte = new char[512];
size = 512;
}
char encodeS::getACharFromTable(char ch){
int i;
char chResult;
for (i=0 ; i<26 ; i++)
if (eTable[i] == ch){
chResult = i+97;
return chResult;
}
return chResult;
}
void encodeS::setETable(char ch[26]){
int i;
for (i=0 ; i<26 ; i++)
eTable[i] = ch[i];
}
void encodeS::emaletaghirat(){
int i;
ifstream ifs ("encryptS.txt");
if ( ! ifs )
{
cout << "n Couldn't open file : encryptS.txt " << endl;
exit (0);
}
ofstream ofs("encodeS.txt");
if ( ! ofs )
{
cout << "n Couldn't open file : encodeS.txt " << endl;
exit (0);
}
while ( !ifs.eof() ){
ifs.getline(size2 , size);
reshte = encode(size2);
for (i=0 ; i<strlen(reshte) ; i++)
ofs.put(reshte[i]);
}
ifs.close();
ofs.close();
}
char* encodeS::encode(char *str){
int i;
int a;
char ch;
char *strResult = new char[512];
for (i=0 ; i<strlen(str) ; i++){
ch = getACharFromTable(str[i]);
*(strResult + i) = ch;
}
*(strResult + i) = 'n';
return strResult;
}
class ecryptP{
private:
char key[8];
int sortedKey[2][8];
char *table;
char addressefile[128];
int size;
char size2[512];
void khalikardanejadval();
public:
ecryptP::ecryptP();
void morattabsazieklid();
void gereftaneklid();
char* gereftanejadval();
char* getKey();
char* getSortedKey();
void neveshtaneaddressefile(char [128]);
void emaletaghirat();
};
ecryptP::ecryptP(){
size = 512;
table = new char[512];
}
void ecryptP::morattabsazieklid(){
int i;
int j;
int k;
int t;
for (i=0 ; i<8 ; i++){
sortedKey[0][i] = key[i];
sortedKey[1][i]=i;
}
for (i=0 ; i<7 ; i++ )
for (j=i+1 ; j<8 ; j++)
if (sortedKey[0][i]>sortedKey[0][j]){
for (k=0 ; k<1 ; k++){
t = sortedKey[k][i];
sortedKey[k][i]=sortedKey[k][j];
sortedKey[k][j]=t;
}
}
}
void ecryptP::gereftaneklid(){
cout << "Please enter the key of the encryption >>>";
cin>>key;
morattabsazieklid();
}
char* ecryptP::gereftanejadval(){
return table;
}
char* ecryptP::getKey(){
return key;
}
void ecryptP::neveshtaneaddressefile(char str[128]){
strcpy(addressefile , str);
}
void ecryptP::emaletaghirat(){
int i;
ifstream ifs(addressefile);
if ( ! ifs )
{
cout << "n Couldn't open file : " << addressefile << endl;
exit (0);
}
while (!ifs.eof()){
ifs.getline(size2 , size);
for (i=0 ; i<strlen(size2) ; i++)
*(table + i) = size2[i];
khalikardanejadval();
}
}
void ecryptP::khalikardanejadval(){
char ch;
int i;
int j;
ofstream ofs("encodeP.txt");
if ( ! ofs )
{
cout << "n Couldn't open file : ecryptP.txt " << endl;
exit (0);
}
for ( i=0 ; i<8 ; i++)
for (j=sortedKey[1][i] ; j<512 ; j+=8)
ofs.put(*(table+j));
ofs.close();
}
class encodeP{
private:
char *table;
char *key;
char *sortedKey;
char *addressefile;
char *payam;
int searchInKey(char);
public:
encodeP();
void encode();
void setKey(char*);
void morattabsazieklid();
void khalikardanejadval();
void neveshtaneaddressefile(char *);
void readFile();
};
encodeP::encodeP(){
table = new char[512];
key = new char[8];
sortedKey = new char[8];
payam = new char[512];
addressefile = new char[128];
}
void encodeP::neveshtaneaddressefile(char *str){
strcpy(addressefile , str);
}
void encodeP::setKey(char* k){
key = k;
}
void encodeP::morattabsazieklid(){
int i,j;
char t;
for (i=0 ; i<8 ; i++)
sortedKey[i] = key[i];
for (i=0 ; i<7 ; i++)
for(j=i+1 ; j<8 ; j++)
if (sortedKey[i]>sortedKey[j]){
t= sortedKey[i];
sortedKey[i] = sortedKey[j];
sortedKey[j] = t;
}
}
void encodeP::readFile(){
ifstream ifs(addressefile);
if ( ! ifs )
{
cout << "n Couldn't open file : " << addressefile << endl;
exit (0);
}
ifs.getline(payam ,512);
}
int encodeP::searchInKey(char ch){
int i;
for (i=0 ; i<8 ; i++)
if (key[i] == ch)
return i;
return 0;
}
void encodeP::encode(){
int i;
int j;
int k;
int m=0;
char ch;
for (i=0 ; i<8 ; i++){
ch = sortedKey[i];
j = searchInKey(ch);
for (k=0 ; k<64 ; k++)
*(table+k*8+j) = *(payam + m++);
}
}
void encodeP::khalikardanejadval(){
int i;
ofstream ofs(addressefile);
if ( ! ofs )
{
cout << "n Couldn't open file : " << addressefile << endl;
exit (0);
}
for (i=0 ; i<512 ; i++)
ofs.put(*(table+i));
}
void main(){
clrscr();
encryptS es;
encodeS ds;
ecryptP ep;
encodeP dp;
es.gereftanejadval();
es.neveshtaneaddressefile ("c:test.txt");
es.emaletaghirat();
cout<<"nEncrypted!!!"<<endl;
ds.setETable(es.getETable());
ds.emaletaghirat();
cout<<"nencodeed!!!"<<endl;
ep.gereftaneklid();
ep.neveshtaneaddressefile("c:test.txt");
ep.emaletaghirat();
cout<<"nEncrypted!!!"<<endl;
dp.neveshtaneaddressefile("ecryptP.txt");
dp.setKey(ep.getKey());
dp.morattabsazieklid();
dp.readFile();
dp.encode();
dp.khalikardanejadval();
cout<<"nencodeed!!!"<<endl;
}
مدارهای ساده رمزنگاری
مدار رمز گشا (Decoder)
مدار دی کدر مداری است که دارای n خط ورودی و حداکثر 2 خط خروجی است که بر حسب ترکیب باینری موجود در ورودیها فقط یکی از خروجی ها فعال خواهد شد.
مثلا مدار رمز گشای (2 به 4) بصورت زیر می باشد:
در مدارات منطقی می توان فعال بودن یک سیگنال را به "1" یا "0" تعبیر کرد. مثلاً در مدار رمز گشای می توانیم بگوئیم برحسب ترکیب باینری ورودی، یکی از خروجی ها صفر و بقیه "1" باشند. در این صورت جدول درستی و مدار آن بصورت زیر درخواهد آمد.
یعنی خروجی ها NOT خروجی های قبلی هستند پس کافی است در مدار فوق ANDها را به NAND تبدیل کنیم:
سیگنالهای Low Active را با خطی که بر روی نام آن ها می کشند مشخص می سازند. مثلا در مدار فوق نامهای نشان می دهند که سیگنالهای خروجی Low active هستند.
شما بعنوان تمرین می توانید مدار دی کدر Low active سه به هشت را طراحی کنید.
در بسیاری از آی سی ها سیگنالی کنترلی وجود دارد که به کمک آن می توان کل مدار را غیر فعال یا خاموش کرد. به این سیگنال Enable, Strobe یا Chip Select (CS می گویند. این سیگنال می تواند Low active یا High Active باشد.
مثلا شکل مدار دی کدر 2 به 4 که خروجی های آن High Active و سیگنال کنترلی آن Low active است بصورت زیر می باشد:
اگر سیگنال برابر 1 باشد تمام ANDها از کار افتاده و مدارخروجی ندارد و اگر این سیگنال صفر باشد ANDها کار خود را انجام می دهند.
کاربرد اصلی دی کدرها در مدارات کامپیوتری آدرس دهی به خانه های حافظه است. بوسیله n خط آدرس در کامپیوتر (با نامهای می توان 2 خانه حافظه را آدرسص دهی کرد.
مثلاً در کامپیوتری فرضی با 8 خانه حافظه، برای آدرس دهی از 3 خط آدرس و یک دی کدر 3 به 8 استفاده می شود.
به کمک پایه (Enable) E می توان IC های دی کدر را به گونه ای به هم وصل کرد که یک دی کدر بزگتر بدست آید. مثلاً در شکل زیر دو دیکدر به گونه ای به هم متصل شده اند که تشکیل یک دی کدر را داده اند:
در شکل فوق هنگامی که D=0 باشد، دی کدر بالایی فعال و پائینی غیرفعال می گردد. بدین ترتیب دیکدر بالایی مینترم های 0000 تا 0111 را در 8 خروجی D0 تا D15 تولید می کند.
به طور کلی ورودی های Enable ابزار مناسبی در اتصال دو یا چند IC به همدیگر، جهت توسعه توابع منطقی یا ورودی و خروجی های بیشتر می باشند.
مثال 1: یک دی کدر با چهار دی کدر و یک دی کدر طراحی کنید.
حل: برای سری نمودن دی کدرهای فوق نیاز به ورودی فعال ساز E برای هر دی کدر است. شکل زیر بلوک دیاگرام دی کدر طراحی شده را نشان می دهد.
پیاده سازی مدارهای ترکیبی با دی کدر
یکی از کاربردهای دی کدرها، پیاده سازی مدارات ترکیبی است. یک دی کدر با n ورودی دارای خروجی است که اگر خروجی های دی کدر در حالت فعال یک باشند، هر خروجی معادل با یک مینترم و اگر خروجی های دی کدر در حالت فعال صفر باشد، هر خروجی معادل با یک ماکسترم است.
از آنجا که هر تابع منطقی از جمع مینترم ها و یا حاصل ضرب ماکسترم ها تشکیل شده است، می توان آن تابع را با دی کدر پیاده سازی کرد. برای این پیاده سازی 4 حالت مختلف امکان پذیر است که آنها را با مثال زیر بیان می کنیم.
مثال 2: با استفاده از دی کدر تابع زیر را پیاده سازی کنید:
روش اول: به کمک دی کدر با خروجی های actie-high و یک گیت OR با توجه به فرمول زیر:
روش چهارم: به کمک دی کدر با خروجی های active-low و یک گیت NAND با توجه به فرمول زیر:
مدار رمز کننده Encoder
این مدار عکس عمل مدار رمزگشا را انجام می دهد. یعنی مدرای است با n خروجی و ورودی که در ان فقط یکی از ورودیها فعال بوده و بقیه غیرفعال هستند. برحسب آنکه کدام ورودی فعال است، ترکیب باینری خروجیها مشخص می گردد.
مثلاً مدار Encoder چهار به دو بصورت زیر می باشد.
بنا به جدول فوق داریم:
ایراد اصلی مدار فوق آن است که طبق تعریف می بایست فقط یکی از ورودی های x در هر لحظه فعال باشد. حال اگر به صورت ناخواسته مثلاً x1 و x2 با هم فعال شوند آنگاه شده و اینگونه تفسیر می شود که فقط x3 فعال بوده است. به عبارتی دیگر جدول درستی فوق با 4 ورودی دارای 16 حالت است که 12 حالت آن بی اهمیت است و اگر یکی از آن 12 حالت ناخواسته رخ دهد مدار اشتباهی عمل می کند.
برای رفع مشکل فوق (تا حد زیادی و نه کامل) می توان تابع y0 و y1را به صورتهای زیر در نظر گرفت:
بدیت ترتیب شکل مدار رمزگذار بصورت زیر خواهد بود:
ایراد مدار فوق آن است که اگر به صورت ناخواسته هر یک از 12 حالت بی اهمیت رخ دهد خرپوجی مدار می شود، مثلاً اگر و باشند، هر دو خروجی y0 و y1 همزمان صفر می شوند و این حالت ممکن است اینگونه تفسیر شود که همزمان صفر می شوند و این حالت ممکن است اینگونه تفسیر شود که بوده و بقیه ورودی ها صفر هستند. بنابراین برای رفع مشکلات فوق از مدار رمزگذار با تقدم که جلوتر شرح می دهیم استفاده می گردد.
یکی از کاربردهای مدار رمزگذار تبدیل کدهای دهدهی به کد 4 بیتی BCD است یعنی مدار زیر که می توانید به عنوان تمرین آن را طراحی کنید.
رمزگذار با اولویت (Priority)
به خاطر آنکه ورودی های Encoder قابل کنترل نیست و ممکن است در یک حالت بیش از یک ورودی فعال شود. اغلب از انکودرهای با اولویت استفاده می گردد. در رمزگذار اولویت دار، برای ورودی های تقدم و اولویت تعیین می کنند و موقعی که بیش از یک ورودی فعال شود، تنها کد ورودی با اولویت بالاتر به خروجی ارسال می گردد. همچنین می توان یک خروجی V نیز به معنای معتبر بودن خروجی داشت که L بودن آن به این معناست که حداقل یکی از ورودی های فعال است و اگر این خروجی V مساوی صفر باشد یعنی هیچکدام از ورودی ها فعال نمی باشند. بنابراین جدول درستی انکودر اولویت دار به صورت زیر خواهد بود: ( بالاترین اولویت را دارد)
95