معماری
 همانند بسیاری از حوزه هایی که تاکنون موردمطالعه قراردادهایم.
طرح ریزی میتواند قدرتمندترین کنترل باشد.خصوصاً هنگامیکه سیستم های مبتنی بر کامپیوتر را ایجاد کرده و یا تغییر می دهیم، می توانیم معماری کلی آنها را مورد بررسی قرارداده و امنیت” توکار“ را بعنوان یکی از سازه های کلیدی، طرح ریزی نماییم.
به همین ترتیب، معماری یا طراحی یک شبکه نیز میتواند تاثیر قابل ملاحظه ای بر روی امنیت آن داشته باشد.
تقسیم بندی
 تقسیم بندی (Segmentation) همانطور که در سیستم های عامل یک کنترل امنیتی قدرتمند بود، می تواند از دو طریق احتمال آسیب در یک شبکه را محدود نماید : تقسیم بندی باعث کاهش تعداد تهدیدها شده و میزان خسارتی که از طریق یک آسیب پذیری واحد امکانپذیر است را محدود می سازد.
 فرض کنید که شبکه شما، تجارت الکترونیک را برای کاربران اینترنت اجرا می نماید.
بخشهای بنیادی شبکه شما می توانند عبارت باشند از:
- یک سرور وب، برای اداره نشست های (Sessions) HTTP کاربران.
- کد نرم افزار کاربردی، برای قرار دادن کالاها و سرویس های شما در معرض خرید.
- یک بانک اطلاعاتی از کالاها و احتمالاً یک فهرست ضمیمه موجودی کالا برای شمارش اقلامی که در دسترس هستند و آنهایی که بایستی از تامین کنندگان درخواست شوند.
- یک بانک اطلاعاتی از سفارش های دریافت شده.
 اگر قرار است تمام این فعالیت ها بر روی یک ماشین انجام شوند، شبکه شما دچار مشکل میشود : هر گونه نقصان و یا خطایی در این ماشین می تواند تمام قابلیت های تجاری شما را به نابودی بکشاند.
 همانطور که در شکل (1) نمایش داده شده است، یک طراحی امن تر از بخش های متعددی استفاده می کند.
فرض کنید یکی از بخش های سخت افزاری، یک سیستم سرور وب است که برای دسترسی عمومی در معرض دید قرار گرفته است ( کاربران می توانند بصورت الکترونیکی به آن دسترسی داشته باشند).
برای کاهش خطر حمله ازخارج سیستم، این سیستم نبایستی وظایف حساستر دیگری نظیر تعیین اعتبار کاربران و یا دسترسی به مخزن داده های حساس را برعهده داشته باشد.تفکیک سرورها وبخش های جداگانه(مطابق با اصول حداقل اولویت وEncapsulation) احتمال آسیبی که هر سیستم فرعی در معرض آن قرار می گیرد را کاهش می دهد.
 تفکیک دسترسی نیز یکی دیگر از راه های تقسیم بندی شبکه است.
برای مثال، فرض کنید که یک شبکه برای استفاده جهت سه منظور درنظر گرفته شده است : استفاده از سیستم تولید “live” ، آزمایش نسخه بعدی تولید و توسعه سیستم های ثانویه.
اگر شبکه به خوبی تقسیم بندی شده باشد، کاربران خارجی تنها می توانند به سیستم “live” دسترسی داشته باشند.
آزمایش کنندگان تنها باید به سیستم آزمایش دسترسی پیدا کنند و برنامه نویسان نیز تنها به سیستم توسعه دسترسی خواهند داشت.
تقسیم بندی به این سه گروه اجازه می دهد که بدون ریسک با یکدیگر همزیستی داشته باشند.
برای نمونه یک برنامه نویس سهواً باعث تغییر در سیستم تولید نخواهد شد .
افزونگی (Redundancy )
 ” افزونگی“ یکی دیگر از کنترل های کلیدی در معماری است : ایجاد امکان برای یک تابع بصورتی که بر روی بیش از یک گره اجرا شود تا از گذشتن تمام تخم مرغ ها در یک سبد اجتناب شود.
برای مثال، طراحی شکل (1) تنها دارای یک سرور وب است.
کافی است این سرور وب را از دست بدهید تا تمام ارتباط از دست برود .
یک طراحی بهتر دارای دو سرور وب خواهد بود که از چیزی به نام “Mode Failover” استفاده می کنند.
در حالت Failover ، سرورها بطور متناوب با یکدیگر ارتباط برقرار کرده و هر یک از آنها تشخیص می دهد که دیگری هنوز در حال فعالیت است.
اگر یکی از آنها تشخیص می دهد که دیگری هنوز در حال فعالیت است.
اگر یکی از آنها از کار بیفتد، دیگری مسئولیت پردازشی هر دو را بر عهده می گیرد.
با وجود آنکه در هنگام بروز یک خسارت، عملکرد تا حدود نصف کاهش می یابد، اما برخی از کارها همچنان انجام می شوند.
 ” افزونگی“ یکی دیگر از کنترل های کلیدی در معماری است : ایجاد امکان برای یک تابع بصورتی که بر روی بیش از یک گره اجرا شود تا از گذشتن تمام تخم مرغ ها در یک سبد اجتناب شود.
با وجود آنکه در هنگام بروز یک خسارت، عملکرد تا حدود نصف کاهش می یابد، اما برخی از کارها همچنان انجام می شوند.
نقاط واحد خرابی بطور ایده آل، معماری بایستی موجب مصونیت شبکه در برابر خرابیها گردد .
درواقع، معماری حداقل باید اطمینان پیدا کند که سیستم به شیوه قابل قبولی خرابی ها را تحمل خواهد نمود ( برای مثال کاهش سرعت بدون متوقف نمودن پردازش، یا بازیابی و شروع مجدد تعاملات ناتمام).
یکی از راه های ارزیابی تحمل خطا توسط معماری شبکه، جستجوی نقاط واحد خرابی است .
به عبارت دیگر، ما باید بررسی کنیم که آیا یک نقطه واحد در شبکه وجود دارد که در صورت خرابی ( از کار افتاد ) آن، امکان قطع دسترسی به تمام یا بخش قابل ملاحظه از شبکه وجود داشته باشد.
پس برای مثال، یک بانک اطلاعاتی دریک محل نسبت به تمام خساراتی که می تواند بر آن محل تاثیر بگذارد، آسیب پذیر است.
یک طراحی شبکه مناسب، نقاط واحد خرابی را برطرف می سازد.
توزیع بانک اطلاعاتی (قرار دادن کپی هایی از آن بر روی بخش های مختلف شبکه، احتمالاً حتی در مکان های فیزیکی متفاوت) می تواند باعث کاهش خطر آسیب های جدی از خرابی یک نقطه واحد گردد.
غالباً سربار قابل توجهی در پیاده سازی چنین طراحی وجود دارد.
برای مثال، بانک های اطلاعاتی مستقل بایستی با یکدیگر هماهنگ شوند.
اما معمولا سروکار داشتن با ویژگی های تحمل خطا از مواجه شدن با آسیب های ایجاد شده بخاطر خرابی در یک لینک واحد، آسانتر است .
معماری، نقش مهمی را درپیاده سازی بسیاری از کنترل های دیگر بازی می کند.
ما ویژگی های معماری را همزمان با معرفی سایر کنترل ها در ادامه مقاله، مورد بحث قرار خواهیم داد .
رمزگذاری(Encryption ) ” رمزگذاری“ احتمالاً مهمترین و فراگیرترین ابزار برای یک متخصص امنیت شبکه است .
همانطور که در قسمتهای قبل دیدیم، رمزگذاری در تامین حریم، اعتبار، سلامت و دسترسی محدود شده به داده بسیار قدرتمند است.
از آنجائیکه شبکه ها با ریسک های بزرگتری سروکار دارند، غالباً امنیت داده ها را از طریق رمزگذاری تامین می کنند، احتمالاً در ترکیب با سایر کنترل ها.
درکاربردهای شبکه، رمزگذاری می تواند مابین دو میزبان(رمزگذاری لینک) ومابین دو نرم افزار کاربردی (رمزگذاریend-to-end) اعمال شود.
ما درادامه به بررسی هردو مورد خواهیم پرداخت.
در هر دو شکل رمزگذاری، توزیع کلید همیشه مشکل سازاست.
کلیدهای رمزگذاری بایستی در یک وضعیت امن به فرستنده و گیرنده تحویل داده شوند.
در این بخش ما به بررسی تکنیک های امن توزیع کلید در شبکه ها نیز خواهیم پرداخت.
Link Encryption در ”رمزگذاری لینک“ ، داده ها درست پیش از آنکه سیستم آنها را بر روی لینک ارتباطی فیزیکی قرار دهد، رمزگذاری می شوند.
در این حالت، روزگذاری در لایه های 1 یا2 در مدل OSI روی می دهد ( همانند وضعیتی که درمورد پروتکل های TCP/IP روی می دهد) به همین ترتیب، رمزگشایی نیز درست هنگام رسیدن ارتباط و ورود آن به کامپیوتر گیرنده، روی می دهد.
مدلی از رمزگذاری لینک در شکل (2) نمایش داده شده است.
شکل(2)رمزگذاری لینک رمزگذاری از پیغام در حال انتقال مابین دو کامپیوتر محافظت می کند.
اما پیام در داخل کامپیوترهای میزبان بصورت متن عادی (Plaintext) نگهداری می شود.
توجه داشته باشید از آنجائیکه روزگذاری در لایه های پروتکل تحتانی اضافه شده است، پیام برای تمام لایه های دیگر میزبان های فرستنده و گیرنده، آشکار است.
اگر از امنیت فیزیکی خوبی برخوردار باشیم، نباید نگرانی زیادی در مورد این آشکاری داشته باشیم.
برای مثال، این آشکاری بر روی کامپیوترهای فرستنده یا گیرنده ای روی می دهد که توسط آژیر و یا دربهای قفل شده، محافظت می شوند.
با اینحال باید توجه داشته باشید که پیام در دو لایه از تمام میزبان های میانجی که پیام از آنها عبور نموده است، آشکار می شود.
پیام در داخل میزبان های میانجی آشکار می شود و این امکان وجود دارد که یکی از این میزبانهای میانجی قابل اعتماد نباشد.
رمزگذاری لینک از دید کاربر پنهان است.
رمزگذاری به یک سرویس انتقال تبدیل می شود که توسط یک لایه پروتکل سطح پائین از شبکه انجام می پذیرد.
درست همانند هدایت پیام و یا تشخیص خطای انتقال.
رمزگذاری لینک خصوصاً هنگامی مناسب است که خط انتقال دارای بیشترین آسیب پذیری باشد.
اگر تمامی میزبانهای موجود بر روی یک شبکه دارای امنیت قابل قبولی باشد، اما رسانه ارتباطی با سایر کاربران به اشتراک گذاشته شده و یا امن نباشد، می توان از رمزگذاری لینک به عنوان یک کنترل آسان استفاده نمود.
End-toEnd Encryption رمزگذاری end-to-end همانطور که نام آن نشان می دهد، امنیت را از یک انتهای انتقال تا انتهای دیگر آن فراهم می کند.
رمزگذاری با استفاده از یک ابزار سخت افزاری مابین کاربر و میزبان، قابل اعمال است.
همچنین می توان رمزگذاری را از طریق نرم افزاری که بر روی کامپیوتر میزبان اجرا می شود، انجام داد.
در هر حالت، رمز گذاری در بالاترین سطوح ( لایه 7، Application و یا شاید در لایه 6 یعنی Presentation ) مدل OSI انجام می پذیرد.
از آنجائیکه رمزگذاری بر تمام پردازش های هدایتی و انتقالی لایه تقدم دارد، پیغام در سرتاسر شبکه با یک قالب رمزگذاری شده منتقل می شود.
رمزگذاری، رخنه های احتمالی در لایه های پایین تر مدل انتقال را برطرف می نماید.
اگر یک لایه پایین تر قادر به حفظ امنیت نبوده و داده های دریافت شده را فاش نماید، قابلیت اعتماد داده ها به خطر نمی افتد.
شکل 3 یک پیغام نمونه را با رمزگذاری end-to-end نمایش میدهد که در آن قسمتهای رمزگذاری شده خاکستری هستند.
هنگامیکه از رمزگذاری end-to-end استفاده می شود، پیامهای فرستاده شده ازطریق میزبان های مختلف، محافظت شده اند.
همانطور که در شکل (4) مشاهده می کنید، محتویات داده های پیام نیز رمزگذاری شده اند و پیام در هنگام انتقال بصورت رمز است ( محافظت شده در برابر افشاء)، بنابرین، حتی با وجود آنکه پیام در مسیر میان A و B باید از میان گره های احتمالاً ناامنی عبور نماید (نظیر C تا G)، پیام در مقابل افشاء در هنگام انتقال، محافظت شده است.
مقایسه شیوه های رمزگذاری رمزگذاری یک پیام به تنهایی نمی تواند بطور قطع تضمین نماید که آن پیام در حین ( و یا پس از) انتقال، افشاء نمی شود.
با اینحال در بسیاری ازموارد، با در نظر گرفتن احتمال شکسته شدن رمزگذاری توسط یک متجاوز و تناسب پیام ها، می توان استحکام رمزگذاری را بعنوان یک محافظت شایسته در نظر گرفت.
همانند بسیاری از جنبه های امنیتی، بایستی استحکام رمزگذاری را با احتمال حمله، متعادل نمود.
با رمزگذاری لینک، تمام انتقالات انجام شده در طول یک لینک بخصوص، مشمول رمزگذاری می شوند.
یک میزبان معین معمولاً تنها یک لینک به داخل شبکه دارد، به این معنی که تمام ترافیک شبکه ای که بر روی آن میزبان آغاز می شود، توسط همان میزبان رمزگذاری خواهد شد.
اما این الگوی رمزگذاری مستلزم آن است که تمام میزبان های دیگری که این ارتباطات رادریافت میکنند، نیز بایستی برای رمزگشایی پیام ها دارای امکانات مورد نیاز باشند.
بعلاوه، تمام میزبانها باید کلیدها را به اشتراک بگذارند.
ممکن است یک پیام، در مسیر رسیدن به مقصد نهایی خود، از یک یا چند میزبان واسطه عبور نماید.
اگر پیام در طول تعدادی از لینک های شبکه، رمزگذاری شده باشد، اما در سایر لینک ها فاقد رمزگذاری باشد، بخشی از محاسن رمزگذاری از میان خواهد رفت.
بنابراین، رمزگذاری لینک معمولاً بر روی تمام لینک های یک شبکه اعمال می شود ( البته اگر اساساً انجام شود).
برخلاف وضعیت بالا، رمزگذاری end-to-end بر روی لینک های منطقی اعمال می شود که کانال های میان دو پروسه در سطحی بالاتر از مسیر فیزیکی هستند.
از آنجائیکه میزبان های واسطه در طول مسیر انتقال یک پیام نیازی به رمزگشایی و یا رمزگذاری پیام ندارند، به امکانات مربوط به آن نیز احتیاجی نخواهند داشت.
بنابراین، رمزگذاری تنها برای پیام ها و نرم افزارهای کاربردی مورد نیاز، انجام می شود.
بعلاوه، امکان انجام رمزگذاری بصورت نرم افزاری نیز وجود دارد.
پس می توانیم آن را بصورت انتخابی انجام دهیم؛ بعبارت دیگر برای یک نرم افزار کاربردی در هر زمان و یا حتی برای یک پیام در داخل یک نرم افزارکاربردی معین.
مزیت انتخابی بودن رمزگذاری end-to-end با درنظر گرفتن کلیدهای رمزگذاری به یک ایراد نیز تبدیل می شود.
تحت رمزگذاری end-to-end ،یک کانال رمزگذاری (Cryptographic) مجازی در بین هر جفت از کاربران وجود دارد.
برای تامین امنیت مناسب، هر جفت از کاربران بایستی یک کلید رمزنگاری منحصر بفرد را به اشتراک بگذارند.
درنتیجه، تعداد کلیدهای مورد نیاز با تعداد زوج های کاربری برابر خواهد بود که به این ترتیب برای n کاربر به n*(n-1)/2 کلید نیاز خواهیم داشت.
این عدد با افزایش تعداد کاربران، به سرعت رشد می کند.
با اینحال، در این