Dorulog
article thumbnail
반응형

 

[쉬운IT] 공개키 암호화 방식


 

준비물 : VirtualBox, Putty

 

연관 게시물 :

 

  공개키 암호화 방식.

 

컴퓨터를 하다 보면 많이 듣게 되는 암호화 방식이기도 하다.

 

최근 보안에 대한 이슈가 많아지면서 관심도 많아지게 되었다.

 

그래서 오늘은 공개키 암호화 방식에 대해서 간단히 소개하려고 한다.

 

 먼저 우리가 일상생활에서 사용하는 자물쇠처럼 열쇠와 자물쇠가 셋트인 경우(같은 암호 사용) 하는 경우에는

 

대칭키 암호화라고 하며 연산이 간단하고 암호화와 복호화가 편리하나 암호화키를 분실(?) 혹은 유출할 경우

 

쉽게 자료가 유출되는 단점을 가지고 있다.

 

 

 

 그렇기 때문에 이러한 단점을 해결할 방법을 찾게 되었고, 그 결과 비대칭키 암호화

 

즉 공개키 암호화 방식을 도입하게 되었다.

즉 A는 B의 공개키로 암호화하여 전송하고 B는 B 자신의 비밀키로 복호화 하기 때문에

 

공개되어 있는 공개키로는 암호화된 메시지를 복호할수가 없다.

 

 사실 자물쇠를 잠근 열쇠와 열 수 있는 열쇠가 다르다는 점에서 쉽게 이해가 되지 않지만

 

이에 대한 수학적인 접근을 살펴보도록하자

 

 가장 대중적인 RSA 암호화 방식에 대해서 알아보도록 하자

이제까지 RSA의 대략적 모습을 살펴보았다면 앞으로는 좀더 구체적으로 수학적인 면을 함께 보도록 하겠다. RSA는 상당히 큰 정수의 소인수 분해가 힘들다는 점을 이용해 만든 공개키 시스템 알고리즘으로, 수학적 이해가 뒤따르는 알고리즘이다.

우선 공개키와 비밀키를 생성하는 과정을 살펴보자.

① 적당히 비슷하고 큰 소수 p, q를 선택한다. 계산을 쉽게 하기 위해 간단한 소수 13(=p)과 11(=q)을 선택한다.
② 다음 공식에 의해 공개키 n을 생성한다.

n=p*q ➞ 143 = 13*11

③ 다음 공식에 의해 ø(n)를 구한다.

ø(n)=(p-1)(q-1) ➞ 120 = 12*10

④ 다음 조건을 만족하는 e를 선택한다.

gcd(e, ø(n))=1, 1<e<ø(n)
gcd(e, 120)=1과 1<e<120을 만족하는 23 선택

⑤ 다음 조건을 만족하는 d를 선택한다(수식 e*d≡1 (mod ø(n))은 “e*d를 ø(n)로 나누었을 때 나머지가 1이 된다.”는 의미다).

e*d≡1 (mod ø(n)), 1<d<ø(n)
➞ 23*d≡1 (mod 120)과 1<d<120을 만족하는 47 선택

⑥ 가 공개키고, 가 비밀키다. p, q, ø(n)은 공개되지 않도록 한다. 이 공개키가 되고, 이 비밀키가 된다.

공개키와 비밀키를 생성하는 방법을 알았으니 암호화하는 방법과 복호화하는 방법을 알아보자.

평문 문자가 m일 때, 공개키 를 이용해 암호 문자 c를 구하는 수식은 다음과 같다.

c = me mod n

그리고 암호 문자 c를 비밀키 를 이용해 복호화하는 수식은 다음과 같다.

m = cd mod n

그러면 앞의 예에 이어 철수는 문자 ‘J’를 암호화해서 영희에게 보내고, 영희는 복호화하는 과정을 살펴보자.

① 문자 ‘J’의 아스키코드 값은 1001010(= 10진수 74)이고, 영희의 공개키 는 이므로 철수는 암호화 수식에 대입하여 암호 문자 94를 구한다.

7423 mod 143
= 94

② 철수는 영희에게 암호 문자 94를 보낸다.
③ 암호 문자 94를 받은 영희는 자신의 비밀키 가 이므로 복호화하는 수식에 대입하여 74를 구해 평문 문자 ‘J’를 얻게 된다.

9447 mod 143
= 74

제3자가 암호 문자 94를 가로챈다고 해도 영희의 공개키인 만 가지고는 복호화할 수가 없다.

[네이버 지식백과] RSA 암호화 방식 (컴퓨터 개론, 2013. 3. 10., 한빛아카데미(주))

 

 

 

  즉 아래처럼 공개된 공개키로 암호화 하고 이를 개인키로 복호화하여 평문을 찾게 된다.


  또한 이러한 방식은 SSH 통신에서 사용하게 되는데,

 

 다음 시간에 SSH의 암호화 방식에 대해서 실습을 통해서 공개키 암호화 방식에 대해 좀더 자세히 알아보록 하겠습니다

 

 

728x90
profile

Dorulog

@dorudoru

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!