본문 바로가기

서버

커버로스(Kerberos)란? 동작 이해하기

커버로스란?

- 커버로스는 티켓 기반의 컴퓨터 네트워크 인증 암호화 프로토콜이다.
- 커버로스를 이용하면 티켓을 가진 유저만 서버에 접속할 수 있도록 제어할 수 있으므로 서버 접근 권한 관리가 편해진다.

티켓 기반?

커버로스에서 사용하는 티켓은 아래 정보들을 안전하게 전달하는데 사용되는 정보 패킷이다. 티켓을 발급할 때 secrey key로 정보들을 암호화한다. 

  • 유저 아이디
  • 유저 호스트 IP주소
  • timestamp
  • 티켓 수명
  • 세션키

암호화된 위 정보들을 통해서 서버와 유저(클라이언트)는 서로 믿을 수 있는 대상인지를 몇가지 과정을 거치며 확인한다.

커버로스 동작 과정

동작 과정을 이해하기 위한 사전 지식 

  • 커버로스는 대칭키 암호화 방법으로 암호화화 복호화에 사용하는 키가 같다. 즉, 암호화할 때 쓰인 key를 알고있다면 누구나 복호화할 수 있다.
  • AS = 인증 서버
  • TGS = 티켓 발급 서버
  • SS = 서비스 서버 (유저가 통신하고 싶어하는 서버!)

  1. 유저는 유저 아이디를 인증서버(AS)로 전송한다. (로그인 요청)
  2. 인증서버(AS)는 전송받은 아이디가 데이터베이스에 있는지 확있하고 있다면 암호화된 TGS와 TGT를 생성해서 유저에게 보낸다.
        - TGS 세션키는 데이터베이스 안에 있는 유저의 패스워드를 키로해서 암호화한다.
        - TGT(Tiket Granting Tiket) : 티켓을 받기 위한 티켓
  3. 유저는 인증서버(AS)로부터 받은 정보를 이용해 TGS 세션키를 얻고, Authenticator를 만들어 TGT와 함께 TGS에 보낸다.
        - TGS 세션키는 유저의 패스워드를 통해 만들었기 때문에 복호화 가능하다.
        - Authenticator는 유저 아이디와 타임스탬프를 TGS 세션키로 암호화한 데이터이다.
  4. TGS는 유저로부터 받은 TGT와 Autenticator를 복호화하여 유저 아이디가 일치하는지 확인하고, 일치한다면 유저에게 티켓과 SS 세션키를 발급해준다. 
        - TGS는 유저에게 SS와 통신할 권한을 주기 위해서 SS세션키와 티켓을 발급해준다.
        - SS 세션키는 TGS세션키로 암호화한다.
        - 티켓은 유저 아이디와 SS세션키 등을 SS secret key로 암호화하여 만든다.
  5. (이제 SS와..) 유저는 TGS로 부터 받은 SS세션키를 복호화하여 또다른 Authenticator를 만들고 티켓과 함께 SS에 보낸다.
        - 유저는 TGS 세션키가 있으므로 SS세션키를 복호화할 수 있다.
        - Authenticator는 유저 아이디와 타임스탬프를 SS 세션키로 암호화한 데이터다.
  6. SS는 유저로 부터 받은 Autehenticator와 티켓을 복호화하여 유저 아이디가 일치하는지 확인한 후, 일치한다면 Authenticator에 들어있던 타임스탬프를 SS 세션키로 암호화하여 유저에게 보낸다.
  7. 유저는 받은 데이터를 SS 세션키로 복호화하여 5번에서 SS에게 보낸 타임스탬프와 일치하는지 여부를 확인한다.
여기까지 성공했다면 유저와 SS는 서로 신뢰하는 통신이 가능해진다.

kinit

kinit은 커버로스가 적용된 시스템에 로그인할 때 사용하는 명령어이다.

$ kinit

kinit 명령어 실행 후 비밀번호 입력시, 인증이 요청된다. 

$ kinit -kt ~/sample-keytab.keytab user-id

-kt옵션을 붙여서 비밀번호가 아닌 키탭으로 인증을 요청할 수 있다.

반응형