암호화와 복호화에 사용하는 암호키가 같은 지 다른 지에 따라,
암호화 기법이 대칭키 기법과 비대칭키 기법으로 나뉘어진다.
✔️ 대칭키(Symmetric Cryptography)
대칭키 암호는 암호화와 복호화에 동일한 대칭키(암호키)를 사용하는 알고리즘이다.
송신자가 키를 통해 평문을 암호화(Encryption)하여 암호문을 보내면, 수신자는 동일한 키를 이용하여 암호문을 복호화(Decryption)하여 평문을 만드는 원리이다.
대표적인 알고리즘 : DES, 3DES, AES, SEED, ARIA, MASK 등
장점
- 공개키 암호화 방식에 비해 암호화 및 복호화 속도가 빠르다.
- 키 크기가 상대적으로 작다.
- 암호 알고리즘 내부구조가 간단하여 시스템 개발 환경에 용이하다.
- 대용량 Data 암호화에 적합하다.
단점
- 암호화 통신을 하는 사용자끼리는 같은 대칭키를 공유해야만 한다.
- 물리적으로 만나서 전달하지 않는 한, 대칭키를 전달하는 과정에서 해킹의 위험에 노출될 수 있다.
- 관리해야할 키의 개수가 방대해진다 => N명의 사용자들 간에 서로 다른 비밀키를 공유하기 위해서는 총
N(N-1)/2
개의 비밀키가 필요하다 => 사람이 증가할 수록 키의 관리가 어려워진다 => 확장성이 떨어진다.
- 자주 키 교환을 해야 하는 불편함이 있다.
- 키 관리가 어려워 전자 상거래 등 디지털 서명 기법에 적용하기 곤란하다.
대칭키 암호화 시나리오
- A는 사전에 공유된 대칭키로 데이터를 암호화하여 B에게 전송한다.
- B는 동일한 대칭키를 이용하여 데이터를 복호화한다.
✔️ 공개키(Public Key)
대칭키의 키 분배 문제를 해결하기 위해 고안된 것으로, 공개키 암호는 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘(공개키+비밀키)이다. 비대칭키 암호라고도 불린다.
공개키(Public Key)만 대중에게 공개하고, 암호화된 데이터는 고유한 비밀키(Private Key)로만 복호화 할 수 있다. 이 비밀키를 가진 사용자만이 내용을 열어볼 수 있다.
대표적인 공개키 알고리즘 : RSA(가장 대표적), Diffie Hellman, DSA, ECC, Elagamal
개인키 = 비밀키 = 비공개키
공개키 기법 = 비대칭키 기법
장점
- 수신자의 개인키(Private Key)로만 해독할 수 있으므로 안전하다.
- 키를 분배할 필요가 없다.
단점
- 대칭키 알고리즘에 비해 속도가 느리다.
- 속도가 느리기 때문에 긴 문의 암호화보다는, 대칭키 알고리즘의 키 값에 대한 암호에 사용된다.
공개키 암호화 시나리오
- A가 웹상에 공개된 B의 공개키를 이용하여 평문을 암호화한다.
- 이 암호문(CiperText)은 B가 개인적으로 가지고 있는 B의 비밀키로만 복호화가 가능하다. B는 자신의 비밀키로 복호화 한 평문을 확인하고, A의 공개키로 응답을 암호화하여 A에게 보낸다.
- A는 A의 비밀키로 암호화된 응답 문을 복호화한다.
비밀키 암호화와 공개키 암호화의 비교
이론적으로 완벽한 암호화 시나리오 (대칭키 + 공개키)
대칭키를 주고 받을 때만 공개키 암호화 방식을 사용하고, 이후에는 계속 대칭키 암호화 방식으로 통신한다.
- A가 B의 공개키로 암호화 통신에 사용할 대칭키를 암호화하여 B에게 보낸다.
- B는 암호문을 받아, 자신의 비밀키로 복호화한다.
- B는 A로부터 얻은 대칭키로 A에게 보낼 평문을 암호화하여 A에게 보낸다.
- A는 자신의 대칭키로 암호문을 복호화한다.
- 계속 대칭키로 암호화 통신을 한다.
이 방식이 SSL(Secure Socket Layer)의 시초가 되었다.
✔️ SSH 키 기반 인증 방식
ssh는 secure shell의 줄임말로, 원격 접속 프로토콜이며 TCP/22번 포트를 사용한다.
RSA 공개키 암호화 기법을 사용하며, 공개키 암호화 방식과 대칭키 암호화 방식을 동시에 사용한다.
(RSA 외에도 DSA, ECDSA, ED25519 등을 지원한다.)
SSH Key는 서버에 접속 할 때 비밀번호 대신 key를 제출하는 방식으로,
비밀번호 보다 높은 수준의 보안을 필요로 할 때, 로그인 없이 자동으로 서버에 접속 할 때 사용한다.
SSH 키 기반 인증 시스템의 장점
- SSH 키 자체가 매우 길고 복잡하여 알아내기 쉽지 않다.
- 원격으로 직접 키가 전송되지 않아 키 로깅 어택 등에 강하다.
- 비밀번호처럼 특정 패턴으로 작성되거나 같은 비밀번호를 여러 사이트에 돌려쓰지 않는다.
- Brute-Force (무차별대입) 공격에 강하다.
SSH Key가 동작하는 과정
SH Key는 공개키(public key)와 비공개 키(private key)로 이루어지는데 이 두개의 관계를 이해하는 것이 SSH Key를 이해하는데 핵심이다. 키를 생성하면 공개키와 비공개키가 만들어지는데, 이 중 비공개키는 로컬 머신(Client)에 위치해야 하고, 공개키는 리모트 머신(Server)에 위치해야 한다. SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개키와 원격 머신의 비공개키를 비교해서 둘이 일치하는지를 확인한다.
파일 | 설명 |
---|---|
id_rsa | private key, 절대로 타인에게 노출되면 안된다. |
id_rsa.pub | public key, 접속하려는 리모트 머신의 authorized_keys에 입력한다. |
authorized_keys | remote 머신의 .ssh 디렉토리 아래에 위치, id_rsa.pub 키의 값을 저장한다. 키를 등록한 client들이 축적된다. |
known_hosts | 한 번이라도 접속했던 서버들의 정보를 갖고 있는 파일 local 머신의 .ssh 디렉토리 아래에 위치, remote머신에서 넘겨준 공개키의 fingerprint |
더 자세한 SSH 인증 방식은 다음에서 확인할 수 있다.
💻 참고) 발표 자료
Reference