한 걸음씩..

[암호학] 대칭 키 암호 DES구현 본문

잡다한 공부방

[암호학] 대칭 키 암호 DES구현

반엘 2013. 7. 15. 10:54

DES (Data Encryption Standard)


1. 대칭 키 암호
   1) 대칭 키 암호
      -> 보내는 사람과 받는 사람이 동일한 key를 나누어 이 키를 사용하여 암호화, 복호화 하는 방식
   2) 블록 암호
      -> 메시지가 들어오면 메시지를 bit 또는 byte 단위의 블록으로 끊어 블록암호 알고리즘을 통해 
         암호문 작성. 
   3) 스트림 암호
      -> 블록 암호의 일종으로 블록의 길이가 대단히 짧음. 키가 들어오면 키를 이용하여 긴 난수 문자열을
         생성, XOR연산을 하여 암호문을 만들어 냄.
   4) 블록 암호의 유형
      -> 전치 암호 : 문자열의 순서를 바꿈
      -> 환자 암호 : 문자를 기호나 다른 방식의 문자로 바꿈
      -> Feistel 방식 : 메시지가 들어오면 그것을 두 개의 블록으로 분리시킨 후 우측 블록을
                        각각 쪼개 환자 처리 후 합쳐 전치처리를 하고 좌측 블록과 XOR연산을
                        하여 결과를 좌측으로 보내고 좌측 블록은 우측으로 보내는 방법을 여러 번
                        반복하는 방식
      -> SPN 방식 : 메시지가 들어오면 그것을 전부 쪼개 환자처리 후 다시합쳐 전치 암호처리를
                    하는 과정을 여러 번 반복하는 방식
2. DES의 구조
   1) 평문 64bit가 첫 라운드를 거치기 전에 초기전치(Initial Permutation)과정을 거침
   2) 치환 과정을 거친 64bit의 평문 을 각각 32bit씩 나눔
   3) 우측 32bit를 다음 라운드의 좌측으로 복사하고 확대전치를 통해 48bit로 확장
   4) 48bit를 해당 라운드 키와 XOR연산
   5) XOR연산 한 48bit를 s-box환자처리를 통해 32bit로 변경
   6) 변경된 32bit를 p-box전치
   7) P-box 전치된 32bit와 좌측 32bit를 XOR연산 후 다음 라운드 우측에 복사
   8) 3 ~ 7번 과정을 16번 반복
   9) 마지막 라운드를 거친 후 최종 전치
3. 세부구성요소 1) 초기전치 / 최종 전치 -> 해당 표의 순서대로 bit를 재 배열 하는 과정 2) 키 생성구조 -> 송신자와 수신자가 서로 알고 있는 키로부터 16개의 라운드 키를 생성하는 과정. 처음의 약속한 암호키는 64bit지만 실제 사용 가능한 부분은 56bit이므로 8bit를 제거하고 첫번 째 표의 순서로 재 배열. (암호 키의 7bit마다 에러정정 bit삽입. 이 bit는 실제 암호화 과정에 사용되지 않으므로 제거) -> 56bit를 28bit씩 두 개로 나누어 암호 키의 좌 우측 이동표에 좌측이동을 이용하여 각각 28bit를 생성하고 생성된 28bit를 두번째 표의 순서대로 재배열 하여 48bit의 키 생성 3) 확대전치 -> 비트열의 순서를 바꿔줌(32bit -> 48bit) 4) S- Box 환자 -> 6bit의 입력 값과 4bit의 출력 값을 갖는 8개의 S-box를 사용 Ex) 010011이라는 6bit가 S1박스에 입력될 때 1,6bit를 묶어 01 / 2~5bit를 묶어 1001을 만들고 각각 10진수로 바꾸면 (1,9)가 됨 -> S1박스 1행 9열의 값을 찾고 이 수를 다시 2진수로 변경하면 4bit출력 값이 됨 (1행9열 값 6 -> 2진수변환 0110) 5) P – Box 전치 -> 반복되는 문자열이 없고 32bit 출력 유지
4. DES의 특성 1) 상관 관계: 키와 메시지가 뒤섞였는지 나타나는 값 -> 암호 키 고정: 평 문 1비트 변경 시 암호문 약 32비트 변화 -> 평 문 고정: 암호 키 1비트 변경 시 암호문 약 32비트 변화 2) 보수 특성 -> C = DESk(M) -> C’= DESk'(M') 3) 취약 키 -> DESk(DESk(M)) = M 4) 유사 취약키 -> DESk(DESk’(M)) = M