컴퓨터 공학/알고리즘

👉 [CS] 공개키 암호화 알고리즘의 원리

bitcodic 2020. 7. 18. 11:15

*공부하면서 정리한 부분이라 잘못된 부분이 있을 수도 있습니다.

 


공개키 암호화 요약, 들어갈때(암호화) 나올때(복호화) 방식이 다르다

암호화 방식은 (1)대칭키 암호화 방식(2)공개키(비대칭키) 암호화 방식이 있다. 

 

대칭키 암호화 방식

대칭키 암호화 방식은 암호화, 복호화를 오직 한 가지 키값으로 진행하는 방식으로, 해당 키값이 해커에 의해 노출되면 복호화가 된다는 단점이 있다.

 

예)

 A가 B에게 비밀번호를 보내려고 한다. A가 특정 키값으로 비밀번호 텍스트를 암호화를 하여 변형시킨다.

(키값+비밀번호) 데이터를 함께 B에게 보낸다. 앗! 근데 사실 C가 A와 B 사이 네트워크를 감시하다가 해당 내용을 봤다.

복호화 키값을 알고, 비밀번호 텍스트도 알고 있으니 그냥 알고리즘 방식에 따라 복호화를 진행하면 원래 내용이 보인다.

 

 

이런 방식의 공격자(C)를 막기 위해서, 키를 두 가지로 나누어 하나는 암호화, 나머지 하나는 복호화에 사용하는 방식인 공개키(비대칭키) 암호화 방식이 나타났다.

 

공격자(C)가 네트워크를 엿보는걸 막을 수는 없다. 그렇다면, 복호화를 못하게 해버리자! 가 되는 것.

 

공개키(비대칭키) 암호화 방식

공개키 암호화 방식은 암호화, 복호화를 총 두 가지 키값으로 나누어 진행하는 방식으로, 통신시에 복호화키는 전송하지 않으므로 네트워크 상에서 탈취될 수 없다. 따라서 공격자에 의해 탈취되어도 암호화된 텍스트를 복호화할 수 없다.

 

예)

 A가 B에게 비밀번호를 보내려고 한다. 이때, B가 암호화 키값과 복호화 키값 총 2개를 생성한다.

A에게 암호화 키값을 보내고 복호화 키값은 보내지 않는다.  A는 암호화 키값을 받아서 비밀번호를 암호화하여 변형시킨다. 그리고 (암호화 키값+비밀번호) 데이터를 B에게 보낸다. 앗! 근데 사실 C가 A와 B 사이 네트워크를 감시하다가 해당 내용을 봤다. 그러나 C가 가진건 암호화 키값이지 복호화 키값이 아니기 때문에, 아무리 애를 써도 비밀번호를 원래대로 되돌릴 수 없다(힝ㅠ). B는 받은 비밀번호를 B가 가지고 있던 복호화 키값으로 복호화해서 원래 비밀번호를 읽을 수 있다.

 

 

 

공개키 방식은 RSA 알고리즘이 대표적인데, 하나하나 뜯어보자. 알고리즘은 나무위키에 편-안하게 나와있다.

(공개키 = 암호화키값 , 개인키 = 복호화키값)

 

나무위키 RSA 암호화

 

암호화키=(e,N) 복호화키=(d,N) 인데 d값을 숨기면 해당 문서를 복호화할 수 없다.

 

그럼 d를 잘때려 맞추면 되겠네?(Brute force 방식) 하면 되지만, d를 찾기 위해 p와 q를 구해야 하는데

이 값은 소인수 분해가 필요하다. 하지만 d 값이 139857298356932146959213649723897468973809476897348906738947689378946893478967349876 라면?

소인수 분해로 p, q를 하나하나 경우의 수로 구하려면 현재 컴퓨터 연산으로 백만년은 걸릴 것이다. 컴퓨터의 연산능력의 한계를 이용한 암호화 기법인 것. 연산속도가 지금보다 겁-나 빠른 양자컴퓨팅이 나오면 뚫릴 수도 있다던데, 그것도 나중에 찾아 봐야겠다.