SSH

김석·2023년 5월 27일
0

Security

목록 보기
4/6

SSH 접속 방식에 대칭키 및 비대칭키 암호화가 사용됨.

1. 접속하려는 서버가 올바른 서버인지 검증

  • SSH 서버가 설치될 때 내부적으로 서버의 공개키와 개인키가 생성됨.
  • 클라이언트가 서버에 SSH 접속을 요청하면, 서버는 자신의 공개키를 클라이언트에게 전송함.
  • 만약 클라이언트가 해당 서버에 최초로 접속한 것이라면, 해당 공개키가 클라이언트 known_host 파일에 추가됨.
  • 이후 해당 서버에 접속 요청을 할 때마다 그 공개키를 가진 서버가 올바른 서버인지 확인하는 절차를 가진다.
    1. 클라이언트에서 난수 생성, 해싱 후 서버의 공개키로 암호화하여 서버에 전송.
    2. 서버에서 개인키로 복호화하여 난수 추출 후 해싱, 클라이언트에 전송.
    3. 클라이언트에서 난수 해시 값 비교해서 올바른 서버인지 확인.
    4. 해당 공개키에 대한 비밀키를 가진 서버라는 것이 입증되면, 올바른 서버임이 보장됨.

2. 암호화된 통신을 위한 세션키(대칭키) 생성

  • 세션키는 모든 통신을 암호화하는데 사용되는 대칭키.
  • 대칭키는 비대칭키에 비해 빠르고 컴퓨팅 파워가 적게 드는 장점이 있음.
  • 하지만 대칭키가 유출되면 모든 통신을 복호화할 수 있게 됨.
  • 클라이언트와 서버는 키 교환(디피-헬만) 알고리즘을 통해 안전하게 대칭키를 공유.

세션이란?

  • 클라이언트와 서버 간의 연결 상태
  • 서버와 접속이 종료하기 전의 상태
  • 접속 시작부터 종료까지의 기간

디피-헬만 알고리즘

  • 상대방의 공개키와 나의 개인키를 사용해 대칭키를 얻어가는 알고리즘.
  • 이 때 사용하는 대칭키와 비대칭키는 ssh에서 사용하는 서버와 클라이언트의 키 쌍이 아님.
  • 서버와 클라이언트에서 임시로 비대칭키 방식의 키 쌍을 생성하고, 공개키를 교환함.
  • 매 세션마다 임시의 비대칭키를 사용하기 때문에, 세션마다 세션키는 다름.
  • 클라이언트나 서버의 개인키가 유출되어도 이전 세션의 세션키를 모르기 때문에 복호화할 수 없음.
  • 대칭키를 전송하는 것이 아니라, 서버와 클라이언트에서 같은 대칭키를 생성하는 알고리즘.

3. 클라이언트가 접근 권한을 가지고 있는지 검증

  • 사용자는 본인의 공개키, 개인키를 가지고 있음.
  • 인증된 사용자라면, 서버의 authorized_keys에 사용자의 공개키가 추가되어 있을 것임.
    1. 서버에서 난수 생성, 클라이언트의 공개키로 암호화하여 클라이언트로 전송.
    2. 클라이언트에서 개인키로 복호화하여 난수 추출.
    3. 난수와 세션키 결합 후 해싱, 서버로 전송.
    4. 서버에서 생성했었던 난수와 세션키 결합 후 해싱, 값 비교.
    5. 해당 공개키에 대한 비밀키를 가진 클라이언트라는 것 입증 + 해당 세션에 대한 세션키를 가지고 있다는 것 입증.

출처

https://velog.io/@mineru/Web-SSH-%EC%A0%91%EC%86%8D-%EC%9B%90%EB%A6%AC
https://limvo.tistory.com/21

profile
handsome

0개의 댓글