티스토리 뷰

암호학

DES

삼전동해커 2020. 10. 19. 23:21

DES암호에 대해 알아보자!


▶치환 암호와 전치 암호를 혼합한 혼합 암호이다.

▶feistel 구조이다.


대칭키 암호 시스템,암호화/복호화 키가 동일하다.

1. 평문을 입력받아 64비트 단위로 블록화한 후

2. 초기 치환(P-box)를 진행한 후

3. 48비트 + 8비트 패리티비트 = 56비트 키로 16 라운드를 거친 후

4. 최종 치환(P-box)를 진행해

3. 64비트의 암호문이 완성된다.




초기 치환



위와 같이 미리 정의된 규칙에 의해 재배열을 하는 방식이다.



초기 치환에 의해 (첫번째 비트 -> 58) (두번째 비트 -> 50) ~~~ (64번째 비트 -> 7)이 들어갔다.

그리고 최종 치환을 보면 (58번째 비트 <- 1) (50 번째 비트 <- 2) (2번째 비트 <- 8)이 들어갔다. 

초기 치환과 최종 치환의 순서가 반대라는 걸 알 수 있다.


라운드 함수


라운드 함수는 Mixer와 Swapper로 구성된다.


1. 먼저 초기 치환을 거친(라운드를 거친) 평문 64비트를 L 32비트와 R 32비트로 나눈다.

2. Mixer과정에서 R1-1을 56비트 키(K1)와 (뒤에서 배울) DES함수를 이용해 연산한 후 R1-1은 L1로 내려가고

▶모든 라운드에 같은 키 사용함.

3. 2의 연산값을 L1-1과 XOR연산 한다.

4.3의 값을 R1로 설정한다.

R1-1이 L1의 값이되고 L1-1값이 R1이 되는 과정을 Swapper라 한다.


DES 함수

DES는 32비트를 48비트의 키(K1)와 연산하는 과정이다.(48비트인 이유는 뒤에서 설명하겠다.)

구성은 확장P-box,XOR,8개의 S-box,4개의 P-box로 구성되어 있다.


오른쪽 32비트 평문을 L1로 swapping한다.


오른쪽 32비트의 평문(라운드 암호문)과 키를 XOR연산 하기위해 48비트로 확장해야 한다.


그림이 훨씬 이해하기 쉽다.

위와 같은 과정을 거친 후 평문(라운드 암호문)과 키를 XOR연산 한다.


다음으로 S-box를 이용해 48비트를 32비트로 출력해 준다.



위와 같이 8비트씩 6개로 묶어 각각 4비트로 출력한다.




S-box를 이용하는 방법은 위 사진과 같고

S-box는 아래에 나열되어 있다.


행과 열을 찾는 방법은

비트 1과 비트 6을 합쳐 행을 결정하고 비트 2,3,4,5를 합쳐 열을 결정한다.

거기에 해당 하는 값을 4비트의 이진수로 표현해 주면 된다.





이 과정을 거쳐 나온 값과 L1-1을 XOR연산 해 R1을 만들어 준다.


마지막으로 

이렇게 1 라운드가 진행됐다.

16라운드를 진행한 후

최종 치환을 해주면 암호문이 완성된다.



키 생성

라운드에서 사용되는 키를 생성하는 방법이다.


원래 키 길이는 64비트이다. 근데 이걸 8비트의 패리티 비트 제거와 축소 치환의 과정을 거쳐 48비트가 된다.


먼저 8비트의 패리티 비트를 제거한다. 비트 8,16,24,32 ~~~ 64를 버린다. 그럼 56비트가 남는다.


1. 56비트를 좌측 순환 이동을 해야한다. 56비트 길이의 키를 28비트씩 두개로 나눈 후 각 부분을 왼쪽으로 1또는 2비트 좌측 순환 이동 한다. 라운드 별로 1비트 인지 2비트 인지 사진으로 설명한다.




이동 후 다시 결합한다.


후에 48비트로 축소 치환 한다. 축소 치환에는 다음의 표가 사용된다.



첫번째 비트자리에는 14번째에 있던 값이 들어오고, 두번째 비트자리에는 17번째에 있던 값이 들어온다는 의미이다.


DES에 대해 이론적으로 알아보았다. 이걸 C언어로 구현해보겠다.

'암호학' 카테고리의 다른 글

OpenSSL을 이용해 파일 암호화  (0) 2022.01.19
RSA python 구현  (0) 2022.01.12
SSO  (0) 2020.10.17
OTP(One Time Password)  (0) 2020.10.16
SSL  (0) 2020.10.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함