네트워크보안에센셜

Chapter 02. 대칭 암호와 메시지 기밀서 - 2.4 스트림 암호와 RC4

영차영차33 2020. 9. 10. 18:57

Chapter 02. 대칭 암호와 메시지 기밀성

2.4 스트림암호와 RC4

 

□ 스트림 암호 구조

ㅇ 전형적인 스트림 암호는 한 번에 평문 1Byte(8bit)씩 암호화 

 

스트림 암호 구조

  1. 의사 랜덤 바이트 생성기에 하나의 키(K)를 입력으로 사용한다. 
  2. 의사 랜덤 바이트 생성기는 랜덤 함수 키스트림(k)을 생성한다. 
  3. 평문 메시지는 생성된 키스트림과 한 바이트 씩 XOR 연산된다. 

[Example]

<암호화> (평문) 11010100 ⊕ (키스트림) 01001010 = (암호문) 10011110

<복호화> (암호문)10011110 (키스트림) 01001010 = (평문) 11010100

 

ㅇ 스트림 암호 설계 시 고려사항

  1. 암호열의 주기*가 길어야 한다.
  2. 키스트림은 반드시 진성랜덤스트림의 특성에 가능하면 근사하도록 해야 한다. 
  3. 키 길이는 충분히 길어야 한다. 최소 128bit 이상이어야 한다. 

* 암호열의 주기 : 의사 랜덤 수 생성기에서 사용하는 함수는 궁극적으로는 반복적으로 나타나는 비트스트림을 생성해내는데 그 반복되는 주기를 말한다. 

 

 

o 스트림 암호의 장점

  •  속도가 블록 암호보다 빠르다.
  • 블록 암호에서 사용하는 코드보다 적은 양의 코드를 사용하여 구현할 수 있다. 
  • 동등한 길이의 키를 사용할 경우 블록암호만큼의 보안성을 유지할 수 있다. 

o 스트림 암호의 단점 : 키를 재사용할 수 없다.

  • 두 개의 평문을 동일한 키를 사용하여 암호화 하는 경우 손쉽게 복호화 가능하다. 
  • 두 개의 암호문 스트림을 XOR 시키면 평문간의 XOR 값과 같아진다. 
    P1
    ⊕K = C1, P2⊕K = C2
    C1
    ⊕C2 = P1⊕K⊕P2⊕K = P1⊕P2

o 스트림 암호와 블록 암호의 쓰임새

  • 데이터 통신 채널이나 브라우저/웹 링크와 같이 데이터스트림을 암·복호화 시 스트림암호가 적절
  • 파일 전송,

 

 

□ RC4

  • SSL/TLS 표준 및 무선네트워크 암호화(WEP, WPA) 사용
  • 길이가 1바이트 ~ 256바이트인 다양한 키를 사용하여 상태 벡터 S를 치환하여 초기화한다. 

o RC4 알고리즘 구조 

 

<S의 초기화>

 ① S벡터를 S[0] ~ S[255]에 0~255까지 같은 값을 오름차순으로 정렬한다. 

 ② 임시벡터 T를 생성한다. 

 ③ 키 입력값 K를 입력받는다. K의 길이가 256이 아니라면 키의 길이를 Keylen 바이트라고 한다.  

 ④ K를 keylen 만큼 T가 채워질 때까지 집어넣는다. 

 ex) K = 234 
     T[0]=2 
     T[1]=3 
     T[2]=4 
     T[3]=2 
     T[4]=3 
     T[5]=4 
     . 
     . 
     . 
     T[256]=3

 

 ⑤ T를 사용해서 아래 코드와 같이 S의 초기 치환을 만든다. 

  for i = 0 to 255 
  j = j + S[i] + T[i] 
  Swap(S[i], S[j]) 

S에 사용된 수식은 오직 치환이기 때문에, 0~255 숫자를 모두 다 가졌으며 순서만 바뀐 초기 S 값이 완성되었다. 

 

<스트림 생성>

S벡터가 초기화 된 후에는 입력키 K는 더 이상 필요하지 않다. 

다음 코드와 같이 k 값을 구한다. 

  i=(i+1)mod256
  j=(j+S[i])mod256
 Swap(S[i], S[j])
 t= (S[i] + S[j])mod256
 k=S[t] 

<바이트 XOR>

k를 평문의 다음 바이트와 XOR 하여 암호화한다. 

복호화 시에는 k를 암호문의 다음 바이트에 XOR 한다.