네트워크보안에센셜

2.2 대칭 암호 알고리즘, 2.3 랜덤넘버와 의사랜덤넘버

영차영차33 2020. 9. 9. 16:26

2.2 대칭 암호 알고리즘 

 

□ DES (DEA 알고리즘) 

 o 블록 길이 64bit, 키 길이 56bit, 16라운드, 16개의 서브키로 구성

 o 강도 : DES암호 알고리즘은 오랜 시간 동안 약점을 찾지 못했으나, 키 기이가 56bit라서 깰 수 있다. 

  - EFF가 만든 DES Cracker에서 전수공격으로 DES 깨짐 

  -> 128bit 키를 사용하면 전수공격에도 깨지지 않는 알고리즘이 됨

 

 

 3DES

 o 3개의 키를 사용하고 DES 알고리즘을 세 번 사용하는데 암호-복호-암호(EDE) 순서를 따른다.

  ->  C=E(K3, D(K2, E(K1, P)))

 o 복호화는 단순히 키의 순서만 바꿔서 적용한다. 

  -> P = D(K1, E(K2, D(K1, C)))

 o 3DES는 56bit의 키 3개로 168의 키 길이를 갖는다. (K1=K3인 경우도 가능 이 경우는 두 개의 키로 112q비트)

 

 o 3DES를 위한 지침(FIPS 46-3)

   - 3DES는 FIPS가 승인하는 대칭 알고리즘

   - 단일 56bit DES는 기존 시스템에서만 사용 허용, 새 시스템은 반드시 3DES를 사용하여야 함 

   - DES를 사용하는 정부 기관 시스템은 3DES를 사용하는 시스템으로 바꿀 것 

   - 당분간은 3DES와 AES가 FIPS에서 승인하는 알고리즘으로 함께 사용되다가 점차 AES로 전환될 것 

 

 o 3DES의 장점 

  1. 168bit의 키 길이로 DES 취약점 극복
  2. 3DES의 알고리즘은 DEA알고리즘을 사용하여 기존 DES와 같음(수년간 검증된 알고리즘) 

 o 3DES의 약점 

  1. 속도가 느리다
  2. 63bit 블록이 작아서 안전성을 위해 큰 더 큰 블록의 알고리즘 필요 => AES 등장

 

□ AES

  • 128bit 블록, 키 길이는 128 or 192 or 256bit 사용(128bit가 가장 보편적), 10라운드
  • Fiestel 구조가 아님

이미지 출처 : 위키백과

o AES 구조의 특징

  1. Feistel 구조를 사용하지 않고 각 라운드에서 대체와 치환을 이용해서 데이터 블록 전체를 병렬 처리
  2. 입력으로 사용하는 키를 44개의 32비트 워드 배열로 확장, 4개의 서로 다른 워드를(128bit) 각 라운드에서 라운드 키로 사용
  3. 바이트 대체, 행 이동, 열 섞기, 라운드 키 더하기(XOR), 4가지 단계를 이용하는데 한 번의 치환과 세 번의 대체의 단계를 거침
  4. 오직 라운드 키 더하기 단계에서만 키를 사용함, 라운드 키 더하기 단계는 그 자체가 보안을 강화하지 못하지만 다른 세 단계와 같이 뒤섞는 역할을 하여 보안이 강화됨 
  5. 대부분의 블록 암호처럼 복호 알고리즘에서는 확장키를 뒤집어쓰지만, 복호 알고리즘과 암호 알고리즘이 동일하지 않음
  6. 암호와 복호의 마지막 라운드는 오직 세 단계로 구성됨. 이 특성은 복호화할 경우 역으로 작동하기 위해서 필요함

 

2.3 랜덤 넘버와 의사 랜덤 넘버 

□ 랜덤 넘버의 필요성

  • 공개키 암호 알고리즘의 키 생성 시 사용
  • 대칭 스트림 암호 키 생성에 사용
  • 임시 세션 키 용 대칭키 생성 시 사용(TLS, WIFI, 전자메일, IP 등 응용분야에 사용)
  • Kerberos처럼 키 배포 시 랜덤 넘버를 사용하여 재전송 공격을 막기 위한 핸드 셰이킹에 사용

□ 랜덤 넘버의 두 가지 조건

o 무작위성

  • 균등 분포 : 수열의 비트 분포가 반드시 균등해야 함. 1과 0이 비트 열상에 나타나는 빈도가 거의 비슷해야 함
  • 독립성 : 수열에서 추출한 어떠한 부분 수열도 다른 수열로부터 추론할 수 없어야 함

o 예측 불가능성

  • 진성 랜덤 넘버 : 수열에 나타나는 모든 수가 통계적으로 수열 안의 다른 수와 독립적이기 때문에 예측 불가능

=> 완전히 독립성을 갖춘 수열을 증명하거나 진생 랜덤 넘버만으로 사용할 수는 없으므로 상대적으로 랜덤 한 수를 사용 

=> 의사 랜덤 넘버를 사용

 

 

□ 랜덤 넘버 생성기

o TRNG : 진성 랜덤 넘버 생성기 

  • 입력 값으로 실제 랜덤 한 정보 입력(이를 엔트로피 소스라 함)
  • 엔트로피 소스는 키 입력 타이핑 패턴, 디스크 전기 작용, 마우스 움직임 등 예측하기 어려운 물리적 자극을 사용
  • 유사한 값들을 단순히 변화시켜 입력으로 사용하여 바이너리를 출력 

o PRNG : 의사 랜덤 넘버 생성기 

  • 고정된 값(종자) 사용
  • 입력값이 같으면 출력 값이 같은 결정적 알고리즘을 사용하여 비트열 생성
  • 공격자가 알고리즘과 종자값을 알면 출력 비트 스트림을 알 수 있음

o PRF : 의사 랜덤함수 

  • 입력값을 종자에 추가하는 방식

 

 

□ PRNG 알고리즘 설계

  • 특정 목적 알고리즘 : 의사랜덤 비트 스트링을 생성하기 위해서 특정하게 그 목적만을 위해 설계된 알고리즘 
  • 기존 암호 알고리즘을 이용한 알고리즘 : 암호 알고리즘은 랜덤화 된 입력 효과를 가지고 있다. 다음 세 가지 범주의 암호학적 알고리즘을 통해 PRNG를 설계할 수 있다.  
  • -> 대칭 블록 암호, 비대칭 암호, 해시함수와 메시지 인증 코드