روت۱۳

روت۱۳  یک روش ساده برای به رمز درآوردن حروف الفباست. این روش از نوع رمزنگاری جانشینی است. در این روش، هر حرف، با سیزدهمین حرف بعد از خود در حروف الفبا جایگزین می‌شود. ROT13 نمونه‌ای از رمز سزار است که در روم باستان به وجود آمده‌است.

در الفبای مقدماتی لاتین، ROT13 به صورت خودوارون عمل می‌کند. به این معنی که برای برگرداندن متن رمزشده به حالت اولیه، از همان الگوریتم استفاده می‌شود و به این ترتیب می‌توان از یک عمل یکسان هم برای رمزنگاری و هم برای رمزگشایی استفاده کرد. این الگوریتم عملاً هیچ نوع امنیتی ندارد و اغلب از آن به عنوان مثالی از یک روش رمزنگاری ضعیف و بدون امنیت یاد می‌شود.

در تالارهای گفتگوی اینترنتی، از ROT13 به عنوان وسیله‌ای برای پنهان کردن افشاسازها، شاه‌بیت‌ها، راه‌حل مسائل و معماها و مطالب تعرض‌آمیز استفاده می‌شود تا جلوی دید اتفاقی را بگیرد. در نشریات و مجلات، عموماً برای پنهان کردن پاسخ معماها، آن‌ها را به صورت وارون چاپ می‌کنند تا خواننده در حالت عادی قادر به خواندن پاسخ نباشد و مجبور باشد برای دیدن پاسخ، کاغذ را بچرخاند. از الگوریتم ROT13، به عنوان «برابر یوزنتی این روش» یاد شده‌است. ROT13 الهام‌بخش انواع گوناگونی از بازی‌های نامه‌ای آنلاین بوده‌است و در گفتگوهای گروه‌های خبری به‌طور مکرر به آن اشاره می‌شود.

شرح 
برای اعمال کردن الگوریتم ROT13 بر روی یک متن انگلیسی، کافیست هر یک از حروف با سیزدهمین حرف مابعد خود در الفبای انگلیسی جایگزین شود و در صورت نیاز، عمل جایگزینی از ابتدای فهرست صورت گیرد. برای راحتی کار، می‌توان کلیهٔ حروف الفبای زبان انگلیسی را به صورت ساعت‌گرد و دایره‌وار بر روی یک تکه کاغذ نوشت و سپس برای جایگزین کردن هر حرف، انگشت دست را بر روی آن حرف گذاشته و ۱۳ مکان به صورت ساعت‌گرد حرکت کرده و سپس حرفی که انگشت دست بر روی آن قرار گرفته را بنویسیم. با این کار، حرف A به حرف N تبدیل می‌شود، B به حرف O تبدیل می‌شود و به همین ترتیب تا حرف M که به Z تبدیل می‌شود. سپس این دنباله از ابتدای حروف الفبا آغاز می‌شود، حرف N به A تبدیل می‌شود، O به B تبدیل می‌شود و به همین ترتیب تا حرف Z که به M تبدیل می‌شود. تنها حروفی که در الفبای انگلیسی قرار دارند تحت تأثیر قرار می‌گیرند، اعداد، نمادها و علائم، حروف فاصله و تمام حروف‌های دیگر، بدون تغییر رها می‌شوند. از آنجا که حروف الفبای انگلیسی بیست و شش حرف دارد و ۲۶ = ۲ × ۱۳، تابع ROT13 یک تابع خودوارون است. به عبارتی دیگر، برای هر متن x که با الفبای لاتین ساده نوشته شده‌است، داریم:

به عبارت دیگر، اگر دو بار پشت سر هم ROT13 را بر روی یک متن بکار ببریم، نتیجه همان متن اولیه خواهد بود (در ریاضیات معمولاً به آن «رجعت» و در رمزنگاری به آن رمزنگاری دوجانبه می‌گویند)

عمل تبدیل متن می‌تواند به وسیلهٔ یک جدول جستجو صورت پذیرد.

در لطیفهٔ زیر، شاه‌بیت توسط ROT13 پنهان شده‌است:

 Why did the chicken cross the road?
 Gb trg gb gur bgure fvqr!

اگر کل متن را با استفاده از الگوریتم ROT13 تبدیل کنیم، پاسخ نمایان خواهد شد:

 Jul qvq gur puvpxra pebff gur ebnq?
 To get to the other side!

اگر بار دیگر بر روی متن نتیجه، الگوریتم ROT13 را اجرا کنیم، متن اولیه بدست خواهد آمد.

موارد استفاده 
در اوایل دههٔ ۱۹۸۰ (میلادی)، از ROT13 در گروه خبری net.jokes استفاده می‌شد. از ROT13 برای پنهان کردن لطیفه‌های اهانت‌آمیز یا برای مخفی کردن پاسخ یک معما یا مسئله یا هر گونه اسپویلر دیگری استفاده می‌شد. دلیل انتخاب ۱۳ به جای دیگر مقادیر نظیر ۳ که در رمزنگاری سزار اصلی استفاده می‌شود، به این خاطر بود که با تعویض کردن هر دو حرفی که ۱۳ واحد با هم فاصله دارند، می‌توان الگوریتم‌های رمزگذاری و رمزگشایی مشابه و یکسانی داشت؛ در نتیجه می‌توان به راحتی از یک دستور واحد برای انجام هر دو عمل استفاده کرد. نرم‌افزارهای خبرخوان، معمولاً از ROT13 به‌صورت توکار پشتیبانی می‌کنند و نیازی به نصب کردن هیچگونه افزونه اضافی نیست. آدرس‌های ایمیل هم گاهی اوقات با ROT13 رمزنگاری می‌شوند تا از ربات‌های جفنگ‌نگاری غیر پیشرفته در امان بمانند.

ROT13 نمونه‌ای از یک الگوریتم رمزنگاری است که به نام رمزنگاری سزار شناخته می‌شود. گفته می‌شود ژولیوس سزار در قرن اول پیش از میلاد، الگوریتم سزار را ابداع کرده‌است.

در مواردی که محرمانه بودن اطلاعات مد نظر است و اطلاعات نباید بدست افراد غیرمجاز بیفتد، نباید از ROT13 استفاده شود. از آنجایی که در الگوریتم ROT13 هر حرف به تعداد ثابتی (۱۳ تا) جابجا می‌شود – و در واقع می‌توان گفت که از هیچگونه کلیدی برای رمزنگاری استفاده نمی‌شود – اطلاعات به سادگی قابل رمزگشایی هستند. تنها با دانستن اینکه اطلاعات با الگوریتم ROT13 رمزنگاری شده‌اند، می‌توان به آسانی و با همین الگوریتم اطلاعات را رمزگشایی کرده و به حالت اولیه درآورد. حتی اگر دانسته نباشد که اطلاعات به روش ROT13 رمزنگاری شده‌اند، باز هم می‌توان این الگوریتم را به آسانی و به روش تحلیل فراوانی در هم شکست. به خاطر اینکه این الگوریتم مطلقاً برای رمزنگاری نامناسب است، تبدیل به یک کنایه برای تمسخر کردن دیگر الگوریتم‌های ضعیف رمزنگاری شده‌است. مثلاً شخصی می‌تواند بگوید که «الگوریتم ۵۶-بیتی DES تنها کمی از ROT13 قویتر هست» که اشاره به ضعیف بودن این الگوریتم دارد. همچنین برای شوخی با اصطلاحاتی حقیقی در دنیای واقعی مانند «DES دوگانه»، اصطلاحات تمسخرآمیزی مانند «ROT13 دوگانه»، «ROT26» یا «2ROT13» مورد استفاده قرار می‌گیرند که یک نمونه از استفاده این کلمات، یک مقالهٔ دانشگاهی جعلی به نام «در مورد الگوریتم رمزنگاری 2ROT13» است. از آنجایی که اگر الگوریتم ROT13 را بر روی متنی که خود قبلاً با ROT13 رمزنگاری شده، اعمال کنیم، متن اصلی و اولیه بدست می‌آید، اصطلاح ROT26 یا 2ROT13 معادل «بدون هر گونه رمزنگاری» است. اصطلاح «ROT13 سه‌گانه» که برای شوخی با 3DES استفاده می‌شود، برابر با همان ROT13 معمولی است.

در ماه دسامبر ۱۹۹۹ (میلادی)، کشف شد که نت‌اسکیپ کامیونیکیتور از ROT-13 برای رمزنگاری پسورد ایمیل‌ها استفاده می‌کند. در سال ۲۰۰۱ (میلادی)، برنامه‌نویس روسی، Dimitry Sklyarov نشان داد که یک فروشندهٔ کتاب‌های الکترونیکی به نام NPRG، از ROT13 برای رمزنگاری اسناد استفاده می‌کرده‌است. گمانه‌زنی‌هایی در اینباره وجود داشت که ممکن است NPRG اشتباهاً یک مثال شوخی‌آمیز در مورد ROT13 را به عنوان یک روش جدی و قدرتمند برای رمزنگاری اطلاعات تفسیر کرده باشد. ویندوز اکس‌پی در برخی از کلیدهای رجیستری خود از ROT13 استفاده می‌کند.

بازی‌های نامه‌ای و فرهنگ اینترنت 

با رمزنگاری برخی از کلمات با استفاده از ROT13، کلمه معنی‌دار دیگری حاصل می‌شود. این ویژگی ROT13 دستمایهٔ برخی از بازی‌های نامه‌ای شده‌است. کلمات هفت-حرفی abjurer و nowhere دو نمونه طولانی هستند که اگر ROT13 را بر روی یکی از آن‌ها اعمال کنیم، کلمهٔ دیگر بدست می‌آید. دو کلمهٔ chechen و purpura هم هر دو هفت‌حرفی هستند که این ویژگی را دارند. نمونه‌های دیگری از این قبیل کلمات، در جدول روبرو آورده شده‌است. در این میان، دو کلمهٔ gnat و tang یک نمونه جالب توجه است که هم اجرای ROT13 بر روی یکی، دیگری را نتیجه می‌دهد و هم اینکه اگر یکی را به صورت وارونه بخوانیم، نتیجه دیگری خواهد بود.

Brian Westley در مسابقهٔ بین‌المللی کدنویسی مبهم به زبان سی در سال ۱۹۸۹ میلادی، یک برنامهٔ رایانه‌ای نوشته بود که کد منبع آن این قابلیت را داشت که با استفاده از ROT13 کدگذاری یا وارون شود، به طوریکه همچنان بتوان آن را به‌درستی کامپایل کرد. این برنامه هنوز هم با گذشت سال‌ها، بر روی کامپایلرهای امروزی به‌درستی کامپایل می‌شود. کار این برنامه این بود که متنی که به عنوان ورودی به آن داده می‌شد را با استفاده از ROT13 رمزنگاری یا معکوس کند.

گروه خبری alt.folklore.urban واژه‌ای جدید به نام furrfu را اختراع کرده‌است که در اصل با اعمال ROT13 بر روی واژه sheesh به وجود آمده‌است. این واژه به این خاطر به وجود آمد که برخی از کاربران این گروه خبری، فکر می‌کردند که واژهٔ sheesh بیش از حد مورد استفاده قرار می‌گیرد و در صدد جایگزین کردن آن برآمدند. واژهٔ sheesh در این گروه خبری، به عنوان پاسخی برای ارسال‌های تکراری تازه‌ واردین در مورد افسانه‌های محلی مورد استفاده قرار می‌گرفت.

گونه‌ها 
ROT5 الگوریتمی مشابه ROT13 است که بر روی ارقام عددی (۰ تا ۹) اعمال می‌شود. ROT13 و ROT5 می‌توانند به صورت همزمان برای رمزنگاری یک پیام مورد استفاده قرار گیرند.

ROT47 یکی از مشتقات ROT13 است که علاوه بر حروف ساده الفبای انگلیسی، می‌تواند اعداد و علائم را هم رمز کند. ROT47 به جای استفاده کردن از دنباله A–Z به عنوان حروف الفبا، از مجموعه کاراکترهای بزرگتری از یک کدبندی نویسه رایج به نام ASCII استفاده می‌کند. در این روش، کاراکترهای ۷-بیتی چاپ‌شدنی، به استثنای فضای خالی (space)، از بازهٔ ۳۳ تا ۱۲۶ با چهل و هفتمین کاراکتر بعد از خود جایگزین می‌شوند. به عنوان مثال، کاراکتر A با p جایگزین می‌شود، کاراکتر a به ۲ تبدیل می‌شود و به همین ترتیب. این روش هم مشابه ROT13 خودوارون است و اجرای مجدد ROT47 بر روی متنی که قبلاً با همین روش رمز شده، متن اولیه و اصلی را دربرخواهد داشت. استفاده کردن از این الفبای بزرگتر باعث می‌شود نتیجه کار از ROT13 مبهم‌تر باشد. برای مثال، یک شمارهٔ تلفن همانند  به شکل  رمز می‌شود که در نگاه اول خیلی واضح و مشخص نیست. از سوی دیگر، از آنجایی که ROT47 هم حروف، هم اعداد و هم نشانه‌ها را بدون فرق گذاشتن بین آن‌ها در هم می‌آمیزد، با یک نگاه به متن می‌توان به سرعت پی برد که این یک متن رمزشده‌ است، نه یک جمله معمولی.

مثال:

The Quick Brown Fox Jumps Over The Lazy Dog.

که به صورت زیر رمز می‌شود:

%96 "F:4<qC@H? u@I yF>AD ~G6C %۹۶ {2KJ s@۸]

در کتابخانه سی گنو که مجموعه‌ای از رابط‌های برنامه‌نویسی نرم‌افزار است، تابعی به نام memfrob() وجود دارد که کاری مشابه ROT13 انجام می‌دهد. هرچند که این تابع به جای حروف الفبا، با داده‌های باینری دلخواه کار می‌کند و از این حیث با ROT13 متفاوت است. این تابع هر بایت را با عدد باینری 00101010 XOR می‌کند که نتیجه آن یک رمز XOR ساده است. همانند ROT13، تابع memfrob() هم خودوارون است و امنیتی به همان میزان (عملاً بدون امنیت) فراهم می‌کند.

پیاده‌سازی‌ها 
tr
دستوری به نام tr در سیستم‌عامل‌های شبه یونیکس وجود دارد که به وسیله آن به راحتی می‌توان ROT13 و ROT47 را پیاده‌سازی کرد. برای رمزگذاری کردن رشتهٔ متنی The Quick Brown Fox Jumps Over The Lazy Dog به وسیلهٔ ROT13، کافیست به صورت زیر عمل کرد:

$ # Map upper case A-Z to N-ZA-M and lower case a-z to n-za-m
$ echo "The Quick Brown Fox Jumps Over The Lazy Dog" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt
$ tr 'A-Za-z' 'N-ZA-Mn-za-m' <<<"The Quick Brown Fox Jumps Over The Lazy Dog"
Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt

و برای رمزنگاری همان رشته به وسیلهٔ ROT47:
$ echo "The Quick Brown Fox Jumps Over The Lazy Dog" | tr '\!-~' 'P-~\!-O'
%96 "F:4<qC@H? u@I yF>AD ~G6C %96 {2KJ s@8
و
$ tr '\!-~' 'P-~\!-O' <<<"The Quick Brown Fox Jumps Over The Lazy Dog"
%96 "F:4<qC@H? u@I yF>AD ~G6C %96 {2KJ s@8

ویم
در ویرایشگر متن ویم، می‌توان متن مورد نظر را انتخاب کرده و سپس دستور زیر را اجرا کرد تا متن مورد نظر به صورت ROT13 رمزنگاری شود:

g?

سی
پیاده‌سازی به زبان سی:

void rot13(char *p)
{
        int i = 0;
        int n;

        while(p[i])
        {
                if (p[i] <'A' || p[i]> ('a' + 26))
                {
                        i++;
                        continue;
                }

                if (p[i] <'a')
                {
                        n = 'A';
                }
                else
                {
                        n = 'a';
                }

                n = (p[i] - (n + 13)) % 26 + n;
                p[i++] = (char)n;
        }
}

جاوااسکریپت
پیاده‌سازی به جاوااسکریپت:
"Sample text".replace(/[A-Za-z]/g, function (c) { return String.fromCharCode(c.charCodeAt(0) + (c.toUpperCase() <= 'M' ? 13 : -13)); });

جستارهای وابسته 
 تحلیل رمز

پانویس

منابع

پیوند به بیرون 
  برای ROT13 و ROT5 (بدون جاوااسکریپت)
  (با استفاده از جاوا اسکریپت)

رمزهای کلاسیک
فرهنگ اینترنت
ویکی‌سازی رباتیک