반응형
해당 글에서는 암호화/복호화에 대해 이해하며 암호화의 종류에 대해 이해를 돕기 위해 작성한 글입니다.
1) 암호화(Encryption) / 복호화(Decryption)
1. 암호화(Encryption)
💡 암호화(Encryption)
- ‘평문’ 형태로 되어 있는 데이터나 정보를 ‘읽을 수 없는 형태(암호화 된 데이터)’로 변환하는 것을 의미합니다. 이러한 읽을 수 없는 형태로 만들기 위해 ‘암호화 키’가 필요합니다.
- 암호화의 목적은 정보를 보호화하고 기밀성, 무결성, 인증성을 보장하기 위해 사용이 됩니다.
💡 암호화 과정 예시
- 송신자와 수신자 간의 “Hello”라는 평문으로 데이터를 주고 받습니다.
- 이 데이터는 외부의 사용자가 이를 읽고 데이터를 가로챌 수 있기에 사용자 간의 암호화 된 데이터를 주고 받아서 이를 방지합니다
[ 더 알아보기 ]
💡 HTTP 통신의 스니핑(Sniffing)
- 스니핑(Sniffing)은 ‘코를 킁킁거리며 냄새를 맡는다’는 의미로 개가 냄새를 맡으면서 무언가를 찾으러 돌아다니는 행위에 비유가 됩니다.
- 이와 같이 HTTP 통신을 수행하는 경우 HTTP 트래픽을 가르채기 위해 사용되는 기술을 의미합니다. 이 경우 HTTP 통신이 암호화되지 않은 경우 공격자가 패킷을 가로채고 읽을 수 있습니다.
- 이를 통해 공격자는 사용자의 정보를 노출시킬 수 있으며, 이는 개인정보 보호와 보안에 중요한 위협이 됩니다.
2. 복호화(Decryption)
💡 복호화(Decryption)
- ‘암호화 된 데이터’를 원래의 ‘평문’ 형태의 데이터나 정보로 변환하는 것을 의미합니다.
- 해당 과정을 수행하기 위해서는 '복호화'키가 필요하며 이를 기반으로 해독하여 평문으로 반환 받습니다.
💡 암호화 → 복호화 과정 예시
- 데이터를 전달하려는 송신자와 데이터를 전달 받으려는 수신자 간에 암호화/복호화 과정을 확인합니다.
1. 송신자는 “Hello”라는 평문을 수신자에게 전달해주려 합니다.
- 이 과정에서 데이터를 가로 챌 수 있기에 송신자는 암호화 키를 가지고 암호화 된 ‘암호문’을 전달합니다.
2. 수신자는 ‘암호문’을 전달 받으면, 이를 복호화 할 수 있는 복호화 키로 암호문을 해독하여 평문을 확인합니다.
2) 단방향 암호화(One-Way Encryption) : 해시 함수
💡 단방향 암호화(One-Way Encryption)
- 암호화만 할 수 있고 복호화 할 수 없는 암호화 기술을 의미합니다. 즉, 암호화된 데이터를 원래의 평문으로 되돌릴 수 없는 방식의 암호화를 의미합니다.
- 해당 암호화 과정에서 정보가 손실되기에 한번 해시 함수를 거친 데이터는 복호화가 불가능합니다.
- 단방향 암호화는 데이터의 기밀성보다는 무결성과 인증을 보장하는데 중점을 둡니다
1. 해시 함수(Hash Function)
💡 해시 함수(Hash Function)
- 평문 데이터를 암호화 하여 ‘고정된 크기의 해시 값’으로 변환 해주는 알고리즘을 의미합니다.
- 해시 함수는 데이터 무결성 검사, 비밀번호 저장, 디지털 서명 등 다양한 암호화 응용 분야에서 사용됩니다.
- 대표적으로 해시 함수를 이용한 암호화 기법은 MD5, SHA-256, SHA-512가 있습니다.
- MD5의 경우 데이터 무결성 검사에 주로 사용되며, SHA-256, 512의 경우는 비밀번호 정보로 사용이 됩니다.
특징 | 설명 |
단방향성 | 원래 입력 데이터를 해시 값으로부터 역으로 계산할 수 없습니다. |
고정된 출력 길이 | 해시 함수는 입력 데이터의 크기와 상관없이 항상 고정된 크기의 출력을 생성합니다. |
충돌 저항성 | 서로 다른 두 개의 입력 데이터가 동일한 해시 값을 갖는 경우가 매우 드뭅니다. |
효율성 | 해시 함수는 계산이 빠르고 효율적입니다. |
[ 더 알아보기 ]
💡 평문 데이터를 해시 함수를 통해 암호화된 데이터로 변경될때는 어떻게 평문을 다시 확인 할 수 있을까?
- 비밀번호의 경우 ‘단방향 암호화’로 이용되는 경우가 있습니다.
- 이 경우 비밀번호를 암호화하여 데이터 베이스에 저장이 되었다고 가정하면, 이를 복호화하기 위해서는 평문데이터를 암호화하여서 조회를 수행합니다.
- 예를 들어, 데이터 베이스에 저장된 비밀번호가 1234라고 가정하면 이를 암호화하면 해시값으로 ‘fn123jnfbgxfj’가 나온다는 가정하에 사용자 정보에 해당 데이터 베이스에 저장을 하게 되면, 이를 찾을때는 평문 1234를 암호화하면 ‘fn123jnfbgxfj’값이 동일하게 나오기에 해당 값을 통해서 비밀번호를 확인합니다.
💡 그럼 동일한 해시값 만을 가지면 모든 해시 암호화를 사용하는 사람은 동일한거 아니야?
- 맞습니다. 그렇기에, 평문에 고유한 Sortkey를 조합하여서 이를 암호화하여 사용합니다.
- 예를 들어, 평문 데이터 "password"를 해시 함수로 변환할 때, Sortkey "1234"를 추가하면 "password1234"가 해시 함수의 입력으로 사용됩니다. 이렇게 하면 원래의 "password"와 동일한 해시 값을 갖지 않게 되어 보안성이 높아집니다.
💡 해시 함수의 종류
- 대표적으로 해시 함수를 이용한 암호화 기법은 ‘MD5’ ‘SHA’ 가 존재합니다.
해시 함수명 | 설명 | 반환 문자 |
MD5 | Message Digest Algorithm 5로 알려진 MD5는 128비트 해시 값을 생성하며, 보안 약점이 발견되어 현재는 보안 목적으로 사용되지 않습니다. | 32자리 문자 |
SHA-1 | Secure Hash Algorithm 1로 160비트 해시 값을 생성하며, 보안 취약점 때문에 현재는 사용이 권장되지 않습니다. | 40자리 문자 |
SHA-2: SHA-224 | SHA-2 계열의 해시 함수 중 하나로, 224비트 해시 값을 생성합니다. | 56자리 문자 |
SHA-2: SHA-256 | SHA-2 계열의 해시 함수 중 하나로, 256비트 해시 값을 생성하며 매우 높은 보안 수준을 제공합니다. | 64자리 문자 |
SHA-2: SHA-384 | SHA-2 계열의 해시 함수 중 하나로, 384비트 해시 값을 생성합니다. | 96자리 문자 |
SHA-2: SHA-512 | SHA-2 계열의 해시 함수 중 하나로, 512비트 해시 값을 생성하며 가장 높은 보안 수준을 제공합니다. | 128자리 문자 |
SHA-3 | Secure Hash Algorithm 3로, SHA-2 이후의 새로운 해시 함수 표준입니다. 다양한 출력 길이(224, 256, 384, 512비트)를 지원합니다. | 56 ~ 128자리 문자 |
[ 더 알아보기 ]
💡 비트를 어떻게 문자로 계산하지?
- 8bit당 1byte입니다. 일반적으로 문자 한개당 1byte로 표현되기에 128비트의 경우는 128 / 8으로 하여 즉, 16 문자로 계산이 됩니다.
1. MD5(Message Digest Algorithm 5)
💡 MD5(Message Digest Algorithm 5)
- 데이터 무결성을 확인하기 위해 사용되는 해시 함수입니다. MD5는 데이터를 고정된 길이의 해시 값(128비트)으로 변환하여 반환합니다.
- 이 해시 값은 원래 데이터의 크기와 상관없이 항상 동일한 길이를 가지며, 데이터가 변조되지 않았는지 확인하는 데 사용됩니다.
💡 데이터 무결성 과정
1. 송신자는 수신자에게 메시지(Hello)를 전송하였습니다.
2. 수신자의 기준으로는 데이터가 변조가 발생된 데이터일 수 있다고 판단이 될 수 있기에 송신자에게 데이터 무결성을 요청합니다.
3. 송신자는 보낸 메시지를 해시 함수를 통해 암호화하여 해시값으로 생성합니다.
4. 송신자는 수신자에게 해시 값을 전송합니다.
5. 수신자는 사전에 전달받은 메시지(Hello)를 암호화 하여, 송신자부터 전달받은 해시값과 비교하여 일치하는지 확인합니다.
2. SHA(Secure Hash Algorithm)
💡 SHA(Secure Hash Algorithm)
- 미국 국가안보국(NSA)에서 설계하고 미국 국립표준기술연구소(NIST)에서 표준화한 암호학적 해시 함수의 계열입니다.
- 데이터의 무결성과 기밀성을 보호하기 위해 다양한 응용 분야에서 널리 사용되고 있습니다. SHA 알고리즘은 여러 버전이 있으며, 각각의 버전은 다른 해시 길이와 보안 수준을 제공합니다.
- SHA-1, SHA-2(SHA-224, SHA-225, SHA-384, SHA-512), SHA-3(SHA-3-224, SHA-3-256, SHA-3-384, SHA-3-512)가 존재합니다.
- SHA-1의 경우 충돌 저항성 약화로 SHA-2, SHA-3으로 대체 되고 있습니다.
알고리즘 | 해시 길이(비트) | 반환 문자 수 | 설명 |
SHA-1 | 160 | 40자리 문자 | 초기에는 널리 사용되었으나, 현재는 충돌 저항성의 약화로 인해 더 안전한 SHA-2 또는 SHA-3 알고리즘으로 대체되고 있음 |
SHA-224 | 224 | 56자리 문자 | SHA-2 알고리즘의 변형으로 224비트 해시 값을 생성 |
SHA-256 | 256 | 64자리 문자 | SHA-2 알고리즘의 변형으로 256비트 해시 값을 생성 |
SHA-384 | 384 | 96자리 문자 | SHA-2 알고리즘의 변형으로 384비트 해시 값을 생성 |
SHA-512 | 512 | 128자리 문자 | SHA-2 알고리즘의 변형으로 512비트 해시 값을 생성 |
SHA-3-224 | 224 | 56자리 문자 | Keccak 알고리즘을 기반으로 한 SHA-3의 변형으로 224비트 해시 값을 생성 |
SHA-3-256 | 256 | 64자리 문자 | Keccak 알고리즘을 기반으로 한 SHA-3의 변형으로 256비트 해시 값을 생성 |
SHA-3-384 | 384 | 96자리 문자 | Keccak 알고리즘을 기반으로 한 SHA-3의 변형으로 384비트 해시 값을 생성 |
SHA-3-512 | 512 | 128자리 문자 | Keccak 알고리즘을 기반으로 한 SHA-3의 변형으로 512비트 해시 값을 생성 |
💡 SQL내에서 SHA-256을 기반으로 비밀번호에 대한 해시값 출력
- qwer1234이라는 비밀번호를 SHA-256으로 해시 암호화를 수행한 경우 동일한 값이 출력되어서 이를 기반으로 비밀번호를 적용합니다.
- DB내에 암호화된 데이터가 들어간 경우, 이를 조회하기 위해서는 ‘qwer1234’이라는 평문을 암호화한 값으로 조회를 합니다.
3) 양방향 암호화(Two-way encryption) : 대칭형, 비 대칭형 암호화
💡 양방향 암호화(Two-way encryption)
- 암호화와 복호화 둘 다 할 수 있는 암호화 기술을 의미합니다. 양방향 암호화에는 대칭키 암호화와 공개키 암호화가 있습니다.
-대칭키 암호화는 암호화와 복호화에 같은 키를 사용하는 암호화 기술입니다. 공개키 암호화는 암호화와 복호화에 사용하는 키가 서로 다른 암호화 기술입니다.
💡 양방향 암호화의 키 종류
키 종류 | 설명 |
공개 키 (Public Key) | 다른 사람과 공유할 수 있는 키로, 데이터를 암호화하거나 디지털 서명을 검증하는 데 사용됩니다. |
개인 키 = 비밀 키 (Private Key) | 본인만 알고 있는 비밀 키로, 데이터를 복호화하거나 디지털 서명을 생성하는 데 사용됩니다. |
비 공개키 (Secret Key) | 대칭형 암호화에서 사용하는 키로, 암호화와 복호화에 동일한 키를 사용합니다. |
대칭키 (Symmetric Key) | 암호화와 복호화에 같은 키를 사용하는 키로, 주로 빠른 데이터 전송에 사용됩니다. |
1. 대칭형 암호화(= 비 공개키 암호화)
💡 대칭형 암호화
- 평문 데이터를 암호화하거나 복호화 할때 ‘동일한 키’를 사용하는 암호화 방식을 의미합니다.
- 이 방식에서는 송신자와 수신자가 동일한 비밀 키를 공유해야 하며, 이를 이용하여 데이터를 암호화, 복호화 합니다.
- 대표적인 대칭형 암호화 알고리즘으로는 AES, DES, 3DES 등이 있습니다.
💡 대칭형 암호화(=비 공개키 암호화)
- 송신자와 수신자는 동일한 키를 소유하고 있습니다.
1. 송신자는 평문을 전송하기 전에 키를 기반으로 ‘암호화’를 수행하여 암호문을 구성합니다.
2. 송신자는 암호문을 수신자에게 전달합니다.
3. 수신자는 암호문을 전달 받습니다.
4. 수신자는 전달 받은 암호문을 키를 기반으로 ‘복호화’를 수행하여 평문으로 해독합니다.
특징 | 설명 |
속도 | 대칭형 암호화는 일반적으로 비대칭형 암호화보다 빠릅니다. |
보안 | 보안성을 유지하기 위해 키를 안전하게 관리하고 공유해야 합니다. 키가 노출되면 암호화된 데이터도 쉽게 해독될 수 있습니다. |
키 관리 | 많은 사용자 간에 안전하게 키를 공유하는 것은 어려울 수 있습니다. 키 관리가 중요한 과제입니다. |
1. AES(Advanced Encryption Standard) 암호화
💡 AES(Advanced Encryption Standard) 암호화
- 데이터 암호화와 복호화에 동일한 키를 사용하는 대칭형 암호화 알고리즘으로, 주로 데이터 보호를 위해 사용됩니다.
- 암호화 키로 AES-128, AES-192, AES-256가 존재합니다. 이 방식의 차이는 사용하는 키에 따라 실행하는 라운드 수가 129Bit는 10라운드, 19Bit는 12라운드, 256Bit는 14라운드를 실행합니다.
- AES 암호화는 데이터 암호화, VPN, 무선 네트워크 보안, 디스크 암호화 등에 사용이 됩니다.
특징 | 설명 |
강력한 보안성 | 높은 보안성을 제공하며, 현재까지 알려진 주요 공격에 대해 안전하다고 평가받고 있습니다. 이는 AES가 매우 복잡한 암호화 구조를 가지고 있기 때문입니다. |
다양한 키 길이 | 128비트, 192비트, 256비트의 세 가지 키 길이를 지원합니다. 키 길이가 길수록 보안 수준이 높아집니다. 일반적으로 128비트 키는 대부분의 응용 프로그램에서 충분히 안전하며, 256비트 키는 더 높은 보안이 필요한 경우에 사용됩니다. |
고속 처리 | 효율적인 알고리즘으로, 하드웨어와 소프트웨어에서 모두 고속 처리가 가능합니다. 이는 AES가 널리 사용되는 이유 중 하나입니다. |
블록 암호화 | 데이터를 고정된 크기(128비트)의 블록으로 나누어 암호화합니다. 이로 인해 AES는 다양한 데이터 크기에 대해 일관된 방식으로 암호화를 수행할 수 있습니다. |
2. 비 대칭형 암호화 (= 공개키 암호화)
💡 비 대칭형 암호화
- 평문 데이터를 암호화 할때와 복호화 할때 ‘서로 다른 암호화 키’를 사용하는 암호화 방식을 의미합니다.
- 이 방식에서는 누구나 접근이 가능한 ‘공개 키’로 암호화를 하며, 특정 개인이 가지고 있는 ‘비밀 키’로만 복호화가 가능합니다.
- 대표적인 비 대칭형 알고리즘으로는 RSA, DSA, ECC 등이 있습니다.
특징 | 설명 |
보안성 | 공개키는 자유롭게 배포할 수 있지만, 비밀키는 안전하게 보호해야 합니다. 이를 통해 키 관리의 어려움을 줄이면서도 높은 보안성을 유지할 수 있습니다. |
키 쌍 | 공개키와 비밀키는 수학적으로 연결된 쌍으로, 공개키로 암호화한 데이터는 오직 해당 비밀키로만 복호화할 수 있습니다. |
속도 | 비대칭형 암호화는 대칭형 암호화보다 일반적으로 느리지만, 키 관리가 용이하고 보안성이 높습니다. |
💡 비 대칭형 암호화 (= 공개키 암호화)
- 송신자는 모든 사람이 접근 가능한 공개 키를 가지고 있고 수신자는 특정 사용자만 가지고 있는 개인키를 소유하고 있습니다.
1. 송신자는 평문을 전송하기 전에 ‘공개 키’를 기반으로 ‘암호화’를 수행하여 암호문을 구성합니다.
2. 송신자는 암호문을 수신자에게 전달합니다.
3. 수신자는 암호문을 전달 받습니다.
4. 수신자는 전달 받은 암호문을 수신자만 가지고 있는 ‘개인 키’를 기반으로 ‘복호화’를 수행하여 평문으로 해독합니다.
1. RSA(Rivest, Shamir and Adleman) 암호화
💡 RSA(Rivest, Shamir and Adleman) 암호화
- 로널드 리베스트(Ronald Rivest)와 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman) 등 3명의 수학자에 의해 개발된 알고리즘을 사용하는 인터넷 공개키 암호화 및 인증시스템입니다.
- RSA 암호화는 데이터 전송, 디지털 서명, 인증서 발급 등에 사용이 됩니다.
특징 | 설명 |
보안성 | 수학적 난제인 소인수분해 문제에 기반을 두고 있어 높은 보안성을 제공합니다. 충분히 큰 키 길이를 사용하면 현재의 컴퓨터 기술로는 실질적으로 해독이 불가능합니다. |
비대칭 키 | 공개키와 비밀키라는 두 가지 키를 사용합니다. 공개키는 누구나 접근할 수 있지만, 비밀키는 오직 소유자만이 접근할 수 있어야 합니다. 공개키로 암호화된 데이터는 오직 비밀키로만 복호화할 수 있습니다. |
키 길이 | RSA의 보안성은 키 길이에 크게 의존합니다. 일반적으로 2048비트 이상의 키 길이를 사용하며, 4096비트 키 역시 점점 더 많이 사용되고 있습니다. |
속도 | RSA는 대칭형 암호화 알고리즘보다 속도가 느리지만, 주로 키 교환, 디지털 서명, 인증서 발급 등에서 사용됩니다. |
4) 암호화 비교 : 해시, 대칭형 암호화, 비대칭형 암호화
분류 | 해시 알고리즘 | 대칭형 암호화 | 비 대칭형 암호화 |
암호화/복호화 | 암호화만 가능 | 암호화 및 복호화 가능 | 암호화 및 복호화 가능 |
키 개수 | 없음 | 1개 (비밀 키) | 2개 (공개 키, 비밀 키) |
키 교환 | 필요 없음 | 필요 없음 | 필요함 |
보안성 | 매우 높음 (충돌 저항성 중요) | 보안성 낮음 (키 관리 필요) | 보안성 높음 (공개 키와 비밀 키 쌍) |
처리 속도 | 매우 빠름 | 빠름 | 느림 |
용도 | 데이터 무결성 확인, 암호화된 지문 생성 | 데이터 전송 중 암호화, 파일 암호화 | 키 교환, 디지털 서명, 인증서 |
대표 알고리즘 | MD5, SHA-1, SHA-2, SHA-3 | DES, AES, 3DES | RSA, ECC, DSA |
데이터 크기 | 고정 길이 (출력 길이 일정) | 가변 길이 (데이터 크기에 비례) | 가변 길이 (데이터 크기에 비례) |
충돌 저항성 | 중요 | 해당 없음 | 해당 없음 |
키 관리 | 해당 없음 | 키 관리 필요 (비밀 키) | 키 관리 필요 (공개 키, 비밀 키) |
오늘도 감사합니다. 😀
반응형