روت۱۳

روت۱۳ (به انگلیسی: ROT13) یک روش ساده برای به رمز درآوردن حروف الفباست. این روش از نوع رمزنگاری جانشینی است. در این روش، هر حرف، با سیزدهمین حرف بعد از خود در حروف الفبا جایگزین می‌شود. ROT13 نمونه‌ای از رمز سزار است که در روم باستان به وجود آمده‌است.
در الفبای مقدماتی لاتین، ROT13 به صورت خودوارون عمل می‌کند. به این معنی که برای برگرداندن متن رمزشده به حالت اولیه، از همان الگوریتم استفاده می‌شود و به این ترتیب می‌توان از یک عمل یکسان هم برای رمزنگاری و هم برای رمزگشایی استفاده کرد. این الگوریتم عملاً هیچ نوع امنیتی ندارد و اغلب از آن به عنوان مثالی از یک روش رمزنگاری ضعیف و بدون امنیت یاد می‌شود.
در تالارهای گفتگوی اینترنتی، از ROT13 به عنوان وسیله‌ای برای پنهان کردن افشاسازها، شاه‌بیت‌ها، راه‌حل مسائل و معماها و مطالب تعرض‌آمیز استفاده می‌شود تا جلوی دید اتفاقی را بگیرد. در نشریات و مجلات، عموماً برای پنهان کردن پاسخ معماها، آن‌ها را به صورت وارون چاپ می‌کنند تا خواننده در حالت عادی قادر به خواندن پاسخ نباشد و مجبور باشد برای دیدن پاسخ، کاغذ را بچرخاند. از الگوریتم ROT13، به عنوان «برابر یوزنتی این روش» یاد شده‌است. 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 استفاده می‌کند.

پیاده‌سازی‌ها

دستوری به نام 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)); });