본문 바로가기
OS/Linux

대칭키 비대칭키 암호화방식 비교

by Sou1 2020. 9. 1.
반응형

 

 

목차

     

     

    대칭키와 비대칭키 비교

    이 글을 작성하게 된 계기는,

    여러 사람들과 이야기를 해보면서 인증서에 대한 이야기가 나오는데,

    앞서 대칭키와 비대칭키의 탄생배경부터 설명해야 할 것 같아서 적게 되었습니다.

     

    앞서 테스트한 글이 있는데 참고차 링크 전달드려요.

    2020/08/11 - [OS/Linux] - SSL 공개키와 개인키의 차이점 그리고 실습예제

     

    SSL 공개키와 개인키의 차이점 그리고 실습예제

    공개키와 개인키의 차이점 우선, 공개키는 암호화 할때 주로 사용되지만, 요즘에는 구분없이 사용됩니다. 개인키는 복호화할때 많이 사용되지만, 요즘에는 구분없이 사용됩니다. 즉, 공개키와 �

    st-soul.tistory.com

     

    암호화 방식의 탄생배경 및 방식설명

    조금 역사적인 이야기지만 서두에 조금만 주절주절 하겠습니다.

    암호화의 시작은 컴퓨터가 아니었습니다.

    바로 군대 시절 통신에 있어서 암호화가 시작되었는데요.

    전쟁을 했을 때로 거슬러 올라갑니다.

    인코딩 방식은 정부와 군대 사이의 기밀 대화를 가능하게 하는 기술로서, 수십 년 간 사용되어 왔습니다.

     

    군대얘기는 이쯤에서 접고,

    그렇다면, 현대암호는 언제시작되었을까요? 

     

    현대 암호는 1970년대 후반 미국 스탠퍼드 대학교과 MIT 대학교에서 시작되었습니다.

    "암호의 새로운 방향"(New Directions in Cryptography)이라는 논문에서 처음으로 공개키 암호의 개념을 발표하여 대칭키 암호화방식을 널리 알리게 되었습니다.

     

    하지만 여기서 장점과 단점이 존재하는데,

    대칭키 암호화 및 복호화

    장점 단점
    1. 구현이 용이합니다.
    2. 암,복호화 속도가 빠릅니다.
    3. 암,복호화 키의 크기가 상대적으로 작습니다.
    4. 각종 암호 시스템의 기본으로 활용됩니다.
    5. 강한 암호로의 전환이 용이합니다.
    1. 관리할 암.복호화 키의 수가 많습니다. N(N-1)/2
    2. 암.복호화키 공유 방식에 제한됩니다.
        - 데이터를 암호화하고 해독하는 데 사용되는 키를 전송해야 하는데 해당 키가 안전하지 않은 접속을 통해 공유된다면, 악의적인 3자에 의해 도난당할 위험이 있습니다.
    3. 제공되는 보안서비스에 제약이 됩니다.
    4. 디지털 서명등의 기법에 적용하기 곤란합니다.

    이어서 1978년 MIT 대학에서 소인수 분해 문제에 기반을 둔

    (소인수분해의 무한을 통한) RSA 공개키 암호를 개발하였습니다.

     

    이것이 현재까지 널리 사용되고 있는 공개키 암호화 방식입니다.

    비대칭키는 아시다싶이 공개키와 개인키가 하나의 쌍을 이루고 있지요.

     

    다른 사람들에게 공개된 키로서 정보를 암호화할 수 있는 공개키와 사용자 본인만 알고 있어서 암호를 풀 수 있는 키인 개인키는 하나의 쌍을 이루고 있습니다.

     

    쉽게 정리하면, 두 개의 키를 각각 A키, B키라고 하였을 때, A키로 암호화한 암호문은 B키로만 복호화가 가능하고 B키로 암호화한 암호문은 A키로만 복호화가 가능합니다. 그래서 이중 하나의 키만 비밀로 보호하고 다른 하나의 키는 공개해도 상관이 없어 공개키는 말 그대로 공개하여 암호화에 사용됩니다. (이론적으로)

    공개키로 암호화한 암호문은 어차피 개인키를 가진 사람이 풀어볼 수 있으므로 상호간 공개키만 교환하고 상대의 공개키로 암호화를 하여 데이터를 교환하면 상대는 자신의 개인키로 복호화를 하여, 중간에 탈취당한다 할지라도 복호화를 진행할 수 없습니다.

     

    여기서 크게 둘로 나누자면,

    비대칭키를 사용한 암호화 방식에는 공개키로 암호화를 하는 경우와 개인키로 암호화를 하는 경우로 구분할 수 있습니다.

     

    1. 공개키로 암호화를 선택한 경우

        - 데이터 보안에 중점을 둔 것입니다.

     

    2. 개인키로 암호화를 선택한 경우

        - 안전한 전자서명을 통한 인증 과정에 중점을 둔 것입니다.

     

    위 설명을 반대로 이해하면 이해하기가 쉽습니다.

     

    1(개인키로 복호화해야한다) 2(공개키로 복호화해야한다) 

    개인키는 혼자만 갖고 있는 키입니다. 즉, 데이터에 민감한 것이죠.

    공개키는 누구나 갖고 있지만 전자서명이 된 공개키 즉, 공인인증서 같은 느낌입니다.

     

    아래 그림 예시는 공개키로 암호화하는 방식만 설명되어 있지만, 반대의 경우도 있다는 사실을 잊지마세요 :)

    비대칭키 암호화 및 복호화

    장점 단점
    1. 키의 분배가 용이합니다.
    2. 다양한 보안서비스 (인증, 전자서명, 키분배) 등에 적합합니다.
    1. 대칭키에 비해 구현이 어렵습니다.
    2. 암.복호화 속도가 대칭키에 비해 느립니다.
    3. 암.복호화 키의 크기가 대칭키에 비해 깁니다.

     

    비대칭키의 대표 알고리즘은 RSA, 디피-헬만(Diffie-Hellman), 타원곡선암호(ECDSA) 등이 있습니다.

     

    (추가 - 동작원리 : RSA 소인수 분해 알고리즘)

    초기 암호들은 두 개의 큰 소수를 곱한 숫자를 문제로 사용하였는데 사용자는 임의의 큰 소수를 두 개 골라 비밀키로 삼고 그 곱한 값을 공개키로 공개하였습니다. 큰 수의 소인수 분해는 풀기 어려운 문제이므로 다른 사람들은 비밀키를 알 수 없을 것이라는 사실이 보장되었었습니다.

     

    (추가 - 동작원리 : 디피-헬만(Diffie-Hellman) 알고리즘)

    가장 오래된 공개키 암호화 시스템으로 이산로그 구조의 복잡함을 활용한 방식입니다.

    현대 암호학의 혁명으로 불리지만, 중간자 공격에 취약하다는 단점이 있습니다.

     

    (추가 - 동작원리 : 타원곡선암호(ECDSA) 알고리즘)

    타원곡선이라고도 불리는 수식에 의해 정의되는 특수 가산법을 기반으로 암호화와 복호화를 수행하는 암호화 방식입니다.  이산대수 문제의 어려움의 이용을 기초로 하는 공개키 암호 알고리즘 시스템입니다. 

    장점이라면,  RSA/DSA와 같은 공개키 암호보다 짧은 키 길이와 빠른 연산속도를 가지면서 동일한 수준의 보안 강도를 제공하는 암호 알고리즘입니다. 

     

    인증서의 원리

    과거 대칭키 알고리즘을 이용하여 암호화를 진행하였을 때는 암호키 뿐만 아니라 알고리즘도 노출되지 않도록 노력하였습니다. 암호화 알고리즘과 암호키의 노출은 곧 암호가 깨졌다는 것을 의미하기도 하였죠.

    현대의 암호화 방식은 암호 시스템의 모든 것 (시스템 구성 및 암호화 알고리즘) 이 모두 공개되어도 안전해야 한다는 관점을 가지고 있습니다.

    즉, 쉽게 복호화시킬수 없다는 주장이 비대칭키 방식의 알고리즘이 계속 나오는 이유입니다.

     

    SSL/TLS 암호화 통신

    : 인증서를 얘기하다가 갑자기 프로토콜이 나와서 난감하겠지만,

    : 인증서를 통한 RSA 알고리즘 방식을 설명하기 위함입니다.

    SSL/TLS 암호화 프로토콜 통신 방법

    위 그림에서 보시다 싶이,

    Client는 먼저 Server측으로 요청을 보내면 어떤 암호화, 압축방식으로 통신할지 협상을 진행합니다.

    그 뒤로 서버는 자신이 가지고 있는 공개키를 포함하여 Client에게 보내게 됩니다. 

     

    *** 여기서 한가지 알아 두셔야 하는것은 공개키를 포함한 서버인증서가 (공인인증서) 제대로된 인증서라면

    크롬브라우저에서 (유효)라고 나오게 됩니다.

    브라우저들은 신뢰할 수 있는 루트 및 체인인증서들을 가지고 있습니다.

    반대로 말하면 공인인증서가 아니라 사설인증서라면 "이 사이트를 신뢰하시겠습니까?" 라는 문구가 나오며 "확인"
    버튼을 눌러야지만 접속할 수 있게 됩니다.

     

    여기서 갑자기 해당 부분을 언급한 이유는 "인증서 발급 CA" 확인 부분이 있기 때문입니다.

    브라우저들은 패치하면서 CA들을 계속 업데이트 합니다. 그렇기 때문에 신뢰된 업체가 발급한 인증서들만 자동으로 (유효 or 허용) 으로 표시되며 정상접속이 되는 이유를 설명드리고 싶었습니다.

     

    서버의 공개키로 Session key(대칭키)를 전달하게 되면 서버는 그 정보를 서버의 "개인키"를 통해 Session Key(대칭키)를 얻게 됩니다. 이는 일회적이며, 한번 사용하고 폐기됩니다.

    (세션은 하나의 사용자에만 유효하다고 이해하시면 됩니다)

     

    이 방식이 RSA/AES 알고리즘을 모두 응용한 방식입니다.

     

    SSLv3 취약점 , TLS 프로토콜이 나오게 된 배경

    SSL V3 라 하면, 제가 처음 IT를 시작할 때 권장되던 암호화 프로토콜입니다.

    하지만, 2013년 구글의 연구원들은 sslv3 poodle 취약점을 발견했습니다.

     

    poodle이 뭔지 생소하시죠?

    SSL/TLS는 서버와 클라이언트 사이에서 데이터의 기밀성을 보장해주는 프로토콜입니다.

    하지만 Poodle 취약점이 발생하면서 SSLv3를 더이상 사용하지 않게되는데요.

    Poodle의 로직은 브라우저로 자바스크립트 형태로 삽입시켜 PC를 감염시킵니다.

    조금 더 쉽게 설명하자면, 맨-인더-미들 공격자는이 취약점을 이용하여 padding oracle side-channel 공격을 수행하여 암호문을 해독할 수 있습니다. 

     

    Poodle공격이 한가지 형태가 아니라 여러가지 형태로 공격을 해왔기 때문에 SSLV3는 더이상 안전한 암호화 프로토콜이 아니게 되었습니다.

    모든 프로그램에서 SSLV3를 막는것이 default 설정이 되었으며, 서버 담당자는 기존에 있는 인프라의 설정을 모두

    SSLV3로 통신이 안되게 설정을 바꾸는 작업을 해야만 했습니다.

    https://access.redhat.com/ko/solutions/1258903

     

    *** 만약 현재 sslv3로 통신이 가능한지 테스트 해보고 싶으시다면?

    >> 물론 취약점 점검사이트에 들어가서 URL을 입력하여 테스트해보셔도 되지만, 잘못된 사이트에 기입하게 되면 그것이 DDOS의 공격대상이 되기도 합니다.

    >> 간단하게 openssl 명령어를 사용하여 서버가 지원하는 프로토콜을 확인할 수 있습니다.

     

    *** openssl s_client 명령어

    echo | openssl s_client -connect [서버]:[ssl port] [옵션]

    옵션 위치는 다음과 같이 사용할 수 있습니다.

    -ssl3 : sslv3 통신이 가능한지 테스트합니다.

    -tls1 : tls1.0 통신이 가능한지 테스트합니다.

    -tls1_1 : tls1.1 통신이 가능한지 테스트합니다.

    -tls1_2 : tls1.2 통신이 가능한지 테스트합니다.

     

     

    마무리

     

    여기까지 작성을 해 보았는데, 간략하게 대칭키와 비대칭키의 차이를 설명하려 하다가

    글이 너무 길어졌네요.

     

    그래도 제일 기본적인 개념만 언급하며 지나왔던 것 같습니다.

    읽고 도움되시는 분들이 있으면 좋겠습니다 ^^

     

    아마 여기서 설명 안한 부분이 있다면,

    Hash 알고리즘이 사용되는 이유?

    그리고 인증서에 Chain 인증서의 역할등이 있겠네요.

    다음시간에 기회되면 작성하도록 하겠습니다.

     

    내용이 도움이 되셨거나 초보 블로거를 응원하고 싶으신 분은 아래 하트 ♥공감 버튼을 꾹 눌러주세요!

    내용의 수정이 있거나 도움이 필요하신 분은 댓글을 남겨주세요!

     

    반응형