Home

오늘의 기억

[보안] 스트림 암호 (Stream Cipher)


스트림 암호 (Block Cipher)

스트림 암호는 대칭 키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성 된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻는다.


장점

  • 하드웨어 구현이 간편하다.
  • 블록 암호화보다 암복호화 속도가 빠르다.
  • 무선 통신, 음성, 영상 스트리밍 등 실시간으로 이루어지는 환경에서 주로 사용된다. (대표적으로 RC4)
  • 암호문이 1비트가 왜곡되면 평문도 1비트만 왜곡된다.

단점

  • 블록 암호화보다 보안이 취약하다.
  • 1비트씩 암호화 하기 때문에 하드웨어적인 Shift register 방식을 많이 쓰고, 수학적 분석이 가능하다.

종류

스트림 암호는 안전성과 연계하여 생각할 때 두 가지 종류로 나눠진다.

동기식 스트림 암호 (Synchronous Stream Cipher)

동기식 스트림 암호는 난수열을 생성하기 위해 내부 상태(Internal state)를 유지하며, 이전 내부 상태에서 새로운 내부 상태와 유사난수를 얻는다. 또한 문자열의 암호화 및 복호화는 생성된 유사난수열과 입력값을 XOR하는 방식으로 이루어진다. 동기식 스트림 암호에서는 암호화 및 복호화 할 문자열에서 특정 위치 비트를 변경 할 경우 암호화 된 결과에서도 같은 위치 비트가 변경되며, 다른 위치의 비트는 변경되지 않는다. 따라서 암호화 문자열을 전송할 시 특정 비트가 다른 값으로 손상되었어도 복호화 시 다른 비트에는 영향을 미치지 않는다. 하지만 전송 오류에서 비트가 사라지거나 잘못 된 비트가 추가되는 경우 오류가 난 시점 이후의 복호화가 실패하게 되며, 따라서 전송 시에 동기화가 필요하다. 또한, 같은 암호화 키로 여러 입력 값을 사용할 수 있으면 이를 이용한 암호 공격(Crptanalysis)이 가능하다.

비동기식 스트림 암호 (Asynchronous Stream Cipher)

비동기식 스트림 암호는 난수열을 생성할 때 암호화 키와 함께 이전에 암호화 된 문자열 일부를 사용한다. 이 암호의 내부 상태는 이전 내부 상태에 의존하지 않는다. 따라서 암호화 문자열을 전송할 시에 일부 비트가 값이 바뀌거나, 혹은 비트가 사라지고 추가되는 오류가 발생하여도, 일부분만이 복호화에 실패하며 그 이후에는 다시 정상적인 복호화 값을 얻을 수 있는 자기 동기성을 가진다. 따라서 비동기식 스트림 암호는 자기 동기(Self-Synchronous) 스트림 암호로 부르기도 한다.


같이 보기

20190523 Charyum.Park