본문 바로가기
IT

암호학, SSH

by 깅지수 2022. 4. 12.
  • 암호학
    • 보안의 3요소
    • 제공 기능
    • 고대 암호
    • 현대 암호
      • 대칭키
      • 비대칭키
      • 해시
      • PKI
      • 전자서명
  • SSH
    • Password 기반 인증
    • Key 기반 인증

 


 

 

📗 암호학

 

📃 보안의 3요소

- 기밀성 Confidentiality

  : 인가된 사용자만 허용된 데이터에 접근 (아무도 몰라야)

    ex. 방화벽, 암호 ...

 

- 무결성 Integrity

  : 적법한 사용자에 의해 해당되는 데이터가 적법하게 변경 (알고는 있지만 조작을 못하게)

 

- 가용성 Availability

  : 필요할 때 데이터에 접근 가능

    ex. 백업 

 

📃 암호학 제공 기능

- 기밀성

- 인증

- 부인방지

- 무결성

 

 

🟠🟡 용어 

- Plain Text : 평문

- Cipher Text : 암호문

- Key : 키

- 암호화 : 평문 ➡️ 암호문

- 복호화 : 암호문 ➡️ 평문

 

 

📃 고대 암호

- 스키테일

  : 원통에 천을 감싸서 글을 작성한 뒤, 풀어서 전달 > 같은 지름의 원통에 다시 감아 해석

 

- 카이사르(시저) 암호

  : 3글자씩 밀어서 치환

 

- 치환 암호

  : key 기반으로 치환 (key 가능 개수 : 26!-1)

   https://rot13.com/

 

- enigma

 

📃 현대 암호

치환, 전치를 얼마나 어렵게 만드는가?

 

1. 대칭키 (Symmetric, Secret Key) : 암호화 키 = 복호화 키 

  • 기밀성 제공
  • 알고리즘

     - RC4

     - DES(Data Encription System) => 취약점 발견 --- 사용 x

     - AES => 가장 많이 사용

     - SEED => 우리나라 제작

 

  • 장점 : 빠른 속도
  • 단점 : 키 분배의 문제 (키를 안전하게 전달할 수 있는가 & 키 개수가 너무 많음)

 

2. 비대칭키/공개키 (Asymmetric) : 암호화 키 복호화 키 

  • Key Pair
    • Public Key : 공개키 (공개무관) 
    • Private Key : 비공개키, 개인키 (공개되면 x like 대칭키) (ex. ssh key-gen)
  • A가 B에게 암호문 전달할 때

     (B의) 공개키로 암호화 ➡️ (B의) 개인키로만 복호화 : 기밀성

     (A의) 개인키로 암호화 ➡️ (A의) 공개키로만 복호화 : 부인방지

 

  • 알고리즘

     - Diffie-Hellman 

     - RSA

     - DSA

     - ECC

  • 장점 : 키 분배의 문제 해결
  • 단점 : 느린 속도

 

3. 해시 Hash Function (Algorithm), One Way Function (단방향 함수), Message Digest (메세지 축약)

  • 무결성 제공

 

** 키가 없음 즉, 입력 값이 같으면 출력 값도 동일

 

  • input은 길이 제한이 없지만 output(hash value)는 길이가 고정

     ∴  데이터 암호화 목적으로 사용하는게 아니라 무결성을 지키기 위해 사용

 

  • 알고리즘

     - MDS 

     - SHA1

     - SHA2 (sha256, 512)

     - SHA3

  • 문제점 : Birthday Paradox (사람이 많아질 수록 생일 같은 경우가 많아짐)

 

4. PKI (Public Key Infrastructure)

인증서 개념 등장

 

  • 공개키 방식은 상대방의 공개키를 검증할 수 있는 방법이 x

      ==> 제 3자 (CA)가 공개키(인증서) 검증을 대신하기 위해 PKI 등장

 

 

  • 구조

                    

 

 

  • 인증서 x.509 표준

 

 

5. 전자서명

  • 부인방지 제공

 


 

 

📘 SSH

 

- /etc/ssh/<Key_Pair> : 서버의 key pair (public, private)

- /etc/ssh/ssh_config : 클라이언트 설정 파일

- /etc/ssh/sshd_config : 서버 설정 파일

PasswordAuthentication no 	#PW 인증
GSSAPIAuthentication yes 	#key 인증

 

- ~/.ssh/<Key_Pair> : 클라이언트의 key pair

- ~/.ssh/know_hosts : 접속 기록

- ~/.ssh/authorized_keys : 공개키 저장

- ~/.ssh/config : ssh client의 설정파일 > 미리 등록해놓으면 쉽게 접속 가능

 

 

 

🔎 Password 기반의 인증

A (Client) --> SSH --> B (Server)

 

1. A는 B의 공개키가 필요

=> B의 공개키는 /etc/ssh/ssh_host_<알고리즘>_key(.pub) 에 있음

    알고리즘 : RSA, DSA, ECDSA

 

2. (B 시스템에 최초 접속시) A 시스템의 사용자에게 B의 공개키(지문)가 맞는지 확인 (y/n)

 

3. A의 ~/.ssh/known_hosts 파일에 B의 공개키 등록

  IP/domain 정보

  B의 공개키

 

4. ID/PW (인증)

 

🔎 Key 기반의 인증 

1. A에서 (인증키) key-pair 생성

ssh key-gen

~/.ssh/id_rsa : 개인키

~/.ssh/id_rsa.pub : 공개키

 

2. B에 A의 공개키 등록

 B 시스템의 ~/.ssh/authorized_keys : client의 공개키 등록

 EC2(클라우드 인스턴스) : A에서 지정한 A의 공개키 등록

 BM,VM : ssh-copy-id 명령으로 등록 (* B에 패스워드 인증 방법이 활성화 되어 있어야함)

 

3. (B 시스템에 최초 접속시) A 시스템의 사용자에게 B의 공개키(지문)가 맞는지 확인 (y/n)

 

4. A의 ~/.ssh/known_hosts 파일에 B의 공개키 등록

  IP/domain 정보

  B의 공개키

 

5. A의 개인키로 인증

 

* 기본 로그인 사용자

- Amazon Linux : ec2 user

- Ubuntu : ubuntu

- Debian : debian

- Centos : centos

- RHEL : cloud-user

- Vagrant : vagrant

 

 

- 서버의 ssh 공개키 지문 확인 

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

 

- 서버의 ssh 공개키 미리 확인하는 방법

ssh-keyscan <확인하고자 하는 ip>
ssh-keyscan -t <rsa|ecdsa> <ip>

 

- 공개키와 지문 확인

ssh-keyscan -t ecdsa <ip> | ssh-keygen -l -r

 

- 미리 서버의 공개키 등록

ssh-keyscan -t ecdsa <ip> >>
~/.ssh/known_hosts

 

 

🔎 Key 기반 인증 구성

client

ssh-keygen

ssh-keyscan -t ecdsa 192.168.100.11 >>
~/.ssh/known_hosts

ssh-keyscan -t ecdsa 192.168.100.12 >>
~/.ssh/known_hosts

or

ssh-copy-id vagrant@192.168.100.11
ssh-copy-id vagrant@192.168.100.12

 

 

'IT' 카테고리의 다른 글

PowerShell  (0) 2024.08.01
[Pycharm] 파일경로 설정으로 인한 오류  (0) 2023.11.12