본문으로 바로가기

스트림 암호(Stream Cipher) #A5/1

category Study/crypto 2018. 4. 22. 18:09


스트림 암호(Stream Cipher)란?


대칭키 암호 중 하나로, 키 스트림을 이용한다. 이는 구현이 간편하여 하드웨어에 무리를 주지 않고 속도도 빨라 무선 통신 등의 환경에서 사용된다.




A5/1란?


GSM 휴대폰 체계에서 주로 사용되는 3개의 시프트 레지스터로 동작하는 스트림 암호화 방식중 하나이다.


3개의 시프트 레지스터는 다음과 같다


X 레지스터 : 19bit

Y 레지스터 : 22bit

Z 레지스터 : 23bit


A5/1은 위의 3개의 레지스터를 이용하여 키스트림을 형성한다. 아래를 참고하자


 

[0]

[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

[9]

[10]

[11]

[12]

[13]

[14]

[15]

[16]

[17]

[18]

[19]

[20]

[21]

[22]

X

0

1

0

1

1

0

0

0

1

0

1

0

1

0

1

1

1

1

0





Y

0

1

0

0

1

0

0

0

0

1

0

1

1

1

0

1

1

0

1

1

1

0


Z

1

1

1

0

1

0

1

1

0

0

0

1

0

1

1

1

0

1

0

1

0

1

1


이렇게 3개의 시프트 레지스터 값을 임의로 정해주었다.


색칠되어있는 X[8], Y[10], Z[10] 이 세가지의 값이 시프트 기준이라고 생각하면 된다. 세개의 값을 다수결 함수를 통해 기준을 설정한다. 3개중 2개 이상인 값이 기준이 된다. 예를들면 0,0,1 이면 0이 기준이 되고, 1,0,1 이면 1이 기준이 되는것이다.


이제 이 기준과 X[8], Y[10], Z[10]을 각각 비교하여 해당 레지스터에 Shift-Right연산을 진행할 것인지 판단한다. 만약 기준과 다른 값이라면 연산을 진행하지 않고, 기준과 같은 값이라면 다음과 같은 과정을 통해 연산을 진행한다.


X의 경우, X[13] X[16] X[17] X[18] 의 각 값을 XOR

Y의 경우, Y[20] Y[21] 의 각 값을 XOR

Z의 경우, Z[7] Z[20] Z[21] Z[22] 의 각 값을 XOR


위의 계산값을 저장한 후에 Shift-Right 연산을 진행하고, 저장했던 값을 시프트 연산과정에서 비어있게 되는 0번째 인덱스에 넣는다. 시프트 연산을 통해 손실되는 데이터의 정보를 담고 있기 때문에 중요한 요소가 된다.


시프트 연산이 완료되었다면 각 레지스터의 마지막 인덱스인 X[18] Y[21] Z[22] 의 값을 XOR연산한 값이 키 스트림의 한 비트가 된다.




이 과정을 반복할 때마다 키 스트림의 비트수가 하나씩 증가한다. 키 스트림을 평문과 XOR연산을 하게되면 암호문이 나온다.







'Study > crypto' 카테고리의 다른 글

블록암호(Block Cipher) #페이스텔(Feistel)  (0) 2018.04.22
스트림 암호(Stream Cipher) #RC4  (2) 2018.04.22
암호분석(Crytanalysis)  (0) 2018.04.22
기초 암호 시스템(Basic Crypto System)  (0) 2018.04.21
암호체계(Crypto System)  (0) 2018.04.21