ROT13

ROT13
ROT13은 알파벳을 따라 13자를 파트너로 대체한다.예를 들어, 다시 된다(또는 반대로 다시 된다).

ROT13("13곳에 의해 회전"), 때로는 하이픈으로 연결된 ROT-13)은 알파벳에서 문자 뒤에 오는 13번째 문자로 문자를 대체하는 간단한 문자 대체 암호다.ROT13은 고대 로마에서 개발된 카이사르 암호의 특수한 경우다.

기본 라틴 문자에는 26자(2×13)가 있기 때문에 ROT13은 그 자체로 역행이다. 즉, ROT13을 해제하기 위해서는 동일한 알고리즘이 적용되므로 인코딩과 디코딩에 동일한 동작을 사용할 수 있다.알고리즘은 사실상 암호화 보안을 제공하지 않으며, 종종 약한 암호화의 표준적인 예로 인용된다.[1]

ROT13은 온라인 포럼에서 스포일러, 펀치라인, 퍼즐 해결책, 모욕적인 자료들을 무심코 흘겨보는 데서 숨기기 위한 수단으로 사용된다.ROT13은 온라인에서 다양한 편지와 단어 게임에 영감을 주었으며 뉴스 그룹 대화에서 자주 언급되고 있다.

설명

텍스트 조각에 ROT13을 적용하면 단지 그리고 각각의 편지에 교체의 알파벳 문자를 조사하고 요구하는 알파벳에서 13곳이 더욱 진행된 필요하다면 다시 처음으로 열다[2]A가 N, B가 O형이며, 그렇게 M이 되는 Z까지, 그 순서가 알파벳의 시작에서 계속 되:N이 A, O가 B, a그리고 , 그리고 그것이 되는 것.영어 알파벳에서 발생하는 문자만 영향을 받는다. 숫자, 기호, 공백 및 기타 모든 문자는 변경되지 않고 그대로 유지된다.영어 알파벳에는 26개의 글자가 있고 26 = 2 × 13이 있기 때문에, ROT13 함수는 그 자체로 반비례한다.[2]

모든 기본 라틴어-알파벳 텍스트 x 대한

즉, ROT13의 연속적인 두 가지 적용은 원문을 복원한다(수학에서는 이것을 비자발적이라고도 하고, 암호학에서는 상호 암호라고 한다).

변환은 다음과 같은 룩업 테이블을 사용하여 수행할 수 있다.

입력 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
출력 NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

예를 들어, 다음의 농담에서 펀치라인은 ROT13에 의해 가려졌다.

닭은 왜 길을 건넜을까?
Gb trggg gur bgure fvqr!

ROT13 양식을 통해 전체 텍스트를 변환하면 농담의 답이 다음과 같이 나타난다.

Juli Qvq gur puvpxra pebff gur ebnq?
반대쪽으로 가기 위해서!

ROT13을 두 번째로 적용하면 원본이 복원된다.

사용법

ROT13은 기원전 1세기 율리우스 카이사르가 사용한 카이사르 암호로 알려진 암호 알고리즘의 특수한 경우다.[3]

18세기 시계 제작자이자 영구 운동 기계의 제작자인 요한 에른스트 엘리아스 베슬러(Johann Ernst Elias Bessler)는 ROT13이 자신의 성을 오르피레(Orpyre)라고 부호화한다고 지적했다.그는 라틴어화된 형태인 오르피레우스를 가명으로 사용했다.[4]

그물에는 ROT13이 사용되고 있었다.1980년대 초까지의 농담 뉴스 [a]그룹그것은 잠재적으로 불쾌한 농담을 감추거나, 퍼즐이나 다른 스포일러에 대한 대답을 모호하게 하는 데 사용된다.[2][7][unreliable source?]13은 인코딩과 디코딩이 동등한 값이기 때문에, 13은 원래 카이사르 암호에서와 같은 3과 같은 다른 값보다 13의 전환을 선택했다. 따라서 양쪽 모두에 대해 하나의 명령의 편리함을 허용하기 때문이다.[7] ROT13은 일반적으로 뉴스 읽기 소프트웨어의 내장 기능으로 지원된다.[7]전자 메일 주소도 덜 정교한 스팸 봇으로부터 숨기기 위해 때때로 ROT13으로 암호화된다.[8][dubious ]또한 전자 메일 선별과 스팸 필터링을 우회하는 데도 사용된다.전자 메일의 내용을 숨김으로써, 선별 알고리즘은 전자 메일을 보안 위험으로 식별할 수 없고 수신자의 인박스 안으로 수신할 수 있다.

암호화된 일반 영어 텍스트의 경우, ROT13은 일부 문자/단어 패턴에서 알아볼 수 있다."n", "V"(자본화 전용), "구르"("a", "I", "the"의 경우 ROT13), "yl"("ly")로 끝나는 단어 등이 그 예다.

ROT13은 비밀이 우려되는 곳에 사용되도록 의도된 것이 아니다. 지속적인 시프트의 사용은 암호화에 사실상 가 없다는 것을 의미하며, 암호 해독에는 ROT13이 사용 중이라는 사실 이상의 지식이 필요하지 않다.이런 지식이 없어도 주파수 분석을 통해 알고리즘이 쉽게 깨진다.[2]진짜 비밀에 전혀 적합하지 않기 때문에, ROT13은 눈에 띄게 취약한 암호화 체계를 가리키는 캐치프레이즈가 되었다. 한 비평가는 "요즘 56비트 DES가 ROT13보다 별로 낫지 않다"고 주장할 수도 있다.또한, "더블 DES"와 같은 실제 용어로 된 연극에서, "더블 ROT13", "ROT26" 또는 "2ROT13"이라는 용어는 유머러스한 의도로(이미 ROT13으로 암호화된 텍스트에 ROT13을 적용하면 원래의 일반 텍스트가 복원되기 때문에, ROT26은 전혀 암호화되지 않는 것과 동일하기 때문이다)라는 제목의 스푸핑된 학술지를 포함하여,n 알고리즘".[9]연장선상에서, 트리플-ROT13 (3DES와 농담으로 비유할 때 사용)은 일반 ROT13과 동등하다.

1999년 12월, Netscape Communicator는 전자 메일 비밀번호를 저장하기 위한 안전하지 않은 계획의 일부로 ROT13을 사용한 것으로 밝혀졌다.[10]2001년, 러시아의 프로그래머 디미트리 스클랴로프는 한 eBook 벤더인 NPRG(New Pradigm Research Group)가 문서를 암호화하기 위해 ROT13을 사용했다는 것을 증명했다. NPRG는 Adobe eBook 소프트웨어 개발 키트와 함께 제공된 ROT13 장난감 예를 심각한 암호화 방법으로 오인 것으로 추측되었다.[11]Windows XP는 일부 레지스트리 키에 ROT13을 사용한다.[12]ROT13은 또한 잠재적으로 불쾌한 받아타를 감추기 위해 유닉스 포춘 프로그램에서도 사용된다.

레터 게임 및 넷 문화

abcdefghijklmnopqrstuvwxyz
NOPQRSTUVWXYZABCDEFGHIJKLM
ahanun antnag
balkonyx barone
barfones beor
binova ebbsroof
envyrail erre
errsreef flapsync
furshe geltry
gnattang irkvex
clerkpyrex purelycheryl
PNGcat SHAfun
furbysheol terragreen
whatJung URLhey
purpuraChechen shoneFUBAR
AresNerf abjurernowhere

ROT13은 레터 게임을 위한 기회를 제공한다.어떤 단어들은, ROT13으로 변형될 때, 다른 단어를 만들어 낼 것이다.영어에서 7글자 쌍의 예로는 어부지리어디에도 없는, 체첸퍼푸라가 있다.이와 같은 단어들의 다른 예들이 표에 나와 있다.[13]gnattang은 ROT13의 왕복과 역행 둘 다인 단어의 예다.

1989년 국제 난독화 C코드 콘테스트(IOCCC)에는 브라이언 웨슬리의 참가 신청이 포함되어 있었다.Westley의 컴퓨터 프로그램은 ROT13으로 인코딩되거나 역순으로 컴파일할 수 있다.실행될 때, 그것의 작동은, ROT13 인코딩을 실행하거나, 그것의 입력을 되돌리는 것이다.[14]

뉴스그룹 alt.folklor.urban은 "furrfu"라는 단어를 만들어 냈는데, 그것은 자주 암호화된 말인 "shesh"의 ROT13 인코딩이었다."Furrfu는 1992년 중반에 새로 온 사람들에 대한 반응으로 일부 포스터가 "셰쉬!"라고 불평한 후 alt.follor.urban에 도시 신화를 반복하는 게시물에 대한 응답으로 진화했다.[15]

변형

ROT5는 숫자(0~9)에 적용되는 ROT13과 유사한 관행이다.ROT13과 ROT5는 동일한 메시지에서 함께 사용할 수 있으며, 때로는 ROT18(18 = 13 + 5) 또는 ROT13.5라고 불리기도 한다.

ROT47은 ROT13의 파생어로, 기본 문자와 함께 숫자와 공통 기호를 취급한다.이 시퀀스를 알파벳으로 사용하는 대신, ROT47은 ASCII라고 알려진 공통 문자 인코딩에서 더 큰 문자 집합을 사용한다.구체적으로는, ASCII 코드의 숫자값의 순서로, 총 94의 10진수 33'!부터 126 ''~까지 공간을 제외한 7비트 인쇄 가능 문자는, 대소문자를 특별히 고려하지 않고 47위치로 회전한다.예를 들어, 문자가 에 매핑되는 동안 에 매핑되는 경우.더 큰 알파벳의 사용, 예를 들어, +1-415-839-6885과 같은 전화 번호는 암호화 결과 Z'\c`d\gbh\eggd에서 첫눈에 명백하지 않다 그 ROT13보다 더 철저한 난독화를 생산한다.반면에, 때문에 ROT47 차별 없이 반죽에, 더욱은 즉각 그 텍스트 enciphere고 있음이 분명하다 번호와 기호들을 소개한다.d

예:

The Quick Brown Fox Jumps Over The Lazy Dog.

에 암호로 붙이다.

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

GNU C 라이브러리(GNU C 라이브러리)는 컴퓨터 프로그래밍에 사용할 수 있는 표준 루틴 집합으로, 임의의 이진 데이터와 함께 사용하기 위한 것이지만,memfrob()[16] ROT13과 유사한 목적을 가진 기능을 포함하고 있다.함수는 전용 또는 (XOR) 연산을 이용하여 각 바이트이진 패턴 00101010(42)과 결합하여 동작한다.이것은 단순한 XOR 암호에 영향을 미친다.ROT13과 마찬가지로 XOR(따라서 )는 자가 복구되며, 거의 없는 유사한 수준의 보안을 제공한다.

실행

tr

ROT13과 ROT47은 Unix 터미널 애플리케이션을 사용하여 구현하기가 상당히 쉽다; ROT13의 "빠른 갈색 여우가 게으른 개를 뛰어넘다" 문자열을 암호화하려면:

$ # Map upper case A-Z to N-ZA-M and lower case a-z to n-za-m $ 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에 대해 동일한 문자열:

$ 에코 "빠른 갈색 여우가 게으른 개를 뛰어넘다" tr '\!-' 'P-~\!-O' %96 "F:4< QC@H? u@I yF'AD ~G6C %96 {2KJ s@8

이맥스와 비임

Emacs에서는 다음 명령을 사용하여 버퍼 또는 선택 항목을 ROT13으로 설정할 수 있다.[17]

M-x 토글-회전13-모드 M-x 회전13-기타 윈도우 M-x 회전13-구역

Vim 텍스트 편집기에서 다음 명령으로 버퍼 ROT13을 사용할 수 있다.[18]

GG?G

파이톤

Python에서 모듈는 ROT13을 사용하여 구현된다.[19]

>>>수입하다  팀 피터스의 파이썬  미인은 못생긴 것보다 낫다. 명시적인 것이 암묵적인 것보다 낫다. 단순한 것이 복잡한 것보다 낫다. 복잡한 것이 복잡한 것보다 낫다. 플랫이 내포보다 낫다. 희박한 것이 밀도보다 낫다. 가독성이 중요하다. 특별한 경우는 규칙을 어길 만큼 특별하지 않다. 비록 실용성이 순수함을 능가하지만. 오류는 결코 묵살해서는 안 된다. 명시적으로 침묵하지 않는 한. 애매모호한 상황에서, 추측하고 싶은 유혹을 거절하라. 그것을 하는 데는 한 가지, 그리고 가급적이면 한 가지 확실한 방법이 있어야 한다. 비록 네가 네덜란드인이 아니라면 처음에는 그렇게 분명하지 않을지 몰라도. 지금이 없는 것보다 낫다. 비록 지금은 결코 *맞다*보다 낫지 않지만. 시행에 대해 설명하기 어렵다면, 그것은 좋지 않은 생각이다. 실행이 설명하기 쉽다면 좋은 생각일 수 있다. 네임스페이스는 경적을 울리게 하는 좋은 아이디어 중 하나이다. 더 많이 하자!  >>>와 함께 개방된(.__file__) 로서 f: ...    인쇄하다(f.읽다()) s = """Gur Mra bs Clguba, 올 Gvz Crgref  오른그브시 vf 오르그레 guna htyl. Rkcyvpvg vf Orgre guna vzcyvpvg. Fvzcyr vf Orgre guna pbzcyrk. Pbzcyrk vf Orgre guna Pbzcyvpngrq. 승 vf 오르그레 guna arfgrq. Fcnefr vf Orgre guna qrafr. Ernqnovyvgl pbhagf. Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf. Nygubhtu Cenpgvpnnyvgl orngf chevgl. 리베프 푸비크 아리레 씨프 프비라가일 헤리프 Rkcyvpvgyl fvyraprq. Va gur snpr bs nzovthvgl, ershfr gur grzcngvba gb threff. 구레르 푸비크 또는 바-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. Nygubhtu gung jnl znl abg 또는 boivbhf ng svef hayrff lb'er Qhgpu. Abj vf Orgre guna arrie. Nygubhtu arrie vf bsgra orggre guna *evtug* abj. Vs gur vzcyrzragvba vf uneq gb rkcynva, vg'f n onq vqrn. Vs gur vzcyrzragvba vf rnfl gb rkcynva, vg znl 또는 n tbbq vqrn. "Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!""  d = {} c in(65, 97): 범위 내 i(26)의 경우: d[i+c] = chr((i+13) % 26 + c)  printegraph."multiple ([d.get(c, c) for c in s]) 

모듈 코덱 'rot13' 텍스트 변환을 제공한다.[20]

>>>수입하다 코덱을 만들다. >>>인쇄하다(코덱을 만들다..인코딩하다(.s, 'rot13')) 팀 피터스의 파이썬  미인은 못생긴 것보다 낫다. 명시적인 것이 암묵적인 것보다 낫다. 단순한 것이 복잡한 것보다 낫다. 복잡한 것이 복잡한 것보다 낫다. 플랫이 내포보다 낫다. 희박한 것이 밀도보다 낫다. 가독성이 중요하다. 특별한 경우는 규칙을 어길 만큼 특별하지 않다. 비록 실용성이 순수함을 능가하지만. 오류는 결코 묵살해서는 안 된다. 명시적으로 침묵하지 않는 한. 애매모호한 상황에서, 추측하고 싶은 유혹을 거절하라. 그것을 하는 데는 한 가지, 그리고 가급적이면 한 가지 확실한 방법이 있어야 한다. 비록 네가 네덜란드인이 아니라면 처음에는 그렇게 분명하지 않을지 몰라도. 지금이 없는 것보다 낫다. 비록 지금은 결코 *맞다*보다 낫지 않지만. 시행에 대해 설명하기 어렵다면, 그것은 좋지 않은 생각이다. 실행이 설명하기 쉽다면 좋은 생각일 수 있다. 네임스페이스는 경적을 울리게 하는 좋은 아이디어 중 하나이다. 더 많이 하자! 

루비

단일 문자열 문자의 배열을 입력하면 인코딩된 메시지를 문자(스트링) 배열로 반환한다.이 버전은 루비 2.5p157을 사용한다.

반항하다 로트13(secret_properties)   알파의 = 'abcdefghijklmnopqfirstuvwxyz'.갈라지다('')   아스트르 = []   secret_properties.지도를 그리다 { 단어        알파의.every_with_index { c,i          만일 단어 == c           아스트르 << 알파의[(i+13)%26].to_s         종지부를 찍다       }       #말끝마다         만일 단어 == " "           아스트르 << " ".to_s         종지부를 찍다   }   돌아오다 아스트르 종지부를 찍다 놓다 ['h','e','l','l','o',' ','w','o','r','l','d'] 놓다 " " 놓다 로트13(['h','e','l','l','o',' ','w','o','r','l','d']) #uryb jbeq 

가다

각 바이트를 구문 분석하고 ASCII 알파 문자인 경우 ROT13을 수행하십시오.

펑크 로트13(b 바이트) 바이트 {  //ASCII 65는 A이고 90은 Z이다.  만일 b > 64 && b < 91 {   b = ((b - 65 + 13) % 26) + 65  }  // ASCII 97은 a이고 122는 z이다.  만일 b > 96 && b < 123 {   b = ((b - 97 + 13) % 26) + 97  }  돌아오다 b } 

참고 항목

참조

  1. ^ 구글 USENET 아카이브에서 발견된 ROT13의 초기 사용은 1982년 10월 8일로 거슬러 올라간다.[5][6]
  1. ^ Christopher Swenson (17 March 2008). Modern Cryptanalysis: Techniques for Advanced Code Breaking. John Wiley & Sons. p. 5. ISBN 9780470135938.
  2. ^ a b c d Schneier, Bruce (1996). Applied Cryptography (Second ed.). John Wiley & Sons. pp. 11. ISBN 0-471-11709-9.
  3. ^ Kahn, David. The Codebreakers: The Story of Secret Writing. New York: Macmillan. ISBN 0-684-83130-9.
  4. ^ Simanek, Donald E. (2012). "Perpetual Futility: A short history of the search for perpetual motion". The Museum of Unworkable Devices.
  5. ^ desoto!gog (8 October 1982). "very mildly obscence joke, shift=13". Newsgroup: net.jokes.
  6. ^ utcsrgv!dave (8 October 1982). "encrypted jokes". Newsgroup: net.jokes.
  7. ^ a b c Raymond, Eric S. (ed.) (29 December 2003). "ROT13". The Jargon File, 4.4.7. Retrieved 19 September 2007. {{cite web}}: first=일반 이름 포함(도움말)
  8. ^ Ferner, Matt (9 December 2010). "How to Hide Email Addresses From Spam Bots". PracticalEcommerce. Retrieved 12 June 2014.
  9. ^ "On the 2ROT13 Encryption Algorithm" (PDF). Prüfziffernberechnung in der Praxis. 25 September 2004. Retrieved 20 September 2007.
  10. ^ Hollebeek, Tim; Viega, John. "Bad Cryptography in the Netscape Browser: A Case Study". Reliable Software Technologies. CiteSeerX 10.1.1.15.9271. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  11. ^ Perens, Bruce (1 September 2001). "Dimitry Sklyarov: Enemy or friend?". ZDNet News. Retrieved 3 February 2011.
  12. ^ "ROT13 is used in Windows". 24 July 2006. Retrieved 15 December 2016.
  13. ^ De Mulder, Tom. "ROT13 Words". Furrfu!. Retrieved 19 September 2007.
  14. ^ Westley, Brian (1989). "westley.c". IOCCC. Retrieved 13 August 2007.
  15. ^ "Furrfu". Foldoc. 25 October 1995. Retrieved 3 October 2016.
  16. ^ "5.13 Obfuscating Data". The GNU C Library Reference Manual. Free Software Foundation. 3 December 2006. Retrieved 2 August 2019.
  17. ^ "Rmail Rot13 GNU Emacs Manual". www.gnu.org.
  18. ^ "Best of VIM Tips, gVIM's Key Features zzapper". rayninfo.co.uk. 3 March 2016. Archived from the original on 3 March 2016.
  19. ^ "cpython/this.py at main · python/cpython". GitHub. 13 November 2021.
  20. ^ "codecs – Codec registry and base classes – Python 3.9.6 documentation". docs.python.org.

외부 링크