nayoungs
항상 끈기있게
nayoungs
  • 분류 전체보기 (275)
    • Cloud (21)
      • AWS (15)
      • Azure (3)
      • NCP (2)
      • GCP (1)
    • DevOps (68)
      • Docker (16)
      • Kubernetes (50)
      • CICD (2)
    • IaC (25)
      • Ansible (17)
      • Terraform (8)
    • Certification (4)
    • 금융 IT (5)
    • AI (3)
    • Linux (47)
    • 미들웨어 (5)
    • Programming (7)
      • GoLang (3)
      • Spring (4)
    • CS (25)
      • 네트워크 (17)
      • 운영체제 (5)
      • Web (1)
      • 개발 상식 (2)
      • 데이터베이스 (0)
    • Algorithm (59)
      • 프로그래머스 (36)
      • 백준 (18)
      • 알고리즘 정리 (5)
    • ETC (6)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nayoungs

항상 끈기있게

CS/네트워크

[네트워크] 대칭키와 공개키

2022. 11. 18. 21:08
728x90

암호화와 복호화에 사용하는 암호키가 같은 지 다른 지에 따라,

암호화 기법이 대칭키 기법과 비대칭키 기법으로 나뉘어진다.



✔️ 대칭키(Symmetric Cryptography)

대칭키 암호는 암호화와 복호화에 동일한 대칭키(암호키)를 사용하는 알고리즘이다.

송신자가 키를 통해 평문을 암호화(Encryption)하여 암호문을 보내면, 수신자는 동일한 키를 이용하여 암호문을 복호화(Decryption)하여 평문을 만드는 원리이다.

대표적인 알고리즘 : DES, 3DES, AES, SEED, ARIA, MASK 등

 

장점

  • 공개키 암호화 방식에 비해 암호화 및 복호화 속도가 빠르다.
  • 키 크기가 상대적으로 작다.
  • 암호 알고리즘 내부구조가 간단하여 시스템 개발 환경에 용이하다.
  • 대용량 Data 암호화에 적합하다.

단점

  • 암호화 통신을 하는 사용자끼리는 같은 대칭키를 공유해야만 한다.
    • 물리적으로 만나서 전달하지 않는 한, 대칭키를 전달하는 과정에서 해킹의 위험에 노출될 수 있다.
    • 관리해야할 키의 개수가 방대해진다 => N명의 사용자들 간에 서로 다른 비밀키를 공유하기 위해서는 총 N(N-1)/2개의 비밀키가 필요하다 => 사람이 증가할 수록 키의 관리가 어려워진다 => 확장성이 떨어진다.
  • 자주 키 교환을 해야 하는 불편함이 있다.
  • 키 관리가 어려워 전자 상거래 등 디지털 서명 기법에 적용하기 곤란하다.

대칭키 암호화 시나리오

  1. A는 사전에 공유된 대칭키로 데이터를 암호화하여 B에게 전송한다.
  2. B는 동일한 대칭키를 이용하여 데이터를 복호화한다.



✔️ 공개키(Public Key)

대칭키의 키 분배 문제를 해결하기 위해 고안된 것으로, 공개키 암호는 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘(공개키+비밀키)이다. 비대칭키 암호라고도 불린다.

공개키(Public Key)만 대중에게 공개하고, 암호화된 데이터는 고유한 비밀키(Private Key)로만 복호화 할 수 있다. 이 비밀키를 가진 사용자만이 내용을 열어볼 수 있다.

대표적인 공개키 알고리즘 : RSA(가장 대표적), Diffie Hellman, DSA, ECC, Elagamal

개인키 = 비밀키 = 비공개키
공개키 기법 = 비대칭키 기법

 

장점

  • 수신자의 개인키(Private Key)로만 해독할 수 있으므로 안전하다.
  • 키를 분배할 필요가 없다.

단점

  • 대칭키 알고리즘에 비해 속도가 느리다.
    • 속도가 느리기 때문에 긴 문의 암호화보다는, 대칭키 알고리즘의 키 값에 대한 암호에 사용된다.

 

공개키 암호화 시나리오

  1. A가 웹상에 공개된 B의 공개키를 이용하여 평문을 암호화한다.
  2. 이 암호문(CiperText)은 B가 개인적으로 가지고 있는 B의 비밀키로만 복호화가 가능하다. B는 자신의 비밀키로 복호화 한 평문을 확인하고, A의 공개키로 응답을 암호화하여 A에게 보낸다.
  3. A는 A의 비밀키로 암호화된 응답 문을 복호화한다.

 

비밀키 암호화와 공개키 암호화의 비교



이론적으로 완벽한 암호화 시나리오 (대칭키 + 공개키)

대칭키를 주고 받을 때만 공개키 암호화 방식을 사용하고, 이후에는 계속 대칭키 암호화 방식으로 통신한다.

  1. A가 B의 공개키로 암호화 통신에 사용할 대칭키를 암호화하여 B에게 보낸다.
  2. B는 암호문을 받아, 자신의 비밀키로 복호화한다.
  3. B는 A로부터 얻은 대칭키로 A에게 보낼 평문을 암호화하여 A에게 보낸다.
  4. A는 자신의 대칭키로 암호문을 복호화한다.
  5. 계속 대칭키로 암호화 통신을 한다.

이 방식이 SSL(Secure Socket Layer)의 시초가 되었다.



 

✔️ SSH 키 기반 인증 방식

ssh는 secure shell의 줄임말로, 원격 접속 프로토콜이며 TCP/22번 포트를 사용한다.

RSA 공개키 암호화 기법을 사용하며, 공개키 암호화 방식과 대칭키 암호화 방식을 동시에 사용한다.

(RSA 외에도 DSA, ECDSA, ED25519 등을 지원한다.)

SSH Key는 서버에 접속 할 때 비밀번호 대신 key를 제출하는 방식으로,

비밀번호 보다 높은 수준의 보안을 필요로 할 때, 로그인 없이 자동으로 서버에 접속 할 때 사용한다.

 

SSH 키 기반 인증 시스템의 장점

  1. SSH 키 자체가 매우 길고 복잡하여 알아내기 쉽지 않다.
  2. 원격으로 직접 키가 전송되지 않아 키 로깅 어택 등에 강하다.
  3. 비밀번호처럼 특정 패턴으로 작성되거나 같은 비밀번호를 여러 사이트에 돌려쓰지 않는다.
  4. 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 인증 방식은 다음에서 확인할 수 있다.

 

SSH 인증 방식

📌INDEX SSH 파일 패스워드 기반 SSH 인증 키 기반 SSH 인증 SSH 키 생성 SSH 키 미리받기 서버에 키 등록 SSH 접속 ✔️ SSH 파일 /etc/ssh/ 서버의 키 쌍 : public키, private키 /etc/ssh/ssh_config ssh 서비스 설정파

nayoungs.tistory.com





💻 참고) 발표 자료

cs-study - 대칭키와 공개키.pdf
1.04MB

 

 

 

 

Reference

더보기
  • 링크
  • 링크
  • 링크
  • 링크
728x90
저작자표시 비영리 (새창열림)
    'CS/네트워크' 카테고리의 다른 글
    • [네트워크] TLS/SSL HandShake
    • [네트워크] HTTP와 HTTPS
    • [네트워크] TCP/IP 흐름제어 & 혼잡제어
    • [네트워크] UDP(User Datagram Protocol)
    nayoungs
    nayoungs
    안되면 될 때까지

    티스토리툴바