روت۱۳
روت۱۳ (به انگلیسی: ROT13)[پ ۱] یک روش ساده برای به رمز درآوردن حروف الفباست. این روش از نوع رمزنگاری جانشینی است. در این روش، هر حرف، با سیزدهمین حرف بعد از خود در حروف الفبا جایگزین میشود. ROT13 نمونهای از رمز سزار است که در روم باستان به وجود آمدهاست.
در الفبای مقدماتی لاتین، ROT13 به صورت خودوارون عمل میکند. به این معنی که برای برگرداندن متن رمزشده به حالت اولیه، از همان الگوریتم استفاده میشود و به این ترتیب میتوان از یک عمل یکسان هم برای رمزنگاری و هم برای رمزگشایی استفاده کرد. این الگوریتم عملاً هیچ نوع امنیتی ندارد و اغلب از آن به عنوان مثالی از یک روش رمزنگاری ضعیف و بدون امنیت یاد میشود.
در تالارهای گفتگوی اینترنتی، از ROT13 به عنوان وسیلهای برای پنهان کردن افشاسازها، شاهبیتها، راهحل مسائل و معماها و مطالب تعرضآمیز استفاده میشود تا جلوی دید اتفاقی را بگیرد. در نشریات و مجلات، عموماً برای پنهان کردن پاسخ معماها، آنها را به صورت وارون چاپ میکنند تا خواننده در حالت عادی قادر به خواندن پاسخ نباشد و مجبور باشد برای دیدن پاسخ، کاغذ را بچرخاند. از الگوریتم ROT13، به عنوان «برابر یوزنتی این روش» یاد شدهاست.[۱] ROT13 الهامبخش انواع گوناگونی از بازیهای نامهای آنلاین بودهاست و در گفتگوهای گروههای خبری بهطور مکرر به آن اشاره میشود.
شرح
ویرایشبرای اعمال کردن الگوریتم ROT13 بر روی یک متن انگلیسی، کافیست هر یک از حروف با سیزدهمین حرف مابعد خود در الفبای انگلیسی جایگزین شود و در صورت نیاز، عمل جایگزینی از ابتدای فهرست صورت گیرد.[۲] برای راحتی کار، میتوان کلیهٔ حروف الفبای زبان انگلیسی را به صورت ساعتگرد و دایرهوار بر روی یک تکه کاغذ نوشت و سپس برای جایگزین کردن هر حرف، انگشت دست را بر روی آن حرف گذاشته و ۱۳ مکان به صورت ساعتگرد حرکت کرده و سپس حرفی که انگشت دست بر روی آن قرار گرفته را بنویسیم. با این کار، حرف A به حرف N تبدیل میشود، B به حرف O[پ ۲] تبدیل میشود و به همین ترتیب تا حرف M که به Z تبدیل میشود. سپس این دنباله از ابتدای حروف الفبا آغاز میشود، حرف N به A تبدیل میشود، O به B تبدیل میشود و به همین ترتیب تا حرف Z که به M تبدیل میشود. تنها حروفی که در الفبای انگلیسی قرار دارند تحت تأثیر قرار میگیرند، اعداد، نمادها و علائم، حروف فاصله و تمام حروفهای دیگر، بدون تغییر رها میشوند. از آنجا که حروف الفبای انگلیسی بیست و شش حرف دارد و ۲۶ = ۲ × ۱۳، تابع ROT13 یک تابع خودوارون است. به عبارتی دیگر، برای هر متن x که با الفبای لاتین ساده نوشته شدهاست، داریم:
به عبارت دیگر، اگر دو بار پشت سر هم ROT13 را بر روی یک متن بکار ببریم، نتیجه همان متن اولیه خواهد بود (در ریاضیات معمولاً به آن «رجعت» و در رمزنگاری به آن رمزنگاری دوجانبه میگویند)
عمل تبدیل متن میتواند به وسیلهٔ یک جدول جستجو صورت پذیرد.
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm |
در لطیفهٔ زیر، شاهبیت توسط 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 استفاده میکند.[۱۱]
بازیهای نامهای و فرهنگ اینترنت
ویرایشabcdefghijklmnopqrstuvwxyz NOPQRSTUVWXYZABCDEFGHIJKLM | |
aha ↔ nun | ant ↔ nag |
balk ↔ onyx | bar ↔ one |
barf ↔ ones | be ↔ or |
bin ↔ ova | ebbs ↔ roof |
envy ↔ rail | er ↔ re |
errs ↔ reef | flap ↔ sync |
fur ↔ she | gel ↔ try |
gnat ↔ tang | irk ↔ vex |
clerk ↔ pyrex | purely ↔ cheryl |
PNG ↔ cat | SHA ↔ fun |
furby ↔ sheol | terra ↔ green |
what ↔ Jung | URL ↔ hey |
purpura ↔ Chechen | shone ↔ FUBAR |
Ares ↔ Nerf | abjurer ↔ nowhere |
با رمزنگاری برخی از کلمات با استفاده از 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 مبهمتر باشد. برای مثال، یک شمارهٔ تلفن همانند +1-415-839-6885 به شکل Z`\c`d\gbh\eggd رمز میشود که در نگاه اول خیلی واضح و مشخص نیست. از سوی دیگر، از آنجایی که 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)); });
جستارهای وابسته
ویرایشپانویس
ویرایش- ↑ برگرفته از «rotate by 13 places» به معنی چرخاندن ۱۳ تایی
- ↑ این حرف اُ است، نه عدد صفر
- ↑ که در Adobe eBook software development kit آمده بود
- ↑ کسی که سوگند خود را میشکند
- ↑ هیچکجا
- ↑ پشه
- ↑ مزه تند
- ↑ کاراکترهای «!» تا «~» که در مجموع ۹۴ کاراکتر میشود
- ↑ به کوچک و بزرگ بودن حروف دقت کنید
- ↑ عدد ۴۲ به دهدهی
- ↑ به معنی روباه قهوهایرنگ چابک بر روی سگ تنبل پرید
منابع
ویرایش- ↑ Horrocks, Bruce (28 June 2003). "UCSM Cabal Circular #207-a". Usenet group uk.comp.sys.mac (Message ID UZ36hgCSoh$+EwqG@nodomain.nodomain.us) (به انگلیسی). Archived from the original on 11 June 2014. Retrieved 17 September 2007.
- ↑ ۲٫۰ ۲٫۱ ۲٫۲ Schneier, Bruce (1996). Applied Cryptography (به انگلیسی) (Second ed.). John Wiley & Sons. p. 11.
- ↑ Early uses of ROT13 found in the Google USENET archive date back to 8 October 1982, posted to the net.jokes newsgroup [۱][۲].
- ↑ ۴٫۰ ۴٫۱ ۴٫۲ Raymond, Eric S. (ed.) (29 December 2003). "ROT13". The Jargon File, 4.4.7 (به انگلیسی). Archived from the original on 11 June 2014. Retrieved 19 September 2007.
{{cite web}}
:|نام=
has generic name (help) - ↑ Ferner, Matt (8 December 2010). "How to Hide Email Addresses From Spam Bots" (به انگلیسی). PracticalEcommerce. Retrieved 12 June 2014.
- ↑ Kahn, David. The Codebreakers: The Story of Secret Writing (به انگلیسی). New York: Macmillan.
- ↑ Perrin, Chad (3 February 2010). "Cryptography's running gag: ROT13" (به انگلیسی). TechRepublic. Retrieved 10 June 2014.
- ↑ "On the 2ROT13 Encryption Algorithm" (PDF) (به انگلیسی). Prüfziffernberechnung in der Praxis. 25 September 2004. Archived from the original (PDF) on 11 June 2014. Retrieved 20 September 2007.
- ↑ Hollebeek, Tim. "Bad Cryptography in the Netscape Browser: A Case Study" (به انگلیسی). Reliable Software Technologies. Archived from the original on 21 June 2007. Retrieved 20 September 2007.
{{cite web}}
: Unknown parameter|نویسندگان همکار=
ignored (help) - ↑ Perens, Bruce (1 September 2001). "Dimitry Sklyarov: Enemy or friend?" (به انگلیسی). ZDNet News. Archived from the original on 11 June 2014. Retrieved 3 February 2011.
- ↑ Ferri, Vic (4 January 2007). "The Count Keys in the Windows Registry" (به انگلیسی). ABC: All 'Bout Computers. Archived from the original on 22 October 2007. Retrieved 20 September 2007.
- ↑ De Mulder, Tom. "ROT13 Words". Furrfu! (به انگلیسی). Archived from the original on 11 June 2014. Retrieved 19 September 2007.
- ↑ Westley, Brian (1989). "westley.c". IOCCC (به انگلیسی). Archived from the original on 8 June 2012. Retrieved 13 August 2007.
- ↑ "Furrfu" (به انگلیسی). Foldoc. 25 October 1995. Archived from the original on 12 June 2014. Retrieved 13 August 2007.
- ↑ "ROT47 Character Substitution Cipher" (به انگلیسی). rot47.net. Page Edited: 21 December 2013. Archived from the original on 11 June 2014.
{{cite web}}
: Check date values in:|تاریخ=
(help) - ↑ "5.10 Trivial Encryption". The GNU C Library Reference Manual (به انگلیسی). Free Software Foundation. 3 December 2006. Archived from the original on 11 June 2014. Retrieved 20 September 2007.
- ↑ "Best of Vim Tips" (به انگلیسی). rayninfo.co.uk. Archived from the original on 6 June 2014. Retrieved 10 June 2014.
پیوند به بیرون
ویرایش- مبدل آنلاین برای ROT13 و ROT5 (بدون جاوااسکریپت)
- مبدلهای ROT13، ROT5، ROT18 و ROT47 (با استفاده از جاوا اسکریپت)