SageMath
System for Algebra and Geometry Experimentation
sagemath یک نرمافزار ریاضی است که بسیاری از شاخههای ریاضی از جمله جبر مجرد، جبر خطّی، نظریهی اعداد و نظریهی گراف، آمار و احتمال و مثل همهی نرمافزارهای ریاضی دیگر ریاضی عمومی و بهینهسازی و آنالیز عددی را میپوشاند. امّا آنچه سبب شده تا در این وبگاه به معرفی این نرم افزار بپردازم بستهها و توابع مرتبط با رمزنگاری تعبیه شده در این نرمافزار و از آن مهمتر استقبال جامعه رمزنگاری در استفاده از این نرمافزار بوده است.
در جامعهی دانشگاهی ایران (و جهان) نرم افزارهای ریاضی نظیر Matlab ،Maple و Mathematica بیشتر شناخته شدهاند. این نرم افزارها هر یک در زمینهی خاصی قدرتمند هستند برای مثال Matlab برای محاسبات ماتریسی و هر آنچه بتوان با ماتریس مدل کرد قدرت زیادی دارد علاوه بر آن بیشتر از هر نرمافزار ریاضی دیگر در جامعه مهندسی شناخته شده و جعبهابزارهای زیادی به آن افزده شده و به نوعی آن را به یک نرم افزار همهکاره در مهندسی تبدیل کرده و در بسیاری از رشتههای مهندسی مثل برق، مکانیک، مهندسی شیمی و ... نیز از آن استفاده میشود. اما این نرم افزار، علیرغم اپلیکیشن Mupad تعبیه شده در آن برای محاسبات نمادین، در محاسبات نمادین حرفی برای گفتن ندارد، در عوض Maple و Mathematica در محاسبات نمادین خوب عمل میکنند. قصد ندارم در این نوشته جایگزینی برای نرمافزارهای فوق معرفی کنم چون همهی ما به نوعی به نرم افزارهای فوق عادت کردهایم و ترک عادت موجب مرض است، بلکه قصد دارم تا شما را با نرمافزاری دیگر که بیشتر مناسب رمزنگاری است آشنا کنم.
sage اولین بار در ۲۴ فوریهی ۲۰۰۵ به عنوان یک نرمافزار متنباز و رایگان تحت گواهی نامهی GNU GPL و با هدف اولیهی ((نرم افزاری متنباز و جایگزین برای Magma و Maple و Mathematica, Matlab)) تحت سرپرستی ریاضیدانی از دانشگاه واشنگتون به نام ویلیام آرتور اشتاین منتشر شد.
ویلیام اشتاین- سرپرست پروژه sagemath
سیج نرمافزاری پایتون مبنا است و شما میتوانید برنامههایتان در محیط سیج را به زبان پایتون بنویسید. به این ترتیب به راحتی میتوان توابع و رویهها را در آن تعریف کرد ضمن این که از ویژگی شئگرایی به خوبی پشتیبانی میکند. همانطور که در تیتر این مطلب مشاهده میکنید کلمه Sage مخفف عبارت System for Algebra and Geometry Experimentation و به معنای سامانهی برای آزمایشهای جبری و هندسی است.
خصوصیات بارز نرم افزار sagemath:
رابط کابری command-line با استفاده از IPython علاوه بر رابط گرافیکی
پشتیبانی از پردازش موازی با استفاده از پردازندههای چند هستهای و یا چند پردازنده
حساب دیفرانسیل و انتگرال با استفاده از Maxiama و Sympy
جبر خطّی عددی با استفاده از GSL و SciPy و NumPy
کتابخانهای شامل توابع مقدماتی و پیشرفتهی ریاضی
رسم دو و سه بعدی گراف توابع عددی و یا نمادین
محاسبات ماتریسی (البته نه به سادگی کار با ماتریسها در Matlab)
کتابخانهی آمار چند متغیره با استفاده از R و SciPy
حاوی توابعی آماده برای آنالیز و بصری سازی گرافها و تحقیق در زمینهی نظریهی گراف
کتابخانهی شامل بسیاری از توابع نظریه اعداد
پشتیبانی از اعداد مختلط و دقت دلخواه در محاسبات و از همه مهمتر پشتیبانی خوب از محاسبات نمادین
حاوی کتابخانههای استاندارد Python
اجرای کدهای Fortran و C و C++ ,Cython
قابلیت فراخوانی از طریق نرمافزار Mathemtica
کتابخانهی حاوی توابع مرتبط با رمزنگاری کلاسیک و مدرن
شامل بستههای نرمافزاری در زمینهی جبر از جمله Groebner Basis و SatSolver که در حملات جبری به سامانههای رمزنگاری مورد استفاده قرار میگیرند
سهولت کار با حلقهی اعداد گویا و صحیح و حلقههای چند جملهای با بیش از یک متغیر و نیز حلقههای خارج قسمتی و میدانهای متناهی در مقایسه با نرمافزارهایی نظیر CoCoA
استفاده از تکنیکهای پردازش کلمات شامل ویرایش فرمولها و پشتیبانی از latex برای نمایش زیبای خروجیهای نمادین
قابل استفاده در سیستمعاملهای مختلف از جمله لینوکس و ویندوز
این نرمافزار دارای یک نسخه آنلاین نیز هست. خوبی نسخه آنلاین این است که تقریبا کامل است و بیشتر کتابخانههای اختیاری را در بردارد و نیازی نیست تا کتابخانه خاصی را به آن اضافه کنید. مهمتر از همه این که برخلاف نرمافزارهایی نظیر متلب که برای استفاده از نسخه آنلاین آنهم باید لایسنس داشته باشید، استفاده از نسخه آنلاین این نرمافزار کاملا رایگان و ساده است و شما با ساختن یک حساب کاربری که فقط به یک ایمیل و یک پسورد نیاز دارد میتوانید بهصورت آنلاین از این نرمافزار استفاده کنید. پیشنهاد میکنم با مراجعه به لینک زیر یکبار اینکار را انجام دهید.
توسعه نرم افزار sage
وقتی ویلیام اشتاین سرپرست پروژه سیج ، این نرمافزار را طراحی میکرد، نرمافزارهای ریاضی متن باز زیادی به زبانهای مختلف از جمله C و Fortran و Python نوشته شده بودند. در این زمان توسعه دهندگان سیج بهجای اختراع دوباره چرخ و افزودن یک نرمافزار دیگر به لیست نرمافزارهای ریاضی موجود و به عبارت دیگر به جای نوشتن یک نرمافزار ریاضی از صفر، به جمع آوری بستههای آمادهی ریاضی که تا آن زمان نوشته شده بود در یک قالب واحد اقدام کردند به طوری که کاربر برای کار با آنها فقط کافی است با زبان Python آشنایی داشته باشد(که برای شروع یک آشنایی مقدماتی با این زبان کافی است). علاوه بر این sage شامل صدها و هزاران خط کد منحصر بفرد است که ضمن افزودن برخی قابلیتهای جدید به این بستههای آماده، به برقراری ارتباط بین این اجزا و ماژولهای آماده میپردازند.
سیج برای توسعه خود هم از دانشجویان و هم از توسعه دهندگان حرفهای بهره میبرد، توسعهای که هم به صورت داوطلبانه و هم از طریق کمکهای مالی صورت میگیرد.
عملکرد و کارایی
اگر مایل باشید این نرمافزار را روی کامپیوتر خود داشته باشید، هم نسخهی از پیش کامپایل شده(باینری) و هم سورس کد این نرم افزار در صفحهی دانلود رسمی نرمافزار در دسترس هستند. اگر سورس کد برنامه را دانلود کنید، پس از دانلود باید آن را روی کامپیوتر خود کامپایل کنید که یکی از مزایای این روش این است که بسیاری از کتابخانههای نرمافزار نظیر ATLAS و FLINT و NTL در هنگام کامپایل شدن، با در نظر گرفتن تعداد پردازندهها و حجم حافظهی نهان یا cash هر یک از پردازندههای کامپیوتر مقصد، متناسب با سخت افزار رایانه شما کامپایل و در نتیجه تنظیم و بهینه خواهند شد.لازم است بدانید روش مذکور علیرغم مزایای شمرده شده به مبتدیان توصیه نمیشود چرا که کامپایل نرمافزار جدای از وقتگیر بودن نیاز به تجربه دارد و ممکن است پس از دانلود اصلا مؤفق به کامپایل نشوید چرا که همان طور که گفته شد این امر نیازمند دانش و تجربهی بیشتری است. راه سادهتر که البته مزیتهای شمرده شده در بند قبل را نخواهد داشت دانلود فایل از پیش کامپایل شدهی نرمافزار به صورت باینری و نصب آن بر روی کامپیوتر مقصد است (که البته بنده خود از روش دوّم استفاده کردم!) کاری که در مورد بسیاری از نرمافزارهای ویندوز و شاید هم لینوکس انجام میدهیم... پذیرش لایسنس و چند بار کلیک بر روی گزینهی NEXT و بعد استفاده از نرمافزار!
بستههای نرمافزاری تعبیه شده در SageMath
همانطور که قبل از این هم ذکر کردم فلسفهی سیج استفاده از کتابخانههای متنباز ریاضی موجود بود، به همین خاطر این نرمافزار از بسیاری از کتابخانههای نوشتهشده در سایر پروژهها نظیر Singular و Maxima و GAP وام گرفته و شما بخشی از این بستههای نرمافزاری مورد استفاده در سیج را میتوانید در جدول زیر مشاهده نمایید.
Thunderbird+Enigmail
نرم افزار thunderbird یک نرم افزار مدیریت ایمیل رومیزی است. این نرم افزار متن باز بوده و دارای افزونههای فراوان و متنوعی است. یکی از این افزونهها که مورد نظر ما است افزونهی Enigmail است. این افزونه برای رمزنگاری ایمیلها مورد استفاده قرار میگیرد.
اگر دوست دارید که ایمیلهای شما تحت نظارت عمومی قرار نگیرد و به صورت کاملا محرمانه به دست گیرنده برسد طوری که هیچ موجودی که در میانه شبکه قرار دارد(حتی سرویسدهنده ایمیل شما از جمله yahoo و Gmail و ...) به محتوای پیام شما دست نیابد، این نرم افزار گزینهی مناسبی برای شما خواهد بود. در واقع در شبکهی وب فرستنده و گیرنده در نقاط انتهایی شبکه قرار دارند و سرویس دهنده ایمیل و چندین روتر و سوییچ دیگر در میانه شبکه قرار دارند تا ارتباط بین فرستنده و گیرنده برقرار شود. آنچه برای ما مهم است این است که هیچ موجودی در میان این شبکه نتواند به محتوای پیام دست یابد و فقط طرفین ارتباط بتوانند پیام را بخوانند. در این نرم افزار دادهی ارسالی به صورت end-to-end رمزنگاری می شود و فقط طرفین ارتباط که در نقاط انتهایی شبکه قرار دارند(و در ضمن کلید را دارند) میتوانند محتوای پیام را بدانند و سایرین فقط به رمز شده پیام دسترسی دارند.
استاندارد رمزنگاری که در رمزنگاری ایمیلها مورد استفاده قرار میگیرد استاندارد PGP(یا Pretty Good Privacy) است. نرم افزاری به نام GnuPG (یا Gnu Privacy Gaurd)وجود دارد که میتواند از این استاندارد استفاده کرده و ایمیلها را رمزکند. نرم افزار GnuPG به صورت پیش فرض در سیستم عاملهای لینوکس نصب است ولی اگر از ویندوز استفاده میکنید این نرم افزار به راحتی روی ویندوز هم قابل نصب خواهد بود. افزونه Enigmail که مورد نظر ما است یک رابط گرافیکی و آسان فراهم میکند تا شما براحتی بتوانید از GnuPG و استاندارد PGP استفاده کنید.
ما با استفاده از افزونه Enigmail در نرم افزار Thunderbird دو هدف را دنبال میکنیم:
-
احراز اصالت پیامهای دریافتی و امضای پیامهای ارسالی
جدا از فوایدی که نرم افزارهای مدیرت ایمیل از جمله Thunderbird (و Outlook) دارند، ما رمزنگارها(ی بعد از این!) دوست داریم برای رسیدن به اهداف فوق از این نرم افزارها استفاده کنیم.
ما با رمز کردن ایمیلهای ارسالی به وسیله کلید عمومی گیرنده میتوانیم به اولین هدف یعنی برقراری محرمانگی و حفظ حریم شخصی برسیم. گیرنده پس از دریافت پیام آن را با کلید خصوصی خود رمزگشایی میکند ولی هیچ موجود دیگر قادر به رمزگشایی پیام رمزشده نیست چرا که کلید خصوصی(متناظر با کلید عمومی که رمزنگاری بوسیله کلید عمومی صورت گرفته) فقط نزد صاحب زوج کلید یعنی گیرنده است و واقعا خصوصی است! بالعکس کلید عمومی برای همه قابل مشاهده است و در دسترس همگان قرار دارد. در واقع هر موجود دارای یک زوج کلید است، یک کلید خصوصی که باید کاملا محرمانه و فقط نزد صاحب زوج کلید باشد و دیگری کلید عمومی که باید برای همگان قابل مشاهده و دستیابی باشد. با هر کدام از کلیدهای خصوصی و عمومی میتوان هم رمزنگاری کرد و هم رمزگشایی به این صورت که اگر یک پیام را با کلید خصوصی رمزنگاری کنیم آنگاه فقط با کلید عمومی میتوان آن را رمزگشایی کرد و اگر پیام را با کلید عمومی رمز کنیم فقط با کلید خصوصی قابل رمزگشایی است. ناگفته نماند که طراحی سیستمهای کلید همگانی طوری است که، با داشتن کلید خصوصی براحتی میتوان کلید عمومی متناظر با آن را محاسبه کرد ولی عکس این عمل(از نظر محاسباتی)تقریبا غیر ممکن است.(دوستانی که با سیستمهای رمزنگاری کلید همگانی آشنایی ندارند را به کتابهای رمزنگاری که در این سایت معرفی شده ارجاع میدهم)
از طرف دیگر برای احراز اصالت پیامهایی که دریافت میکنیم میتوانیم با رمزگشایی آن پیام بوسیله کلید عمومی شخص فرستنده پی ببریم که هویت ارسال کننده جعلی است یا واقعی(البته در این مورد فرستنده، باید پیام را با کلید خصوصی خود رمز کند که این هم به نوعی نقش امضا در دنیای دیجیتال را بازی میکند).
از طریق لینک زیر میتوانید نرم افزار thunderbird را دریافت کنید(سرور سیستم عامل شما را تشخیص داده و نسخهی متناسب با آن را به شما خواهد داد).
پس از نصب نرم فزار فوق افزونه Enigmail را به آن اضافه کنید.
برای آشنایی با نحوه کار با Enigmail به لینک زیر مراجعه کنید.
نرم افزار دیگری که برای رمزنگاری ایمیلها استفاده میشود Mailvelope نام دارد. این نرم افزار یک افزونه است که به مرورگر فایرفاکس یا کروم افزوده شده و بهوسیلهی آن میتوان تقریبا همهی کارهایی که با Enigmailانجام میشود را انجام داد، بدون این که نیاز باشد نرم افزار مدیریت ایمیل (مثل thunderbird) روی کامپیوتر نصب باشد.
برای دریافت این نرم افزار به از لینک زیر استفاده کنید.
با تشکر از آقای س.محمدیان به خاطر معرفی این افزونه.
Cryptography for everybody
رمزنگاری برای همه
این شعار پروژه ای به نام Cryptool است. این پروژه با هدف آموزش علم رمزنگاری به دانشجویان و حتی دانشآموزان راهاندازی شده.
نتیجهی اجرای این پروژه تا کنون تولید نرم افزارهایی در زمینه رمزنگاری است که در زیر به معرفی آنها میپردازم.
نرم افزار Cryptool یا CT
این نرم افزار متن باز بوده و بر مبنای C و ++C نوشته شده و در دو نسخهی ۱ و ۲ منتشر شده ولی این دو نسخه مکمل هم هستند و نسخهی۱ آن ویژگیهایی دارد که نسخهی ۲ از داشتن آنها محروم است. در هرصورت خوب است که هر دو نسخه را روی کامپیوتر خود داشته باشید.البته این نرم افزار روی سیستم عامل ویندوز قابل اجرا است.
مهمترین ویژگی این نرم افزار بصری سازی مفاهیم مختلف رمزنگاری است. محیط نسخه ۲ این نرم افزار قالبی شبیه به آفیس ۲۰۰۷ دارد و شما میتوانید نمایی از آن را در زیر مشاهده نمایید. در این نما ماشین انیگما در حال رمزنگاری یک متن لاتین است!
همان طور که در ابتدا ذکر شد این نرم افزار برای آموزش رمزنگاری طراحی شده که مهمترین بخش های آن عبارتند از:
بلوکهای آماده برای رمزنگاری و رمزگشایی در دو بخش نوین و کلاسیک.
تحلیل رمزهای کلاسیک و مدرن.
ابزارهایی شامل شبیه سازیهای رمزنگاری نظیر چت تصویری رمزنگاری شده.
دنیای اعداد اول(در ارتباط با نظریه اعداد محاسباتی در رمزنگاری).
آموختارهایی در زمینه مشبکهها و مسائل سخت آن.
بصریسازی الگوریتمها و سیستمهای رمزنگاری.
میتوان گفت این بهترین نرم افزار متنبازی است که در رابطه با آموزش رمزنگاری برای عموم طراحی شده. یکی از بخشهای جذاب این نرم افزار فراهم کردن محیطی است تا کاربر در آن بتواند ایدهها و آموختههای خود را به محک آزمون بگذارد، به این صورت که کاربر میتواند با قرار دادن بلوکهای مختلف رمزنگاری در محیط نرم افزار و اتصال مناسب آنها به یکدیگر یک سیستم رمزنگاری درست کرده و به آزمون و خطا روی آن بپردازد، در واقع کاربر میتواند بلوکهای مختلف رمزنگاری را به صورت مناسب به هم وصل کند و یک سیستم رمزنگاری طراحی کند.
پروژهی Cryptool غیر از نرم افزار فوق یک نرم افزار دیگر به نام JCryptool را برای آموزش رمزنگاری در محیط Eclipse طراحی کرده که قابل استفاده در سیستم عامل لینوکس و ویندوز است.
دانلود CT1
SHA1: 4560f1c1d3a29719ac01f2c88997f110ad1f2a6c, MD5: 991084a953c498bd108a664c120b0cd7
JCryptool یا JCT
این نرم افزار نیز متن باز بوده و قابل اجرا روی سیستم عاملهای لینوکس و ویندوز است و شما را قادر میسازد تا به تمرین آموختههای خود در زمینه رمزنگاری در محیط Eclipse بپردازید. این نرم افزار به خوبی و جامعیت CT نیست ولی دارای بخشهایی است که در CT وجود ندارد.
این نرم افزار نیز بهترین انتخاب برای آموزش رمزنگاری در محیط سیستم عامل لینوکس است.
در زیر نمایی از این نرم افزار را مشاهده میکنید. در این نما احراز اصالت با استفاده از یکریختی گرافها بصری سازی شده است.
دانلود نرم افزار JCT برای لینوکس 32bit
دانلود نرم افزار JCT برای ویندوز 64bit
دانلود نرم افزار JCT برای ویندوز 32bit