Public Key / Private Key
Updated:
공개 키 암호 방식 (Public-Key Cryptography)
암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다. 공개 키 암호 방식에서는 공개 키와 비밀 키가 존재하며, 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야 한다. 공개 키는 보안 타협 없이 공개적으로 배포가 가능하다.
공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호라고 부르기도 한다.
- 공개 키(Public Key) : 모든 사람이 접근 가능함
- 개인 키(Private Key) : 각 사용자 자신만이 소유하고 접근할 수 있음
공개키를 이용한 방식은 아래와 같습니다.
- 상대방에게 나의 공개키를 알려준다.
- 상대방은 나에게 자신의 공개키를 알려준다.
- 상대방이 나의 공개키를 이용해 정보를 암호하여 나에게 보낸다
- 나는 내 개인키로 이 암호화된 정보를 복호화한다.
- 내 정보를 상대방의 공개키로 암호화해서 보낸다.
- 상대방은 자신의 개인키로 내 정보를 복호화한다.
공개 키 암호 시스템 종류
- 소인수 분해 방식
- RSA
- 이산대수 방식
- El Gamal
- ECC
- Digital Signature
RSA
RSA는 공개키 암호 시스템으로 암호화와 인증에 사용된다. RSA는 일반 정수론적인 면에서 정의되었다. 이 시스템은 큰 수의 인수분해의 어려움에 안전성을 두고 있다. 전자 서명의 길이는 RSA시스템에서의 키 길이와 같다. RSA시스템을 깨는 문제가 인수분해 문제로 귀결된다는 완전한 수학적 증명의 부조고가 인수분해 문제가 NP-hard임에도 불구하고, RSA는 수많은 국제기구의 표준일 뿐만 아니라 산업 표준으로 권장되고있다.
El Gamal
이산 대수 문제의 어려움에 기반을 둔 최초의 공개키 암호 알고리즘입니다.
El Gamal으로 암호화하면 메시지의 길이가 두 배로 늘어나는 특징이 있다. 하지만 암호화할 때 난수를 이용하므로 같은 메시지에 대해 암호화하여도 암호화할 때마다 서로 다른 암호문을 얻게 되는데, 이것은 정보보호 측면에서 큰 장점이 된다. RSA에서는 난수를 사용하지 않기 때문에 같은 메시지에 대한 암호문은 항상 같다는 특징이 있는데, 이것은 공격자가 암호문을 복호화하지 않고도 평문을 축측할 수 있는 단점이 된다. 그러므로 실제 적용 시 RSA는 난수를 사용하는 OAEP(Optimal Asymmetric Encryption Padding)이라는 난수화 패딩 알고리즘과 함께 사용된다.
ECC
타원곡선은 약 150년 전부터 수학적으로 광범위한 연구가 있어 왔다. ECC는 10여 년 전 비트 당 안전도가 타 공개키 시스템보다 효율적이라는 것이 알려졌고, 최근 높은 속도의 구현이 가능하게 되었다. 또한, ECC는 전원의 양이 한정된 이동 통신 기긱의 암호화에 적용될 수 있으며, 차세대 공개키 암호 방법으로 주목 받고 있다.
Digital Signature
전자서명(Digital Signature)은 우리가 일상생활에서 신원을 확인하거나 거래를 하려고 할 때 주민등록증이나 인감 날인 또는 서명등이 필요하듯이, 인터넷 상에서도 이를 확실히 보장해 주는 수단이 바로 전자 서명이다. 즉, 전자서명은 인증서 형태로 발급되는 자신만의 디지털 인감이며 서명인 것이다.
전자 서명은 어떤 사람이 그 문서를 작성했다는 것을 증명하는 방법이므로 전자서명을 하기 위해서는 어떤 문서에 그 문서를 자신의 개인키로 암호화해서 첨부하는 것이다. 이렇게 암호화된 것은 공개키에 의해서 복호화되어서 원문과 비교될 수 있다. 그러므로 이 방법을 사용하면 어떠한 사람이 서명했다는 것을 증명할 수 있다.
RSA
RSA는 공개키 암호시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다. RSA가 갖는 전자서명 기능은 인증을 요구하는 전자 상거래 등에 RSA의 광범위한 활용을 가능하게 하였다.
Example
위에 사용한 위키피디아 예제에서는 간단한 소수로 구현하습니다. 하지만, 현재 가장 높은 bit 수를 사용하는 RSA 로직은 RSA-2048 이다. 이는 617 자리 숫자를 Key 로 사용한다는 이야기라서 수퍼 컴퓨터로도 소인수 분해를 하는게 거의 불가능하고 이것이 바로 RSA 알고리즘이 안전한 원리다.
비공개키 암호 방식 (Private-Key Cryptography)
비공개 키 암호를 구성하는 알고리즘은 비대칭 키 암호 방식과 비교하여 대칭 암호라고 부르기도 한다.
비공개키 암호는 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘을 의미한다.
대칭 키 암호에서는 암호화를 하는 측과 복호화를 하는 측이 같은 암호 키를 공유해야 한다. 이러한 점은 공개 키 암호에서 공개 키와 비밀 키를 별도로 가지는 것과 구별된다. 대신, 대부분의 대칭 키 암호는 공개 키 암호와 비교하여 계산 속도가 빠르다는 장점을 가진다.(엄청나게 빠릅니다.) 따라서, 많은 암호화 통신에서는 비밀 키 암호를 사용하여 대칭 키 암호의 공통 키를 공유하고, 그 키를 기반으로 실제 통신을 암호화하는 구조를 사용한다.
하지만 대칭키 암호화 방식은 보안에 취약합니다. 대칭키 암호화 방식은 암호화와 복호화가 비교적 간편하다. 게다가 대칭키를 사용자끼리 물리적으로 직접 만나서 전달하지 않는한, 대칭키를 전달하는 과정에서 해킹의 위험에 노출될 수 있다.
비공개 키 암호 시스템 종류
- 블록 암호
- DES
- AES
- ARIA
- SEED
- 스트림 암호
- RC4
- A5/1, A5/2, A5/3
블록 암호 방식
블록암호(block cipher)는 암호문을 만들기 위하여 암호 키와 알고리즘이 데이터 블록 단위로 적용되는 암호화 방법이다. 평문의 동일 블록들이 하나의 메시지에서 동일한 암호문으로 되지 않도록 하기 위해 이전 암호 블록의 암호문을 다음 블록에 순서대로 적용하는 것이다. 라운드 함수를 사용해 반복적으로 암호화 과정을 행함으로써 암호화 강도를 향상시킨다. 블록암호는 전치와 대체를 이용한다. 이러한 블록암호 구조에는 페이스텔(Feistel) 구조와 SPN(Substitution-Permutation Network) 구조가 있다.
DES
DES(Data Encryption Standard)는 대칭키 암호 중 하나인 64-비트 블록암호이며 56-비트 비밀키를 사용한다. 1977년에 미국 NBS(National Bureau of Standards, 현 NIST)에서 이 알고리즘을 미국 표준 블록암호 알고리즘으로 채택하였다. 64비트 블록 단위의 입력과 64비트의 출력을 수행하며 16라운드의 페이스텔 연산을 실시한다. 16라운드 과정을 통해 더욱 보안성이 향상된다. 64비트 블록의 입력은 32비트로 나누어 좌, 우로 계산을 실시한다. 56비트 키를 사용하여 암호화를 진행한다.
AES
AES(Advanced Encryption Standard)는 미국 표준 블록암호였던 DES의 안전성에 문제가 제기됨에 따라 2000년 새로운 미국 표준 블록암호로 채택된 128-비트 블록암호이다. AES는 128비트 평문을 128,192,256 비트의 세 가지 키를 가지며, 공개 알고리즘으로 누구나 이용 가능하다. SPN 구조를 사용하여 블록을 나누지 않고 한 번에 변화시키는 구조이다. 128비트 블록 단위로 암호화를 실행한다. 암호화 키로 128, 192, 256 비트의 가변키를 지원한다. AES는 하드웨어와 소프트웨어로 구현하기 쉽다.
ARIA
아리아(ARIA; Academy Research Institute Agency)는 대한민국의 국가보안기술연구소(NSRI) 주도로 개발된 암호 알고리즘이다. ARIA의 입출력 크기와 사용 가능한 키 크기는 미국 표준 암호블록인 AES와 동일하다. ISPN(Involutional SPN) 구조의 128비트 블록암호로 128비트, 192비트, 256비트의 3종류의 키 사용을 제공하며 키의 길이에 따라 ARIA-128, ARIA-192, ARIA-256 등으로 나뉜다.
SEED
시드(SEED)는 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해 1999년 2월 한국인터넷진흥원과 한국의 암호 전문가들이 순수 한국 기술로 개발한 128-비트 블록암호이다. 128비트 비밀키에서 생성된 16개의 64비트 라운드 키를 사용하여 총 16회의 라운드를 거쳐 128비트의 평문 블록을 128비트 암호문 블록으로 암호화하여 출력하는 방식이다. SEED의 F함수는 수정된 64비트 페이스텔 형태로 구성한다.
스트림 암호 방식
스트림암호(stream cipher)는 데이터 흐름인 스트림(stream)을 비트 단위로 순차적으로 처리해가는 암호 알고리즘으로서, 원타임패드(One Time Pad)를 실용적으로 구현할 목적으로 개발되었다. 원-타임 블록 단위로 암호와, 복호화되는 블록암호와 달리 이진화된 평문 스트림과 이진 키 스트림의 배타적 논리합(XOR) 연산으로 암호문을 생성하는 방식이다. 스트림암호는 데이터 흐름(스트림)을 비트 단위로 순차적으로 처리해가는 암호 알고리즘이다. 블록암호의 CFB(Cipher Feedback) 및 OFB(Output Feedback)라는 두 가지 모드는 스트림과 같은 역할을 한다.
스트림암호는 동기의 여부에 따라 형태가 두 가지로 나뉜다.
-
동기식 스트림암호(Synchronous Stream Cipher): 스트림암호의 난수열을 암호화할 입력 값과 독립적으로 생성한다. 암호화와 복호화에서 상호 동기화가 반드시 필요하다. 전송 중 변조되어도 후속 암호문은 오류의 영향을 받지 않는다. 의도적인 변조 복호화 단계에서 검출이 불가능하다.
-
비동기식 스트림 암호(Asynchronous Stream Cipher): 자기 동기식 스트림 암호라고도 불리며 암호문이 전송 도중 변경되어도 자기 동기화가 가능하다. 변조된 암호문이 후속 암호문에 복호화에 사용되지 않아 오류 파급이 제한적이다.
A5/1, A5/2, A5/3
GSM(Global System for Mobile communication)은 유럽 국가를 기준으로 하여 중국, 러시아, 인도 등 전 세계적으로 널리 채택되어 2004년 세계 이동통신 가입자 중 70% 이상이 사용하는 이동통신 방식이다. A5/1, A5/2, A5/3는 GSM에서 데이터를 암·복호화할 때 사용되는 스트림 암호이다. A5/3은 A5/1과 A5/2의 안전성이 취약한 것으로 드러나면서 이들을 대신하여 사용하기 위해 개발되었다.
RC4
RC4는 RSASecurity를 위해 론 리베스트(Ron Rivest)에 의하여 1987년에 고안된 스트림암호 방식이다. 바이트 단위의 작용에 대하여 다양한 키 사이즈를 갖는 스트림암호 방식이다.
이 알고리즘은 랜덤 치환 사용을 기반으로 한다. 쉽게 말한다면, 카드게임에서 카드를 뒤섞는 셔플링(shuffling) 기법을 사용한다. 송신자는 비밀 키를 이용하여 모든 가능한 바이트의 수인 256개를 섞는다. 그 후 특정한 위치의 두 지점을 이용하여 256개의 가능한 바이트 중 하나를 고른 후 그 값을 키 스트림으로 사용하여 평문과 XOR 연산으로 암호화한다. 그리고 다시 두 개의 위치만 바꾸어 섞은 다음 다시 특정 위치의 바이트를 키 스트림으로 반복하여 사용한다. 이러한 연산을 필요한 만큼 수행하여 키 스트림을 얻는 방식이다.
이러한 기법을 테이블 셔플링(Table Shuffling) 방식이라고 한다. RC4는 웹 브라우저와 서버 사이의 통신의 표준으로 규정된 SSL/TLS(Secure Sockets Layer/Transport Layer Security)에서 주로 사용된다.
Leave a comment