JAVA 웹 개발자 실전 면접문제

(이론문제) 암호화 알고리즘에 대해 설명해보라

mt프로젝트 2017. 8. 21. 02:59

 암호화 알고리즘에 대한 문제는 몇가지 질문이 연계되는 경우가 많다. 아래와 같은 식으로 이어지며 큰 틀은 바뀌지 않는 편이다.

 암호화 알고리즘의 특징이나 종류, 실제 사용경험에 초점을 맞춰서 질문하며, 본인이 직접 암호화 알고리즘을 개발해야 한다거나 하는 특수한 경우가 아니라면 알고리즘 자체에 대한 이론적인 설명을 요구하지는 않는다.


Q : 비대칭키 알고리즘에 대해 알고 있는지?

-> AES 방식은 대칭키 알고리즘인지? 비대칭키 알고리즘인지?

-> 대칭키 알고리즘와 비대칭키 알고리즘는 어떤 차이가 있는지?


 위 질문에서도 나와있듯 암호화 알고리즘은 크게 대칭키 알고리즘과 비대칭키 알고리즘으로 나뉘어진다.

 대칭키 알고리즘은 단순하게 하나의 암호화키를 가지고 있으며, 이 키로 암호화한 값은 동일한 키로 복호화 할 수 있는 방식이다. 대표적인 알고리즘으로는 DES, 3DES, AES 등이 있으며, 금융권에서는 개인정보 등을 암호화/저장 할 때 AES256 알고리즘의 사용을 요구한다. 단, AES256은 자바에서 기본 스펙으로 포함되어 있지 않기 때문에 별도의 패치(local_policy.jar 업데이트)가 필요하다.

 비대칭키 알고리즘은 암호화키가 private key(개인키)/public key(공개키) 두가지 key가 만들어지고, 개인키로 암호화한 값은 공개키로만 복호화 가능, 공개키로 암호화한 값은 개인키로만 암호화가 가능하다. 개인키는 서버 측에서 잘 숨겨둬야하며, 공개키는 외부에 노출될 수 있다. RSA1024, RSA2048 등의 알고리즘을 사용한다.

 일반적으로 비대칭키는 대칭키보다 키의 길이가 몇배는 더 길고, 비대칭키로 암호화된 값은 대칭키로 암호화된 값보다 훨씬 길어진다. 또한 속도면에서도 대칭키를 사용하는편이 더 빠르다.

 현재의 컴퓨팅 수준에서는 DES 같은 경우에는 취약점이 이미 발견된 방식이라지만 AES256을 사용하면 충분한 수준의 암호화를 얻을 수 있다고 보는데, 이런 상황에서 왜 저런 비효율적인(크고 느린) 비대칭키 암호화를 사용하느냐는 질문이 있을 수 있다. 간단히 답만 말하자면 사용하는 방법이 다르고, 사용하는 장소가 다르기 때문이다.

 예를들어 여러명(수백~수천~그 이상)의 client가 하나의 서버에 대해 개인정보같은 비밀스러운 정보를 전송한다고 할 때, 서버 입장에서는 하나의 대칭키를 사용하면 client 끼리 암호화가 무의미해지고, client별로 각각의 대칭키를 발급해주기는 너무 부담스럽다. 이때 비대칭키를 활용하면 client들에게 동일한 공개키를 제공하면서 비밀키는 서버에서만 가지고있기 때문에 client의 비밀스러운 정보를 지킬 수 있다.

 우리가 흔히 사용하는 ssl 통신에서 바로 이 비대칭키를 활용하고있다.