See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
RSA 암호 - 위키백과

RSA 암호

위키백과 ― 우리 모두의 백과사전.

RSA공개키 암호시스템의 하나로, 현재 전자 상거래 등에 광범위하게 이용되고 있다.

1977년 로널드 라이베스트, 아디 샤미르, 레오널드 애들먼이 발명하였으며, RSA라는 이름은 이 3명의 이름 앞글자를 딴 것이다. 이 세 발명자는 이 공로로 2002년 튜링상을 수상했다.

RSA 암호체계의 안정성은 큰 숫자를 소인수분해하는 것이 어렵다는 것에 기반을 두고 있다. 만약 큰 수의 소인수분해를 획기적으로 빠르게 할 수 있는 알고리즘이 발견된다면 이 암호 체계는 가치가 떨어질 것이다. 1993년 피터 쇼어쇼어 알고리즘을 발표하여, 양자 컴퓨터를 이용하여 임의의 정수를 다항 시간 안에 소인수분해하는 방법을 보였다. 따라서 양자 컴퓨터가 본격적으로 실용화되면 RSA 알고리즘은 무용지물이 될 것이다. 그러나 양자 컴퓨터가 이 정도 수준으로 실용화되려면 아직 여러 해가 더 필요할 것으로 보인다.

RSA 암호화 알고리즘은 1983년에 발명자들이 소속되어 있던 매사추세츠 공과대학교에 의해 미국특허로 등록되었고, 2000년 9월 21일에 그 특허가 만료되었다.

목차

[편집] 방식

[편집] 개요

RSA는 두 개의 를 사용한다. 여기서 키란 메시지를 열고 잠그는 상수(constant)를 의미한다. 이 중 공개키(public key)는 모두에게 알려져 있으며, 메시지를 암호화(encrypt)하는데 쓰여진다. 이렇게 암호화된 메시지는 개인(비밀)키(private key)를 가진 자만이 해독(decrypt)하여 열어볼 수 있다. 다시 말하면, 누구나 어떤 메시지를 암호화할 수 있지만, 그것을 해독하여 열람할 수 있는 사람은 개인키를 지닌 단 한 사람 뿐인 것이다. RSA는 소인수분해의 난해함에 기반하여, 공개키만을 가지고는 개인키를 쉽게 유추할수 없도록 디자인되어 있다.

보다 이해하기 쉬운 예를 들자면, A라는 사람에게 B이라는 사람이 메시지를 전하고자 할 때, B은 A의 열린 자물쇠를 들고 와 그의 메시지를 봉인하고, 그런 다음 A에게 전해주면, 자물쇠의 열쇠를 가지고 있는 A이 그 메시지를 열어보는 식이 된다. 중간에 그 메시지를 가로채는 사람은 그 열쇠를 가지고 있지 않으므로 메시지를 열람할 수 없다. 그리고 RSA의 디자인상, 그 열쇠는 자물쇠의 형태만 보고서는 쉽게 제작할 수가 없게 되어 있다.

[편집] 키의 생성

A와 B가 보안이 보장되어 있지 않은 환경에서 서로 비밀 메시지를 주고 받고 싶다고 가정하자. B가 A에게 메시지를 전달하기 위해서는 A의 공개키가 필요하다. A는 아래와 같은 방법을 통해 그만의 공개키와 비밀키를 제작한다.

  1. p \,q \, 라고 하는 두 개의 서로 다른 (p \ne q) 소수를 고른다.
  2. 두 수를 곱하여 N = p q \, 을 찾는다.
  3. \varphi(N) = (p-1)(q-1) \, 를 구한다.
  4. \varphi(N) 보단 작고, \varphi(N)와 서로 소인 정수 e를 찾는다.
  5. 유클리드 호제법을 이용하여 d e \equiv 1 \pmod{\phi(N)} 을 만족시키는 d를 구한다.

A의 공개키는 위에서 구한 두 개의 숫자로 이루어진 <N, e>이고, 개인키는 d이다. A는 <N, e>만을 B에게 공개하고, B는 이 공개키를 사용하여 자신의 메시지를 암호화하게 된다. 여기서 pq의 보안은 매우 중요하다. 이를 가지고 de의 계산이 가능하기 때문이다. 그리하여 공개키와 개인키가 생성이 된 후에는 이 두 숫자를 지워버리는 것이 안전하다.

[편집] 암호화

B가 M이란 메시지를 A에게 보내고 싶다고 하자. 일단 B는 이 MN보다 작은 숫자로 변환한다. (이 변환법(padding scheme)은 A에게도 미리 알려져 있어야 한다. 이를테면, 메시지를 토막내어 하나의 메시지가 일정 수의 비트를 넘지 않게 하는 방법이 있다. 하지만 실제로는 이중보안을 위해 더욱 복잡한 변환법이 사용된다.) 그리고 B는 A의 공개키 <N, e>를 획득하고, 다음과 같이 c를 계산한다.

 c = m^e \mod{N}

그리고 이 c를 A에게 보낸다.

[편집] 해독

A는 암호화된 메시지 c를 B에게서 건네받았고, Nd를 알고 있다. 다음 식을 통해 m을 찾는다.

m = c^d \mod{N}

위에서 설명하였듯 m을 가지고 A는 M을 찾아낼 수 있는 방법을 알고 있다.

[편집] 증명

이 해독법이 가능한 이유는 다음과 같다.

c^d \equiv (m^e)^d \equiv m^{ed} \equiv m^{k(p-1)(q-1)+1} \equiv m \pmod{N}.

마지막 등식이 성립하는 이유는 다음과 같다. 위의 식에서 mod N 대신 mod p 사용하여 풀이했을 때,

m^{k(p-1)(q-1)+1} \equiv (m^{p-1})^{k(q-1)}m \pmod{p}

가 된다. p가 소수이므로, 여기에 페르마의 소정리를 적용하면,

(m^{p-1})^{k(q-1)}m \equiv 1^{k(q-1)}m \equiv m \pmod{p}

이다. mod q를 사용하여도 똑같은 풀이가 가능하다. N = pq 이므로, mod N에도 같은 식이 성립하게 된다.

[편집] 바깥 고리


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -