We are Architect

6. SSH 본문

네트워크

6. SSH

the best infra 2025. 1. 24. 00:00

 

* SSH 가 무엇인가?

  • SSH는 Secure Shell의 약자이며 뜻은 원격 접속 보안 프로토콜이다. 
  • SSH 프로토콜은 기존 telnet과 같은 원격 접속 프로토콜이 평문으로 통신하던 방식에 대해 보안적으로 취약한 점을 보완하기 위해서 나왔다.
  • 즉 평문을 암호화 하여 중간에 데이터를 탈취당해도 알고리즘으로 암호화된 데이터를 읽을 수 없게 만든 프로토콜이다. 
  • SSH의 포트번호는 22번이다.

 

 

* SSH 세션 인증 과정 

  1. 클라이언트의 서버 접근 요청
    • SSH 프로토콜은 TCP 3-way handshake 과정이 완료후에 작동한다.
    • 클라이언트는 서버에 22 포트로 접근 요청을 시도한다. 
  2. 암호화 알고리즘 및 키 교환 방식 협상
    • 클라이언트와 서버는 서로 사용할 암호화 알고리즘, 해시 알고리즘, 키 교환 알고리즘을 협상한다.
    • 키 교환 방식으로는 Diffie-Hellman 키 교환이나 Elliptic-Curve Diffie-Hellman (ECDH) 알고리즘이 사용된다.
      • Diffie-Hellman 키 교환 방식: 각각의 비밀 값을 기반으로 동일한 키를 독립적으로 계산해 공통의 비밀 키를 공유할 수 있도록 한다.
        • 이 세션 키는 이후의 모든 통신 데이터를 암호화하는 데 사용된다.
  3. 서버는 기존에 있는 공개키와 사설키 한 쌍에서 공개키를 클라이언트에게 보낸다.
    • 클라이언트는 서버의 공개 키를 ~/.ssh/known_hosts 파일과 비교하여 신뢰 여부를 판단한다.
    • 만약 있다면 서버를 신뢰하고 연결을 진행한다.
    • 없다면 해당 퍼블릭키를 사용자가 연결을 할건지 서버 키 지문을 보여주고 사용자 여부를 결정하게 한다.
      • 서버 키 지문 이란 공개 키 값을 해쉬한 값을 이야기한다. 
    • 그리고 디지털 서명 또한 개인키로 암호화해서 같이 보낸다.
      • 디지털 서명이란 서버가 신뢰성을 증명하기 위해 생성한 암호화된 데이터 이다.
        • ssh에 사용되는 디지털 서명에 들어가는 암호화된  데이터는 클라이언트와 서버 간 알고리즘 협상 시 주고받은 데이터를 개인키로 암호화시킨 것이다. 
  4. 클라이언트는 서버가 보내준 공개 키를 가지고 디지털 서명을 확인한다. 
    • 클라이언트는 공개키로 디지털 서명을 검증할 수 있고 해당 내용이 위에 알고리즘 및 해쉬 협상 내용과 비슷하면 검증이 완료되었으므로 계속해서 세션 연결을 한다. 
    • 그리고 Diffie-Hellman 키 교환 알고리즘을 사용하여 공유키가 만들어진다.
      • 공유키가 만들어지면서 해시 함수를 적용해 세션 키도 만들어진다.
      • 세션키는 서버와 클라이언트가 암호화 통신을 하기 위해서 사용된다.
    • 클라이언트와 서버가 서로 공유키를 공유한다.
      • 이 키는 서로 주고받지 않는다.  왜냐면 각자  Diffie-Hellman 키 교환 알고리즘의 계산을 통해서 만들어졌기 때문이다.
      • 공개 키는 세션 키로 파생되어 암호화 복호화에 사용이 된다.  
  5. 디지털 서명까지 확인 후에는 암호화된 세션 연결 설정이 된다.
    • 이때부터 공유키 해시 함수를 통해 세션 키로 파생된다.
    • 세션 키를 가지고 모든 통신이 암호화된 상태로 진행이 된다.

 

* 중요한 점은 디지털 검증은 서로 연결을 위한 검증 수단이다. 

 

* 중요한 데이터를 주고받을 때는 공유 키가 중요한 것인데 공유 키는 세션 키로 파생되어서 데이터를 암호화하는 데 사용된다. 

 

'네트워크' 카테고리의 다른 글

7. http / https  (0) 2025.01.24
5. 서브넷팅  (0) 2024.10.28
4. IP란?  (0) 2024.10.26
3. TCP / UDP의 포트 목록  (0) 2024.10.25
2. TCP / UDP  (0) 2024.10.23