CRYPTO

[crypto] Stage 3

chimita 2022. 8. 5. 02:16

AES (Advanced Encryption Standard)

  • 2001년에 새롭게 표준으로 선정된 블록 암호 알고리즘
  •  Vincent Rijmen, Joan Daemen이 제안한 Rijndael 구조
  • 기밀성을 위협하는 치명적인 취약점이 발견되지 않음
  • 현대에는 대칭키 암호 알고리즘을 사용할 때, 일반적으로 AES 사용

SPN (Substitution Permutation Network)

  • 곱 암호의 일종으로 S-Box를 사용하는 치환(Substitution)과 P-Box를 사용하는 순열(Permutation)을 여러 라운드에 걸쳐 반복
  • 페이스텔 구조와 달리 라운드마다 입력 전체에 라운드 함수 적용
  • 같은 수의 라운드를 사용할 때 SPN이 페이스텔 구조에 비해 두 배의 안전성

SPN 구조

AES 구조

- 라운드마다 128비트 크기의 블록을 암호화하는 블록 암호

- 키의 길이는 128, 192, 256비트 중 하나 선택

- 라운드 수는 키의 길이에 따라 10, 12, 14로 결정

- 블록을 4행 4열의 상태 배열(State)로 재구성

- 재구성된 입력에 대해 AddRoundKey 함수를 적용

- 마지막 라운드 전까지 매 라운드마다 SubBytes, ShiftRows, MixColumns, AddRoundKey 함수를 반복하여 적용

- 마지막 라운드에서는 MixColumns를 제외한 나머지 함수들만 적용

- AES의 라운드 함수들은 역함수가 존재

- 역함수를 이용하여 AES 복호화

AES Sbox


라운드 함수

 

SubBytes

  • State의 각 바이트를 S-Box를 참조하여 치환하는 함수
  • 바이트의 상위 4비트가 행, 하위 4비트가 열을 결정

 

ShiftRows

  • State의 각 행을 구성하는 바이트들을 쉬프트하는 함수
  • 유일하게 순열의 역할을 수행

 

 

MixColumns

  • 열 단위로 치환
  • 갈루아 필드 내에서 행렬 연산

 

 

AddRoundKey

  • 키 생성 함수(Key Schedule)로 생성된 라운드 키의 state를 각 바이트별로 XOR 연산
  • 복호화: XOR의 성질을 이용하여 동일한 키를 state에 XOR

 

Key Schedule

  • 입력된 키로부터 각 라운드에 쓰일 라운드 키 생성

DES (Data Encryption Standard)

  • 미국의 국가 안보국(National Security Agency, NSA)에서 IBM의 루시퍼 알고리즘을 개량하여 만든 대칭키 암호
  • 현대에는 DES에 대한 공격 기법이 많이 연구되어 DES를 더이상 블록 암호의 표준으로 사용하지 않음
  • 8바이트(64비트)를 한 블록으로 하는 블록 암호
  • 초기 순열(Initial Permutation, IP), 최종 순열(Final Permutation, FP), 페이스텔(Feistel) 구조의 16 라운드                      각 라운드에 사용되는 48비트의 키를 생성하는 키 생성 함수(Key Generation)로 구성

 

순열과 치환

  • 혼돈 성질을 만족하기 위해 치환 (Substitution) 사용
  • 확산 성질을 만족하기 위해 순열(Permutation) 사용
  • 순열과 치환을 여러 번 교차해서 반복 적용하면 혼돈과 확산의 성질 모두 만족
  • 치환이나 순열 같은 단순한 연산들로 한 라운드로 구성
  • 곱 암호(Product Cipher): 각 라운드를 여러 번 반복하여 암호학적 안전성을 확보하는 암호

 

페이스텔 구조 (Feistel)

  • 일반적으로 암호화를 구성하는 각 함수들에 역함수 존재
  • 페이스텔 구조를 사용하면 F가 복호화 과정에서 \oplus로 상쇄되므로 역함수가 존재 X
  • 암호화와 복호화의 구조가 동일하므로, 암호화에 사용한 라운드 키를 역순으로 입력하면 복호화
  • 비페이스텔 암호와 같은 안전성을 갖기 위해 두 배 정도 라운드를 사용해야한다는 단점

 

초기 순열 / 최종 순열 (IP / FP)

  • 시작할 때 초기 순열 수행 마지막에는 최종 순열 수행
  • 정해진 테이블을 이용하여 64비트 입력을 비트 단위로 전치
  • 테이블의 n번째 값이 m일 때, 출력의 n번째 비트는 입력의 m번째 비트
  • 초기 순열과 최종 순열은 서로 역관계

 

라운드 함수

  • 라운드 함수 F에는 오른쪽 블록만 입력 (입력 길이 32비트)
  • 확장 순열, 라운드 키 결합, 치환 테이블, 고정 순열로 구성

 

확장 순열과 라운드 키 결합

  • 확장 순열 : 입력을 비트 단위로 전치하는 동시에, 전체 길이를 48비트로 확장

  → 32비트의 입력값을 4비트씩 8개의 부분으로 나누고, 테이블을 참조하여 각각을 6비트로 확장

 

 

S-Box와 고정 순열

  • S-Box : 라운드 키 결합에서 출력된 48비트 결과 값을 32비트로 축소
  • S-Box로 길이를 축소하고 나면, 고정 순열(Straight P-Box)로 다시 비트 단위 전치

  →  4개의 행과 16개의 열로 이루어진 표를 사용

  → 표의 각 값은 4비트로 표현되는 수

 

 

 

키 생성 함수 (Key Scheduling)

  • 64비트의 입력을 받아 각 라운드에 필요한 48비트 라운드 키를 생성하는 함수
  • 패리티 비트 제거, 쉬프트, 압축 순열로 구성

 

패리티 비트 제거 (Parity Bit Drop)

  • 입력에서 패리티 비트를 제거하고, 남은 56비트에 순열을 적용하는 과정
  • 홀수 패리티 비트: DES의 비밀키에서 각 바이트의 가장 오른쪽 비트
  • 통신 중에 비트 반전이 일어나지 않았음을 보증하는 역할

  → 자신이 속한 바이트의 나머지 7비트에 대한 비트

  → 한 바이트를 이진수로 표현했을 때, 1의 개수가 홀수가 되도록 덧붙인 비트

 

 

쉬프트 (Shift)

  • 입력을 왼쪽 28비트와 오른쪽 28비트로 나누어 각각을 1비트나 2비트만큼 왼쪽으로 순환 쉬프트하는 과정
  • 1, 2, 9, 16 라운드 : 1비트, 나머지 라운드 : 2비트

 

압축 순열 (Compression P-Box)

  • 56비트의 입력을 48비트 길이로 압축하는 과정