◇ 암호 : 데이터를 암호화하고 복호화 한다. 그 종류에는..

  • 대칭 또는 개인키
    : 암호는 데이터를 암호화하고 복호화하기 위해 하나의 개인키를 사용.
      대칭키는 사람이 데이터를 암호화하고 복호화할 때, 하드디스크 파일 암호화 같은 애플리케이션에 유용.
     
  • 비대칭 또는 공개키
    : 암호는 한 쌍의 키를 사용.
      하나의 키는 공개되어 자유롭게 돌아다니고 다른 키는 비밀로 유지되어야 함.
      어느 하나의 키로 암호화된 데이터는 다른 키를 사용하여 복호화될 수 있음.
     
  • 하이브리드(hybrid)시스템
    : 대칭과 비대칭 암호를 결합하여 사용.
      하이브리드 시스템에서 비대칭 암호는 소위 개인키(비밀키 또는 세션키)를 교환하기 위해 사용.
      개인키는 데이터 암호화 및 복호화를 위해 대칭 암호화와 함께 사용.

 ◇ 스트림과 블록 암호(Stream & Block Cipher)

  • 블록암호 : 고정된 크기(64bit)의 데이터 블록을 암호화하고 복호화.
      블록 암호는 암호화와 복호화에 적용되는 키(key)가 동일하냐 또는 상이하냐에 따라서 대칭형 암호와 
      공개키 암호로 분류된다. 공개키 암호에서는 암호화를 위해서 공개된 공개키(public key)가 적용되지만
      복호화에는 공개키에 대응되는 개인키(private key)에 적용된다. 
     
  • 스트림암호 : 비트나 바이트의 스트림상에서 작동.
                           

 ◇ 블록 암호(Block Cipher)

  • 패딩(Padding)
     - 평문이 항상 블록 크기(일반적으로 64bit)의 배수가 되는 것은 아님.
     - 마지막 불완전한 블록을 보정하기 위하여, 패딩이 필요.
     - 복호화 과정에서 패딩을 제거하고 평문의 실제 길이를 저장.
     
  • PKCS#5
     - 일종의 패딩기법
     - 공개키 암호화 표준(Public-Key Cryptography Standard).
     - 블록의 나머지 부분을 바이트의 수로 채움.
     

    - 원래 평문의 길이가 블록 크기와 같다고 해도, 암호화될 때마다 패딩이 항상 추가

  • 기타 패딩 기법
    - 블록의 잉여 부분을 랜덤 데이터나 데이터의 패턴으로 채울 수 있다.
    - 패딩을 제거하기 위한 어떤 방법만 가지고 있으면 된다.
     
  • 암호 모드
    - 평문의 블록이 암호문의 블록으로 암호화되는 방법을 결정. 그 역도 성립.
    - getMode()를 호출함으로써 암호 모드를 알아낼 수 있음.
    - SunJCE 프로바이더는 ECB, CBC, CFB, OFB, PCBC 모드를 지원.

    1) ECB(Electronic Code Book)
        - 평문의 각 블록은 암호문의 블록으로 암호화함.
        - (단점) : 사용자가, 동일 키 사용시, 동일한 평문을 항상 동일한 암호문으로 암호화함.

    2) CBC(Cipher Block Chaining)
        - ECB모드의 단점을 보완.
        - 평문의 각 블록은 XOR을 이용하여 이전 블록의 암호문과 연산.
        - 평문의 첫 번째 블록에 대하여는 암호문으로 IV(Initialization Vector)가 사용.
        - IV는 랜덤 데이터, 데이터를 정확하게 복호화하기 위해 암호문을 동일한 IV로 초기화해야 함.
        - CBC 복호화는 암호화 과정의 반대.
        - 암호문의 각 블록이 복호화될 때마다, 이전의 암호문 블록과 XOR로 연산되고, 평문을 생성함.
        - 다시, 암호는 IV를 이용하여 초기화되어 계속 진행됨.
     

         
             ※ IV(Initialization Vector) : 키의 한 종류.
                                                      암호화 측면에서, 암호는 키와 IV를 사용함으로써 초기화됨.
                                                      복호화가 끝날 때, 암호는 키와 동일한 IV로서 초기화됨.
                                                      IV는 암호문을 복호화하려는 누군가에게 전송되어야 함.

        3) PCBC(Propagating Cipher Block Chaining)
            - CBC모드와 상당히 유사.
            - 평문 블록이 암호화될 때, 이전의 평문 블록과 이전의 암호문 블록으로 동시에 XOR로 연산됨.
            - 복호화된 이전의 평문과 암호문 블록으로 XOR로 연산됨.

        4) CFB(Cipher FeedBack)
             - 블록 암호가 스트림 암호처럼 동작.
             - IV를 이용.
             - 블록암호는 블록 크기보다 작은 데이터의 조각을 암호화할 수 있음.
             - CFB8 : 동시에 한 바이트(8비트)를 암호화하거나 복호화하는 데 사용.

    『 암호화 (p→c) 
        ① 블록 암호를 이용하여 기본적 암호의 블록 크기만큼 버퍼를 암호화.
             초기에 버퍼는 IV로 채워진다.

         ② 암호화된 버퍼의 최좌단 비트 수와 평문은 XOR로 연산됨. 그 결과 암호문이 출력됨.
             암호화된 버퍼의 나머지는 폐기됨.
             CFB8에서, 암호화된 버퍼의 최좌단 바이트는 평문과 XOR 

         ③ CFB8에서, 버퍼는 한 바이트 왼쪽으로 이동.
              암호문은 버퍼의 오른쪽편에 있는 빈 공간을 채우는 데 사용된다.
              이 버퍼는 다음 암호화에서 다시 사용될 것이다.
              이 과정이 계속되면, 버퍼는 전부 암호문으로 채우는 데 사용될 것이다.

    『 복호화 (c→p) 
       ① 버퍼는 블록 암호를 이용하여 암호화한다. 
            암호문 바이트를 복호화할 지라도, 여전히 버퍼를 암호화 하기 위해 블록 암호를 이용한다.

        ② 암호화된 버퍼의 최좌단 비트는 평문 출력을 처리하는 암호문과 XOR로 연산된다.
             다시, 암호화된 버퍼의 나머지는 폐기된다.

        ③ 원래 버퍼는 왼쪽으로 이동하고, 암호문으로 채워진다. 
            이 버퍼는 다음 복호화에서 다시 사용될 것이다.

        5) OFB(Output FeedBack)
             - 내부 버퍼가 갱신되는 것을 제외하고 CFB 모드처럼 동작.
             - 내부 버퍼가 왼쪽으로 이동될 때, 오른쪽의 공간은 암호화된 버퍼의 가장 왼쪽 비트로 채워짐.

         6) 기타 모드
             - 암호를 사용할 때, 사용할 모드는 암호분석가에 대한 암호의 저항력과 전송 오류로부터 
                회복할 수 있는 능력에 대해 많은 영향을 미친다.

'Security' 카테고리의 다른 글

잘 알려진 백도어에서 사용하는 포트  (0) 2017.01.08
웹 사이트 보안 및 DoS(Denial-of-Service) 공격 방지  (0) 2017.01.08
방화벽 내용 정리  (0) 2017.01.08
All in one 정리  (0) 2017.01.08
Kerberos  (0) 2017.01.08

Kerberos ; 커베로스

커베로스는 개방된 컴퓨터 네트웍 내에서 서비스 요구를 인증하기 위한 안전한 방법이다. 커베로스는 미국 MIT의 Athena 프로젝트에서 개발되었다. 이 이름은 그리스 신화에서 따왔는데, 커베로스는 저승의 신 하데스의 문을 지키는 머리가 셋 달린 개이다. 커베로스는 사용자가 인증 과정으로부터 암호화된 "티켓"을 요청할 수 있게 해주는데, 이 티켓은 서버에 특정 서비스를 요구하는데 사용될 수 있다. 사용자의 암호는 네트웍을 지나가야 할 필요가 없다. 커베로스의 클라이언트 및 서버 버전은 MIT로부터 다운로드 하거나, 또는 상용 버전을 구입할 수 있다.

아래에 커베로스의 동작원리를 간단하게 설명하였다.

  1. 당신이 지금 텔넷이나 기타 이와 비슷한 로그인 요청을 통해, 다른 컴퓨터에서 서버에 액세스하기 원한다고 가정해 보자. 이 서버는 당신의 요청을 받아들이기 전에, 커베로스 "티켓"을 요구한다.
  2. 티켓을 받기 위해, 당신은 먼저 인증 서버에 인증을 요구한다. 인증 서버는 당신이 입력한 패스워드에 기반하여 "세션 키"와, 서비스 요구를 나타내는 임의의 값을 만든다. 세션 키는 사실상 "티켓을 부여하는 티켓"이다.
  3. 그 다음에 세션 키를, 티켓 부여 서버, 즉 TGS (ticket-granting server)에 보낸다. TGS는 인증 서버와 물리적으로는 동일한 서버에 있을 수 있지만, 그러나 지금은 다른 서비스를 수행한다. TGS는 서비스를 요청할 때 서버에 보낼 수 있는 티켓을 돌려준다.
  4. 그 서비스는 티켓을 거절하거나, 또는 받아들여서 서비스를 수행한다.
  5. TGS로부터 받은 티켓은 발송일자와 시간이 적혀있기 때문에, 일정 시간 동안 (대체로 8시간 동안) 내에는 재인증 없이도 동일한 티켓으로 다른 추가 서비스를 요청할 수 있다. 티켓을 제한된 시간 동안에만 유효하게 만듦으로써, 후에 어떤 사람이 그것을 사용할 수 없도록 만든다.

 

실제의 과정은 위에 설명한 것보다 더 복잡하며, 사용자 절차도 구현 내용에 따라 다소 달라질 수 있다.


'Security' 카테고리의 다른 글

방화벽 내용 정리  (0) 2017.01.08
All in one 정리  (0) 2017.01.08
DES/3DES/AES  (0) 2017.01.08
스푸핑  (0) 2017.01.08
icmp flood 서버단에서 예방하기  (0) 2017.01.08

+ Recent posts