-
블록암호: DESDreamHack/암호학 2024. 2. 12. 16:24
DES는 대칭키 암호이다.
그러므로 A와 B가 통신한다면, A와 B가 같은 대칭키를 갖고 암호화와 복호화를 이행한다.
비밀키의 길이는 56bits로 7bytes이지만 7비트마다 생성되는 패러티 비트까지 포함하면 64bits로 8bytes이다.
그리고 비밀키에 의해 생성되는 추가 키들은 48bits로 6bytes의 길이를 가지게 된다.
아래 사진을 보면 더 편할듯함.
블록 단위는 8bytes이다.초기 순열(Initial Permutation) = IP
최종 순열(Final Permutation) = FP]
확장 테이블(Expansion Table) = ET
Feistel 구조 (페이스텔 구조) 를 가지고 있다.이 사진을 잘 보면서 아래를 보면 편할 것이다.
페이스텔 구조를 통한 DES 알고리즘 설명
1. 초기 순열(IP)를 통해서 전치 과정을 거친다.58번째에 있는 비트를 1번째 비트로 전치
50번째에 있는 비트를 2번째 비트로 전치
42번째에 있는 비트를 3번째 비트로 전치
...
과정을 반복하여 같은 크기의 블록이 나온다요런식으로 먼저 거친다.
2. L0와 R0로 나누어준다.
3. R0를 ET를 통해서 확장+전치 과정 이행 (32bits -> 48bits)자세히보면 1,4,5,8,9, 12,13,16,17,20, 21,24,25,28,29, 32번째 비트들은 중복되게 들어가서
총 16개의 비트가 더 추가되게 확장과 전치가 된다.RE가 아니라 RET로 표현했어야했네 4. RET0 ⊕ K1 연산 진행
앞서 비밀키 56bits를 통해서 48bits의 16개의 키를 만들어내기로했는데
K1(첫번째 키 값)은 어디서 나오는걸까? 하고 의문이 나올 것이다.
56비트의 키를 2개로 나눈다.
https://orion.towson.edu/~mzimand/cryptostuff/DES-tables.pdf
링크의 PC-1과 PC-2를 참고하면서 보면 편하다.
Cn(28bits), Dn(28bits)로 나뉘는데 PC-1 테이블을 통해서 나뉜다.여기서 PC-1 테이블을 보면 8,16,24,32...
8의 배수가 없다는 것을 알 수 있다.
실질적인 키의 크기는 64비트이지만
그 중 최상단 비트인 패러티 비트 8개를 빼고
56개의 비트를 사용하는 것이기 때문이다.
그래서 테이블에 해당하는 비트를 전치해줄 때 57이상의 비트 주소가 나오는 것이다.
나눈 후에는 각각 Cn과 Dn을 라운드에 따라 순환 좌시프트 연산을 이행한다.
표는 이러하다.사진의 K1을 뽑아내는 과정은 1라운드를 기준으로 했으므로
Cn과 Dn을 순환 좌시프트 연산(L1으로 표기함)을 1회이후 CL1n과 DL1n 을 합쳐낸 값을 축약 전치 테이블(48bits)를 이용하여
56bits -> 48bits 로 줄인다.
축약 전치 테이블은 아래와 같다.PC-2
가만보면 4,9,12... 등이 빠져서 8개의 비트가 빠진 것을 확인할 수 있다.
최종적으로 정리하면 이러하다.28bits 2개로 나누는 과정에 PC-1 거쳐야함! 이렇게 나온 K1 값을 통해서
RET0 ⊕ K1 을 최종적으로 진행한다.
5. S-Box 대입을 통한 축약
4의 과정에서 나온 값은 결과적으로 48bits이다.근데 우리가 계속하여 사용해야할 단위인 Ln과 Rn은 32bits여야하므로축약 과정을 한번 더 거쳐야한다.그러기 위해서 S-Box를 사용하게 된다.48bits인 4의 과정에서 나온 값을 6bits * 8 로 만들어주고6bits의 값을 순서대로 나열한다면 b0, b1, b2, b3, b4, b5가 된다.S-Box를 사용하여 4bits로 만들어줘야한다.
https://www.oreilly.com/library/view/computer-security-and/9780471947837/sec9.3.htmlComputer Security and Cryptography
9.3 THE DES S-BOXES, P-BOX, AND INITIAL PERMUTATION (IP) Tables 9.4 to 9.11 specify the seven DES S-boxes, each with a 6-bit input (x0, x1, … - Selection from Computer Security and Cryptography [Book]
www.oreilly.com
해당 링크는 48bits = 6bits * 8 일때8개의 6bits들을8개의 4bits들로 바꿔주는 S-Box 8개 이다.
b0b5로 2진수로 나타내면 0~3의 수
b1b2b3b4로 2진수로 나타내면 0~15의 수를 나타낼 수 있다.
그렇게 행과 열을 각각 S-Box에 대입하여 값을 4bit(0~15)로 나타낼 수 있다.
위의 사진을 보면 값들이 0~15에 존재하는 값들로만 이루어진 것을 볼 수 있다.
6. PTable을 이용한 전치 과정 + ⊕ (XOR) 연산
S-Box(0)을 이용하여 만들어낸 32bits의 값을 위의 pdf링크의 PTable(전치 테이블)로 한 번 전치해준다.전체적인 연산과정은 이러하다.
사진은 부분적으로 8개의 6bits중 첫번째의 6bits를 4bits로 바꾸는 과정을 표현한 것이다.
지금까지 PT 테이블을 통해 만들어낸 32bits와 L0의 32bits를 ⊕ (XOR) 연산해준 값이 R1이 된다.
7. 1~6 과정을 16번 반복
결과적으로 축약한 내용인 위의 사진을 다시 보여주겠다.앞서 설명한 과정을 16라운드 반복한다
8. Initial Permutation Reversed 과정
Initial Permutation Reversed 는 단순하게 생가해서 처음에 초기 전치의 역함수 관계의 전치 테이블이다.그래서 IP-1 으로도 표현이 가능하다.
Initial Permutation Reversed 를 통해 전치를 마치면
최종적으로 완성된 암호문이 되는 것이다.근데 이거 R16이 아니라 L16이여야하는듯? https://nayawoong-e.tistory.com/4
[암호학] DES (Data Encryption Standard)
DES (Data Encryption Standard)미국의 표준 암호 알고리즘 대칭키 암호로 암호화 및 복호화 키가 동일 블록 단위 암호화 / 복호화DES의 개요블록 크기 : 64비트64비트 평문 블록 → 64비트 암호문 블록평문
nayawoong-e.tistory.com
https://velog.io/@chanyoung1998/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EC%9D%B4%EB%A1%A0DES
velog
velog.io
참고한 분들의 포스팅 글들이다.