본문으로 바로가기

목차

    1. 암호화

    암호화의 중요성

    1.1. 암호화란?

    - 평문(plain text)을 암호문(Crypto text)으로 변환하는 과정

    - 사용자가 입력한 데이터를 알아볼 수 없는 데이터로 변경하는 과정

    - 암호문의 형태로 정보를 기억 장치에 저장하거나 통신 회선을 통해 전송함으로써 정보를 보호할 수 있습니다. 

    1.2. 복호화란?

    - 암호문(Crypto text)을 평문(plain text)으로 변환하는 과정 

    - 암호화된 데이터를 정상적인 데이터로 변경하는 과정

    1.3. 암호화 분류와 암호화 알고리즘

    - 암호화의 분류로는 단방향 암호화와 양방향 암호화가 있습니다.

    - 다음 사진은 간략한 암호화 분류입니다.

    암호화 분류

     


    2. 단방향 암호화

    단방향 암호화 과정

    2.1. 단방향 암호화란?

    - 평문 → 암호화 엔진 →암호문

    - 암호화를 수행하고 나온 데이터를 다시 원래의 데이터로 돌릴 수 없는 암호화 방식(복호화 불가능)

    - 단방향 암호화에서 나온 데이터는 원래 데이터의 1bit만 바뀌어도 전혀 다른 암호문으로 변하기 때문에, 보통 데이터가 변조되지 않았음을 나타낼때 사용합니다.

    - 단방향 암호로 잘 알려진 알고리즘으로 해시(Hash) 알고리즘들이 있습니다. 

    - 해시 알고리즘은 암호화는 가능하지만, 복호화가 불가능하다는 점을 이용하여 데이터의 무결성을 검증하기 위함입니다.

    2.2. Hash 함수 / 알고리즘

    - 해쉬는 임의의 크기를 가진 데이터를 고정된 데이터의 크기로 변환시키는 함수입니다.

    - 입력값의 길이가 달라도 출력 값은 언제나 고정된 길이로 반환합니다.

    - 동일한 값이 입력되면 언제나 동일한 출력 값을 보장합니다.

    - 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 합니다. 

    - 해시는 여러 가지 알고리즘이 있는데 대표적으로 SHA 시리즈와 MD5가 있습니다.

    2.2.1. MD5 알고리즘

    - Message-Digest algorithm 5

    - 1991년에 로널드 라이베스트가 이전에 쓰이던 MD4를 대체하기 위해 고안된 알고리즘이다.

    - 임의의 길이의 메시지(variable-length message)를 입력받아, 128비트짜리 고정 길이의 값을 출력합니다.

    - 입력 메시지의 길이 제한이 없습니다.

    - 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용됩니다.

    - 현재 MD5 알고리즘은 보안 관련 용도로 권장하지 않습니다.

    2.2.2. SHA 알고리즘

    - Secure Hash Algorithm

    - MD5의 취약성을 개선 및 대처하기 위해 미국 국가안보국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정되었습니다.

    - 해시 값의 크기는 SHA 알고리즘에 따라오는 bit 수만큼 달라지게 됩니다. 

    - 해시 함수의 버전은 SHA 0 ~ SHA 3까지 있으며, 현재는 SHA2가 사용 가능하고, SHA3가 권장되고 있으며, SHA0과 1은 사용하지 않도록 하고 있습니다.

    SHA 알고리즘 종류

     


    3. 양방향 암호화

    양방향 암호화 과정

    3.1. 양방향 암호화란?

    - 암호문을 복호화할 수 있도록 구현된 암호 알고리즘을 말합니다.

    - 데이터를 인가된 사용자만 볼 수 있도록 하기 위한 장치입니다.

    - 양방향 암호 알고리즘은 주로 3DES, AESRSA가 잘 알려져 있습니다.

    - 알고리즘은 키의 성질에 따라 구분되는데, 크게 대칭키 암호 알고리즘과 비대칭키 암호 알고리즘으로 구분할 수 있습니다.

    3.2. 대칭키 암호 알고리즘

    - 하나의 키로 암호화와 복호화를 모두 수행하는 것을 말합니다.

    - 암호문을 작성할 때 사용하는 암호키와 암호문을 해독할 때 사용하는 해독 키가 같습니다. 따라서 이 키는 절대로 외부에 유출되지 않도록 관리해야 하여 비밀키(Secret Key)라고 부릅니다.

    - 암호화와 복호화에 쓰이는 키 크기가 상대적으로 작고 암호 알고리즘 내부 구조가 단순하여, 시스템 개발 환경에 용이하고, 비대칭키에 비해 암호화와 복호화 속도가 빠릅니다.

    - 교환 당사자간에 동일한 키를 공유해야 하기 때문에 키 관리의 어려움이 있고, 잦은 키 변경이 있는 경우에 불편함을 초래합니다. 

    3.2.1. DES 알고리즘

    - Data Encryption Standard

    - 1975년에 IBM에서 개발하고 1979년에 미국 NBS(National Bureau of Standards, 현 NIST)가 국가 표준 암호 알고리즘으로 지정한 대칭키 암호 알고리즘

    - 평문을 64비트로 나눠 56비트의 키를 이용해 다시 64비트의 암호문을 만들어 내는 알고리즘

    - 블록 암호 기법을 사용하고 16단계의 파이스텔 네트워크(Feistel Network)를 거쳐 암호화를 수행합니다.

    DES 알고리즘

    3.2.2. 3DES 알고리즘

    - DES 알고리즘을 3중으로 만들어 DES 암호를 보완한 암호 알고리즘입니다. 

    - 암호화-암호화-암호화 방법이 아닌, 암호화-복호화-암호화 방법으로 암호화를 합니다.

    3DES 알고리즘

    3.2.3. AES 알고리즘

    - DES의 안전성에 대해 여러 가지 공격 방법들이 발표되며 미국의 NIST 기관에서 고안한 암호 알고리즘입니다.

    - 고급 암호화 표준(Advanced Encryption Standard)이라고 불리는 AES 암호 알고리즘은 DES를 대체한 암호 알고리즘이며 암호화와 복호화 과정에서 동일한 키를 사용하는 대칭 키 알고리즘입니다.

    - 128비트 암호화 블록, 다양한 키의 길이(128/192/256 비트)를 갖춘 대칭형 암호 알고리즘입니다.

    - AES-128, AES-192, AES-256

    - AES는 대입 치환 SPN(Substitution-Permutation Network)을 사용하여 암호화하는 방법이고 전체 bit를 암호화 하는 방식을 사용합니다.

    - 사용하는 키에 따라 실행하는 라운드 수가 다릅니다. 128bit 키 사용 시에는 10라운드, 192bit에서는 12라운드, 256bit에서는 14라운드를 실행합니다.

    AES 알고리즘

    3.3. 비대칭키 암호 알고리즘

    - 공개키 암호 알고리즘

    - 비대칭키는 암호화할 때와 복호화할 때의 키가 서로 다른 키(key)를 의미합니다.

    - 공개키(Public Key)와 개인키(Private Key)

    - 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키입니다. 

    - 공개키와 비밀키는 기능이 완전히 같다

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

    - 공개키로 암호화를 선택했다면 데이터 보안에 중점을, 개인키로 암호화를 진행했다면 안전한 전자서명을 통한 인증 과정에 중점을 둔 것으로 볼 수 있습니다.

    3.3.1. RSA 알고리즘

    - RSA는 창시자들의 이름 앞글자를 따서 지었다 (Ron Rivest, Adi Shamir, Leonard Adleman)

    - 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘입니다.

    - RSA는 큰 정수의 소인수 분해의 난해함에 기반하여, 공개키만을 가지고는 개인키를 쉽게 짐작할 수 없도록 디자인되어 있습니다.

    - 1993년 피터 쇼어는 쇼어 알고리즘을 발표하여, 양자 컴퓨터를 이용하여 임의의 정수를 다항 시간 안에 소인수 분해하는 방법을 발표했습니다. 따라서 양자 컴퓨터가 본격적으로 실용화되면 RSA 알고리즘은 무용지물이 될 것입니다.

    'ETC' 카테고리의 다른 글

    JWT(JSON Web Token) 구조  (0) 2021.12.30
    [Apache] 취약한 HTTP Method 제한 (httpd.conf)  (0) 2021.11.17