سلام، از این به بعد داخل مموریلیکز مینویسم!
هدف از نوشتن این پست، همانگونه که از عنوان بر میآید، بررسی نحوهی عملکرد سیستمهای فیلترینگ و همچنین سیستمهای گریز از فیلتر (پروکسی/فیلترشکن/ویپیان) است. اما پیش از شیرجه رفتن در بطن موضوع، لازم است با مقدماتی در مورد اینترنت و وبسایتها و نرمافزارهای مرتبط با اینترنت، بخش فنی را آغاز کنیم.
همهی ما بارها در اینترنت به وبسایتهای مختلفی سرکشی کرده ایم و از محتوای مفید و یا زیانبار و خانمان سوز آنها استفاده کردهایم، اما با این حال تعداد محدودی از ما با آنچه زیر لباس مرورگر در جریان است آشنا هستیم. از حسن اتفاق قرار است به کمک این نگاره، تعداد محدود مذکور افزایش پیدا کنند.
بخش اول: ایجاد یک وبسایت :: Domain, Host
هر وبسایت با خرید یک دامنه (domain) و یک هاست (host - تلفظ صحیح "هُست" است) و اتصال آنها به یکدیگر زندگیاش را آغاز میکند. به عنوان مثال یک توسعه دهندهی وب در ابتدا به یک فروشندهی دامنه مانند ایران سرور یا هاستایران مراجعه میکند و دامنه دلخواه خود را درخواست میکند. این سرویس دهندهها در ابتدا آزاد بودن آن دامنه را بررسی میکنند (یعنی قبلا توسط شخص دیگری خریداری نشده باشد) و پس از آن چنانچه دامنه آزاد بود، اطلاعات هویتی درخواست دهنده را دریافت میکنند (نام، نامخانوادگی، شماره شناسنامه، عکس کارت ملی و ...) و پس از تایید آنها و واریز هزینهی دامنه، دامنهی درخواست شده را به نام توسعه دهندهی متقاضی ثبت میکنند و یک صفحهی تنظیم DNS Server برای آن دامنه به وی میدهند. دامنهی خریداری شده تنها به عنوان نام وبسایت میباشد و نیاز است اطلاعات وبسایت نظیر متنها و عکسها و ... جایی ذخیره شود. بنابرین در گام بعدی، توسعه دهنده به یک فروشنده هاست مراجعه میکند. هاست در واقع یک رایانهی همیشه روشن است که اطلاعات وبسایت روی آن قرار میگیرد (با نام سرور نیز شناخته میشود). هر دو سایت معرفی شده در قبل به عنوان فروشنده هاست نیز فعالیت میکنند. برای خرید هاست نیازی به ارائهی اطلاعات هویتی نیست و توسعه دهنده تنها با مشخص کردن مشخصات هاست مورد نیاز خود (نظیر سیستمعامل، حجم هارد مورد نیاز برای اطلاعات وبسایت، مقدار رم و سی پی یو، پهنای باند و ...) اقدام به خریداری هاست مینماید. در قبال این خرید، فروشنده به توسعهدهنده یک پنل کنترلی (یا همان cpanel که با یک آدرس IP و یک شماره پورت به همراه نام کاربری و گذرواژه مشخص میشود) و در بعضی موارد یک نام کاربری و گذرواژه برای اتصال ssh به آن سرور در اختیار توسعه دهنده قرار میدهد. علاوه بر این، فروشنده یک یا دو آدرس به عنوان DNS Server های خودش به توسعه دهنده اعلام میکند و توسعه دهنده باید این مقادیر را در صفحهی تنظیماتی که فروشندهی دامنه به وی داده بود وارد نماید. توسعه دهنده همچنین باید آدرس دامنهی خریداری شده را در اختیار host قرار دهد تا هم در DNS Server های خود ثبت کند و هم بتواند درخواستهای وبسایتهای مختلف روی یک host را از هم تفکیک کند.
در زیر به عنوان نمونه تصویر صفحهی تنظیم DNS Server یک دامنه را مشاهده میکنیم.
بخش دوم: آغاز ارتباط :: IP, DNS Server
فرض را بر این میگذاریم عملیات بخش قبل انجام شده است و حالا کاربری برای اولین بار درون نوار آدرس مرورگر خود، آدرس وبسایت 0x01.ir را وارد میکند و کلید Enter را میفشارد. چه اتفاقی رخ میدهد؟ همانطور که میدانیم همهی ارتباطات درون اینترنت بر اساس پروتکل IP انجام میشود. بر اساس این پروتکل برای ارتباط با هر node در شبکه نیاز است که مقدار آدرس IP آن را داشته باشیم. بنابرین در اولین گام نام دامنهی ما باید به نحوی به آدرس IP مربوط به Host تبدیل شود. پروتکلی که وظیفهی این تبدیل را بر عهده دارد DNS یا Domain Name System نام دارد. بنابراین در این زمان مرورگر یک بسته از نوع DNS Query به DNS Server تنظیم شده روی آن رایانه (معمولا 8.8.8.8 یا 4.2.2.4) ارسال میکند. اما DNS Server گوگل یا همان 8.8.8.8 از کجا آدرس IP وبسایت 0x01.ir را میداند؟
در بخش اول گفتیم که توسعه دهنده، مقادیر DNS Server ارائه دهنده ی هاست خود را در صفحهی تنظیمات ارائه دهندهی دامنه، ذخیره میکند. ارائه دهندهی دامنه این مقادیر را به عنوان "سرور تبدیل دامنه به آی پی" برای آن دامنه در جدولی ثبت میکند. همچنین گفتیم توسعه دهنده، نام دامنهی خود را به ارائه دهندهی هاست اعلام میکند. ارائه دهندهی هاست نیز نام دریافتی را در جدولی به مقدار IP فروخته شده به آن توسعه دهنده Map میکند.
بستهی DNS Query دریافت شده در سرور 8.8.8.8 توسط نرم افزار روی این سرویس بررسی میشود. نرم افزار مقدار 0x01.ir را از بسته استخراج میکند و در جدولی به دنبال آدرس IP آن میگردد. از آنجایی که این نرم افزار از آدرس IP وبسایت 0x01.ir بی اطلاع است، درخواستی به سرور DNS مربوط به دامنههای ir. ارسال میکند و آدرس را از آن جویا میشود. سرور ir. نیز مقدار IP این دامنه را نمیداند ولی میداند که DNS Server آن دامنه دارای آدرس ns39.sample.com و ns40.sample.com است. بنابرین درخواست را به این سرورها ارجاع میدهد. یکی از این سرورها در نهایت مقدار IP دامنهی 0x01.ir را باز میگرداند و این مقدار به مرورگر رسیده و مرورگر در این مرحله آمادهی ارسال درخواست کاربر به وبسایت یادداشت شده در نوار آدرس است.
توجه: سرورهای DNS با توجه به نحوهی Configuration اعمال شده روی آنها، ممکن است به صورتهای مختلفی (iterative یا recursive) عمل کنند. جزئیات آنها در پست جداگانهای بررسی خواهد شد.
تا این مرحله ممکن است سوالات زیر برای شما مطرح شده باشد:
چه کسی حق ثبت DNS Server برای یک دامنه دارد؟ اگر به اشتباه DNS Server نامعتبری برای یک دامنه ثبت شود چه میشود؟
پاسخ:
تنها مالک دامنه میتواند DNS Server برای دامنهی خود ثبت کند. درصورتی که به اشتباه مقدار نامعتبری تنظیم شود یا کاربر دیگری با دسترسی به صفحهی تنظیمات مقدار دیگری تنظیم نماید، ممکن است در پاسخ به DNS Query دامنهی شما که مرورگر آن را ارسال میکند یا هیچ آدرس IPی باز نگردد و یا این که آدرس IP سرور دیگری بازگردد. یکی از روشهایی که هکرها برای انجام حمله به یک وبسایت استفاده میکنند، تغییر همین DNS Serverها در صفحهی تنظیمات دامنه مورد حمله است.
با توجه به این که "دامنه" در نهایت توسط مرورگر به کمک DNS به IP تبدیل شد، اساسا چه نیازی به دامنه است؟ آیا یک وبسایت نمیتواند دامنه نداشته باشد؟
پاسخ:
حق با شماست. اساسا نیازی به این نیست که یک وبسایت دارای دامنه باشد و وبسایتها میتوانند بدون داشتن دامنه و صرفا به کمک یک هاست وجود داشته باشند. برای بازدید از این وبسایت ها باید در نوار آدرس به جای نوشتن نام دامنه، آدرس IP هاست وبسایت را وارد نماییم. با این حال از آنجایی که به خاطر سپردن آدرسهای IP دشوار است (مثلا 216.58.213.238)، توسعه دهندگان غالبا برای وبسایت خود یک دامنه نیز تهیه میکنند.
توجه: پاراگراف فوق تنها برای وبسایتهایی معتبر است که دارای هاست اختصاصی یا همان Dedicate هستند. چنانچه وبسایت شما به همراه چند وبسایت دیگر دارای هاست اشتراکی باشد، با وارد کردن آدرس IP هاست داخل مرورگر نمیتوانید به وبسایت خود دسترسی داشته باشید. در این حالت نیاز است کارهای دیگری نیز انجام دهید که در پست جداگانهای جزئیات آن را بیان میکنیم.
آیا یک وبسایت میتواند چند دامنه داشته باشد؟ آیا میتواند چند هاست داشته باشد؟ آیا چند وبسایت میتوانند یک هاست داشته باشند؟
علت احراز هویت متقاضی هنگام درخواست خرید دامنه چیست؟ آیا دامنه و هاست رایگان هم وجود دارد؟
پاسخ:
دامنهها و هاستهای رایگان به وفور در اینترنت یافت میشوند. تفاوت یک دامنهی رایگان و یک دامنهی غیررایگان در میزان اعتبار، گیرایی/رسمی بودن آن و مجوزهای مالکیت و استفاده از آن است. تفاوت هاستهای رایگان با هاستهای غیررایگان نیز غالبا در مشخصات سخت افزاری سرور هاست و جوازهای استفاده از فایلها و همچنین مالکیت آن هاست است. به عبارت دیگر شما حقی مبنی بر مالکیت یک دامنه یا هاست رایگان ندارید و تنها به عنوان کاربر آنها شناخته میشوید. علت احراز هویت متقاضی درخواست خرید دامنههای غیر رایگان نیز در ثبت مالکیت و همچنین پیگیریهای قضایی در صورت انجام تخلف نهفته است.
سلام.
به پیشنهاد یکی از دوستان، گروهی در زمینه ی جاواکارت و سیمکارت با هدف اشتراک دانش، ابزارها و مستندات تشکیل دادیم. چنانچه تمایل به عضویت در گروه داشتید شماره خودتون رو به بنده ارسال کنید.
09397269578
قسمت قبلی: برنامه نویسی جاواکارت در Netbeans
در قسمت قبل دیدیم که نسخههای جدید محیط برنامه نویسی Netbeans، به صورت پیشفرض، Pluginها و APIهای مورد نیاز برای برنامه نویسی جاواکارت را در خود دارند. متاسفانه در مورد محیط برنامه نویسی Eclipse اینگونه نیست (نویسنده از نسخهی جدید این نرم افزار اطلاع ندارد). بنابراین نیاز است که برنامه نویس خودش Plugin و APIهای مورد نیاز را به آن بیفزاید.
سوال: IDE چیست؟ Plugin چیست؟ API چیست؟
پاسخ: IDE یا Integrated Development Environment یا محیط برنامه نویسی در واقع نرم افزارهایی مانند Netbeans، Eclipse یا Visual Studio هستند که فضایی را برای برنامه نویس فراهم میآوردند که برنامههای خود را به صورت راحت تر بنویسد و Compile/Interpret کند.
API یا Application Programming Interface یا رابط برنامه نویسی نرم افزار، در واقع مجموعه ای از واسط/رابط ها بین برنامه ای که قرار است نوشته شود با کتابخانههای آن زبان یا سیستم عامل هستند. یکی از قابلیتهایی که IDE دارد این است که هنگام نوشتن برنامه و استفاده از این رابط های برنامه نویسی در کد برنامه، به صورت اتوماتیک چک میکند که آیا چنین رابطی وجود دارد یا خیر، و اگر موجود نبود، به برنامه نویس خطای استفاده از APIهای اشتباه میدهد و یا به وی کمک میکند آن را اصلاح کند. (بنابراین باید APIهای لازم را به محیط برنامه نویسی معرفی/اضافه کنیم).
و نهایتا Plugin مجموعه ای فایل است که برای یک نرم افزار مانند IDE نوشته شده اند که به آن قابلیتی اضافه کنند.
به صورت روشن تر، وقتی ما JCDK را از سایت Oracle دانلود میکنیم، همهی APIها و ابزارهای مورد نیاز برای نوشتن و ساخت یک اپلت در آن مجموعه وجود دارد. یعنی میتوانیم بدون استفاده از هیچگونه IDE ای، اپلت خود را بنویسیم و فایل cap آن را تولید کنیم! منتهی باید با Notepad یا ابزاری مشابه آن، و یک مجموعه ابزارهای خط فرمانی دست و پنجه نرم کنیم، و هیچ گونه هشداری به ما در مورد نوشتن یک اسم API اشتباه یا خطاهای مانند آن به ما داده نمی شود، و تنها در مراحل پایانی، هنگام Compile/Interpret به واسطه ی اجرا نشدن موفق فرایند، متوجه وجود یک خطا در برنامه میشویم. کاری که IDE با Plugin هایش برای ما انجام میدهد، مکانیزه کردن کل این فرایندها و مخفی کردن ابزارهای خط فرمانی و مراحل آن ها، در پس چند کلیک ساده است.
Eclipse:
خب، برای شروع، ابتدا Eclipse و سپس Java Card Development Kit 2.2.2 و پلاگین Eclipse-JCDE را دانلود میکنیم.
نکتهی مهم اول: Eclipse و Java Development Kit و Java Card Development Kit 2.2.2 و Windows چهار مورد باید یا 32 بیتی باشند یا 64 بیتی. تفاوت یکی از این موارد با موارد دیگر موجب ناسازگاری مجموعه میشود و عدم کارکرد صحیح میشود.
نکتهی مهم دوم: همانطور که پیشتر گفته بودیم، پلاگین Eclipse-JCDE تنها برای JCDK2.2.2 نوشته شده است. بنابراین شما باید این نسخه از JCDK را دانلود کنید. (با ترفندی میتوان از نسخه های پایین تر نیز استفاده کرد؛ لیکن، برای اجرای آن ترفندها، همچنان به نسخهی 2.2.2 نیز نیاز است).
اما بعد؛ پس از دانلود موارد بالا:
پست قبلی: الگوریتم های سزار و اِنیگما
در پست های قبلی این مجموعه، ابتدا با الگوریتمهای درهمنگاری(Hash) و الگوریتمهای Encoding/Decoding آشنا شدیم، تفاوت آنها را با الگوریتم های رمزنگاری (Encryption/Decryption) بررسی کردیم و در نهایت پس از بررسی مقدمات توسعهی رمزنگاری و علل نیاز به آن، در این پست قرار است به تقسیمبندی های الگورتیم های رمزنگاری امروزی بپردازیم.
قسمت قبلی: نسخههای جاواکارت و اصطلاحات
در قسمت های پیشین با ساختار کلّی جاواکارت و مفاهیم ابتدایی ضروری آن آشنا شدیم و دانستیم که برای آغاز به نوشتن یک اپلت و تبدیل آن به فایل cap. (فایلی که روی کارت بارگذاری و نصب میشود) ابتدا به یک IDE (محیط برنامه نویسی)، یک مجموعه API (واسط های از پیش نوشته شدهی JCDK , JDK)، یک ابزار برای بارگذاری و نصب اپلت و نهایتا یک ابزار برای ارتباط با آن نیاز داریم. در این قسمت مراحل نوشتن اپلت و تولید فایل cap. را در محیط Netbeans بررسی میکنیم.
Netbeans:
طبق آنچه پیش تر گفته شد، برنامه نویسی برای جاواکارت در محیط Netbeans، برای مواقعی مناسب از که کارت مورد نظر ما از نسخه ی جاواکارت 3.0.1 یا بالاتر پشتیبانی کند. البته لازم به ذکر است که به سبب Backward Compatible بودن استانداردهای جاواکارت، نوشتن اپلت هایی برای کارت های از ورژن پایین تر نیز در محیط Netbeans امکان پذیر است و حتی میتوان از آنها فایل cap. تولید کرد و در Simulatorهای این IDE آنها را بررسی کرد، لیکن، ورژن فایل نهایی 3.0.1 خواهد بود و قابلیت بارگذاری روی کارت پایین تر را نخواهد داشت.
و اما روند نوشتن و تولید اپلت:
پس از اجرای Netbeans، از منوی File گزینهی New Project را انتخاب میکتیم تا پنجره ی زیر ظاهر شود:
طبق تصویر بالا از سمت چپ گروه Java Card (چنانچه این گزینه را ندارید، باید نسخهی جدیدتری از Netbeans را دریافت کنید یا پلاگین های مربوطه را دانلود و نصب کنید) و از سمت راست نوع پروژه را Classic Applet Project (جهت آشنایی به قبلی آموزش مراجعه کنید) انتخاب میکنیم و روی Next کلیک میکنیم تا پنجرهی زیر ظاهر شود:
حالا که قدرتِ درک و تحلیلِ درخواستهای HTTP را به دست آوردیم، میخواهیم با این تواناییِ جدید، به سایتِ دیوار سر بزنیم و چند درخواست را با همدیگر تحلیل کنیم.
برای شروعِ کار، ابتدا همهی کوکیهای خود را که روی دیوار هستند پاک میکنیم.
در پست قبل یک سناریو تعریف کردیم که در آن "باب" و "آلیس"، پادشاه و فرماندهی زبده اش، در شرایطی قرار گرفته اند که باید مدام از طریق نامه تصیمات مهم جنگی خود را مبادله کنند؛ آنگاه آمدیم و معیارهایی را که از نظر ما، باید در مورد نامههای خود در نظر میگرفتند را بیان کردیم. حال میپردازیم به آنچه که واقعا گذشت ...
الگوریتم سزار:
"باب" جلسه ای دو نفره و محرمانه با "آلیس" تشکیل داد و با او در مورد نحوهی ارسال نامه ها مشورت کرد. چیزی که در ابتدا باب میخواست این بود که هیچ کسی جز آلیس قادر به فهمیدن محتوای نامه و دستورات نباشد. در این جلسه تصمیم باب و آلیس بر این شد که در متن نامه به جای هر حرف، حرف سه جایگاه قبل تر را جایگزین کنند. به این صورت که به جای A حرف X، به جای B حرف Y و ...
با روند فوق که در اصل یک نوع انکدینگ به حساب میآید (زیرا به نوعی فرمت حروف عوض شده است، و در صورتی که الگوریتم فاش شود، چیزی به عنوان کلید لازم نداریم و هر کسی میتواند داده ها را به حالت اولیه بازگرداند) به ظاهر محرمانگی نامههای تبادلی تضمین میشود، اما چیزی که بعدها باب و آلیس کشف کردند این بود که در نامه هایی نهایی درصد تکرار حروف میتواند باعث فاش شدن متن اصلی شود. یعنی از آنجا که پر تکرار ترین حرف انگلیسی E است، در نامه های رمز شده، پرتکرارترین حرف را اگر با E جایگزین کنیم، به متن اصلی نزدیک میشویم. به همین ترتیب تک حروف های منفرد، به احتمال زیاد یا I هستند یا A. این قبیل نتیجه گیری ها که همگی به علت یکسان نبودن احتمال ظاهر شدن حروف مختلف در خروجی نهایی نامه هاست، به سادگی میتوانست موجب رمزگشایی نامهها شود و بنابرین آلیس و باب باید به دنبال راهکار دیگری میبودند ...
[پایان داستان باب و آلیس!!!/به علت زیاد بودن مطالب]
شکل: نسبت تکرار حروف مختلف در یک متن انگلیسی
نکته: در دنیای رمزنگاری، الگوریتم فوق به نام الگوریتم سزار معروف است، زیرا برای اولین بار ژولیوس سزار پادشاه رومی برای ارتباط با فرماندهانش استفاده شد. از نام های دیگر آن میتوان به Shift Cipher، Caesar Code و Caesar shift اشاره کرد.
ماشین Enigma:
پس از الگوریتم سزار، دومین روش مشهوری که در روند توسعهی رمزنگاری وجود دارد، ماشین انیگما است. این وسیلهی سخت افزاری توسط آلمانها در جنگ جهانی دوم ابداع و استفاده شد.
جهت اطلاع دقیق از نحوه ی عملکرد این دستگاه میتوانید به این بخش از ویکیپدیا مراجعه کنید. ولی در نهایت خروجی های این دستگاه نیز توسط دانشمندان وابسته به متفقین رمزشکنی شد و رفته رفته گامهایی به سوی الگوریتم هایی مبتنی بر عملیات های ریاضی قویتر برداشته شد.
قسمت بعدی: بررسی تقسیم بندی الگوریتمهای رمزنگاری