개발자 끄적끄적

RC4, A5/1 본문

정보보안

RC4, A5/1

햏치 2023. 5. 12. 02:39

<RC4>
- RC4는 바이트 단위 스트림 암호로서, 평문 1바이트(8비트)와 키 1바이트가 XOR되어 암호문의 1바이트를 생성한다

- 상태(State)
  - RC4는 상태 개념을 사용한다
  S[0]. S[1], S[2], ... , S[255]

- 초기화(Initialization) //S값과 K값는 256
  - 초기화는 2단계로 수행된다
  for(i=0 to 255)
{
  S[i] <- i
  K[i] <- Key[i mod KeyLength]
}

j<-0 
for(i=0 to 255)
{
  j<-(j+S[i]+K[i])mod 256
  swap(S[i], S[j]
}

- 키 스트림 생성(Key Stream Generation)
  - 키 스트림의 키는 한 개씩 생성
   i<-(i+1) mod 256
  j<-(j+S[i])mod 256
  swap(S[i], S[j])
  k<-S[(S[i]+S[j])mod256] //K는 사용자가 입력한 키 값



<A5/1>
- 휴대 전화 통신을 위한 네트워크인 Global System for Mobile Communication(GSM)에서 사용된다

- Key stream generator(Secret Key 64bits) -> 1bit -> 288bits(Key stream buffer) -> 228bits(Plaintext frame) XOR 288bits(Key stream buffer) ->228bits(Ciphertext frame)

- 키 생성기(Key Generator)
  - A5/1은 18, 22, 23개의 셀을 갖는 세 개의 LFSR을 사용한다
  - LFSR 1 : 19bits(x^19 + x^5 + x^2 + x + 1)
 - LFSR 2 : 22bits(x^22+x+1)
 - LFSR 3 : 23bits(x^23 + x^15 + x + 1)

- 초기화(Initialization)
  - 1. 세 개 LFSR의 모든 셀을 0으로 초기화
   - 2.다음 코드에 따라 레지스터의 값을 64비트 키로 섞는다
  for(i=0 to 63){
  Exclustive-or K[i] with the leftmost bit in all three registers
  Clock all three LFSRs
  } 

  - 3. 22비트 프레임 넘버를 이용하여 이 과정을 반복
  for(i=0 to 21){
  Exclusive-or FrameNumber[i] with the leftmost bit in all three registers
  Clock all three LFSRs
  }

  - 4. 100 사이클 동안 전체 생성기를 클럭킹한다
            그러나 LFSR은 클럭은 Majority 함수를 이용
    for(i=0 to 99){
    Clock the whole generator based on the majority function
  }

  - 문제) 특정 시점에 클럭킹 비트가 1,0,1이다. 어떤 LFSR 클럭(이동)되는가?
    - 1=19bit, 0=22bit, 1=23bit 라고하면, majority함수의 결과값은 Majority(1,0,1)=1 -> 가장 많은 값(1)을 만족한다. 따라서 LFSR1과 LFSR3은 이동되고 LFSR2는 이동되지 않는다


- 암호화/복호화(Encryption/Decryption)
  - 키 생성기로부터 생성된 비트 스트림 암호문 프레임을 생성하기 위하여 평문프레임과 XOR하기 위한 288비트 키를 형성하기 위하여 버퍼에 저장된다
  - 암호화/복호화는 동시에 한 프레임에 대하여 수행된다



<기타(Other Issues)>
- 대칭기 블록이나 스트림 암호를 사용하는 환경은 또 다른 관점에서 논의가 필요하다



<키 관리(Key Management)>
- Alice와 Bob은 대칭키 암호를 이용하여 안전하게 통신을 하기 위하여 그들 사이에 비밀키를 공유하여야 한다
- 만약 커뮤니티에 n명의 구성원이 있다면, 각 구성원은 n-1명과 비밀 통신을 하기 위하여 비밀키가 필요하다
- 그러므로 총 n(n-1)/2개의 비밀키가 필요하다
- 대칭키 암호가 사용되는 환경에서의 또 다른 논점은 비밀키를 생성하는 방법이다
- 다양한 대칭키 암호는 다양한 사이즈의 키를 필요로 한다
- 키는 랜덤하게 선택되어야만 한다
- 이는 난수 생성기에 대한 필요성을 야기한다

'정보보안' 카테고리의 다른 글

현대 블록암호의 이용  (0) 2023.05.06
AES(Advanced Encryption Standard)  (0) 2023.04.29
라운드(round), DES  (0) 2023.04.17