커버로스(Kerberos)

  • 어원 : 그리스 신화에 나오는 머리 셋 달린 개(케르베로스)

  • 미국 MIT대의 Athena Project에 의해 개발

  • 네트워크 인증 프로토콜

  • 강력한 인증을 위해 설계

    • 클라이언트/서버 애플리케이션 대상

    • 비밀 키 암호화(대칭 키 암호화) 사용

  • 암호화 알고리즘

    • ver4 : DES 사용 (fade-out 진행중, 5로 update 권고)

    • ver5 : DES 외의 다른 알고리즘도 사용 가능

  • UDP 88 port를 사용



Kerberos 구성 요소

  • Client

    • Kerberos 영역에 속한 서비스를 사용하는 사용자/호스트/애플리케이션을 의미

    • KDC(AS와 TGS)로부터 티켓을 받음

  • KDC (Key Distribution Center)

    • Kerberos에서 인증을 위해 사용하는 티켓(Ticket)을 발행하는 서비스이며, 보통 AG, TGS가 있음. Kerberos DB도 포함
  • AS (Authentication Server)

    • 클라이언트의 요청을 받아 그 클라이언트를 인증

    • 인증 후 TGT(Ticket Granting Ticket)를 발행

    • TGS의 비밀 키를 알고 있음

  • TGS (Ticket Granting Server)

    • AS로부터 인증받은 클라이언트에게 서비스 사용이 가능한 SGT(Session Granting Ticket)를 발행

    • SS의 비밀 키를 알고 있음

  • Kerberos DB (Database)

    • Kerberos Client 정보를
  • Service

    • Client가 사용하기 원하는 특정 네트워크 서비스

    • Client가 TGS로부터 받은 SGT를 인증하기 위해 사전에 Kerberos 서버에 등록되어 있어야 함(SSH, Web)

  • Kerberos 영역

    • 티켓을 발행하는 하나 이상의 KDC와 Service, 그리고 여러 Client들로 구성된 네트워크 전체를 의미



인증 절차

  • Client

    • ID/PWD 또는 공개 키 등으로 Client 머신에 로그인
  • Client → KDC AS (Authentication Server)

    • 서비스 사용 요청

    • User ID (암호화 되지않은 일반 텍스트) 전달

  • KDC AS (Authentication Server) → Client

    • Client 정보를 Kerberos 데이터베이스에서 조회한 후 클라이언트를 발견하면 두 가지 메시지를 Client에게 전달

    • 전달 (1) TGT(Ticket Granting Ticket) : encrypt(TGS 비밀키, Client ID, 주소, 유효기간, TGS 세션 키)

    • 전달 (2) encrypt(key: 클라이언트 PWD기반 비밀키, data: “TGS 세션키”)

  • Client → KDC TGS (Ticket Granting Server)

    • TGS 세션키는 수신한 메시지를 복호화해서 획득

    • 두 가지 항목을 전송

    • Authenticator = encrypt(key: TGS 세션키, data: “Client ID, timestamp”)

    • TGT (클라이언트는 TGS 비밀키를 모르기때문에 복호화 또는 데이터 조작 불가)

  • KDC TGS (Ticket Granting Server) → Client

    • 전달받은 TGT(TGS 비밀키로 복호화 가능), 암호화된 Authenticator (TGS 세션키로 복호화 가능)를 모두 복호화

    • 안에 담긴 Client ID가 일치하는지 확인하여 일치할 경우 두 가지 항목 전달

    • 전달 (1) SGT(Session Granting Ticket) = encrypt(key: SS 비밀키, data: “Client ID, 주소, 유효기간, SS 세션키”)

    • 전달 (2) encrypt(key: TGS 세션키, data: SS 세션키)

  • Client → Service(Application Server)

    • 아래 두 가지 항목 전달

    • 전달 (1) SGT(Session Granting Ticket)

    • 전달 (2) Authenticator = encrypt(key: SS 세션키, data: “Client ID, timestamp”)

  • Service(Application Server) → Client

    • 전달받은 SGT, Authenticator를 복호화 해서 안에 담긴 Client ID 일치 확인 후 일치할 경우 아래 항목을 전달

    • encrypt(key: SS 세션키, data: Authenticator안에 담겨있던 timestamp)

  • 클라이언트

    • 전달받은 timestamp와 자신이 Authenticator에 담아보냈던 timestamp의 값이 일치하는 확인

    • 일치할경우 실제 작업 시작



단점

  • 패스워드 유출시 무의미(패스워드 추측 공격에 취약)

  • 인증값, 티켓 등이 임시로 사용자에게 저장되므로 탈취당할수 있음

  • 인증서버 또는 티켓발급 서버(KDC)에 문제발생시 전체 인증에 문제가 발생할 수 있음(단일오류지점(SPOF))

  • 사용자 패스워드 변경시 비밀키도 변경해야됨



출처

  • 정보통신기술 용어 해설 LINK

  • Web MIT Edu LINK

  • 위키피디아 LINK