داریوش
داریوش
خواندن ۳ دقیقه·۵ سال پیش

روت ۱۶ - رمز نوشتار دو طرفه برای فارسی

چرخ رمز
چرخ رمز

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

ژولیوس سزار (یا کسی در دستگاه حکومتی او) ابتکاری به خرج داد و به جای هر کاراکتر، سه کاراکتر بعدش را جایگزین کرد. مثلا اگر زبانشان فارسی بود بجای ب می‌نوشتند ث. روشی که کشف محتوای پیام ها را لااقل در آن زمان سخت می‌کرد. شیوه‌ای که بسیاری از منابع رمزنگاری از آن به عنوان آغازگر عصر رمزنگاری یاد می‌کنند.

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

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


روت ۱۳

تبدیلات روت۱۳
تبدیلات روت۱۳

روت ۱۳ یک رمزنگاری سزار دو طرفه است. مدلی که در آن یک الگوریتم هم برای رمز کردن متن و هم برای رمزگشایی متنِ رمز شده استفاده می‌شود.

استفاده از راهکار سراز در بین کامپیوتری‌های ابتدای عصر کامپیوترهای مدرن رواج یافت، اما نه با روش ۳ تایی سزار، بلکه با روشی که یک الگوریتم تغییر کلمات، هم الگوریتم رمزنگار بود و هم الگوریتم رمز گشا: ROT13. این روش بسیار ساده و خلاقانه بود، در این شیوه، هر کاراکتر با کاراکتر ۱۳ تا جلوتر از آن کاراکتر جایگزین می شود (مثلا a میشود n) و به این دلیل که انگلیسی از ۲۶ کاراکتر اصلی تشکیل شده است، اگر یکبار دیگر این الگوریتم روی متن خروجی اعمال شود به همان نوشته‌ی اصلی که رمز شده میرسیم ( یعنی n میشود a). این الگوریتم فقط روی کاراکترهای معمولی زبان انگلیسی تغییر ایجاد می‌کند و مابقی کاراکترهای متن را تغییر نمی‌دهد.

به این ترتیب استفاده کنندگان نیاز نبود که کلیدی جابجا کنند و با یک نرم افزار واحد یا یک محاسبه‌ی مشخص هم نوشته خود را رمز می‌کنند و هم نوشته‌ی رمز شده را رمزگشایی می‌کنند.

روت ۱۶ برای فارسی

احتمالا حدسش ساده است که روت۱۶ چیست. یک الگوریتم مشابه روت۱۳ که صرفا روی کاراکترهای اصلی و پایه‌ای خط فارسی اعمال می‌شود و هرکاراکتر را با ۱۶ کاراکتر بعد از خودش روی الفبا جایگزین می‌کند و به دلیل ۳۲ کاراکتری بودن خط فارسی، با یکبار اعمال الگوریتم عملیات رمزی‌سازی متن و با یکبار دیگر اجرای الگوریتم روی خروجی، عملیات رمزگشایی متن انجام می‌شود.

پیاده سازی روت ۱۶ برای فارسی

چند ماه پیش برای سرگرمی یک پیاده سازی ساده از روت۱۶ انجام دادم. همانند نسخه‌ی انگلیسی، این پیاده سازی هم صرفا روی کاراکترهای اصلی فارسی عملیات رمزنگاری و رمزگشایی را انجام میدهد و روی مابقی کاراکترها تغییری ایجاد نمی‌کند. همچنین کاراکترهایی مانند آ، فتحه، ضمّه و ... هیچ تغییری روی خود نمیبینند.

میتوانید بصورت برخط این پروژه را امتحان کنید و از آن استفاده کنید و البته سورس کد این پروژه روی مخزن گیتهاب در دسترس است و منتظر مشارکت‌های احتمالی شما :)



رمزنگاری
برنامه‌نویس پاره وقت . خیال پرداز تمام‌وقت
شاید از این پست‌ها خوشتان بیاید