스트림 암호
스트림 암호는 입력 요소를 연속적으로 처리하여 지속적으로 한 번에 한 요소씩 배출한다.
비록 블록 암호가 훨씬 많이 사용되기는 하지만, 경우에 따라서는 스트림 암호가 더 적합하기도 하다.
스트림 암호 구조
일반적으로 스트림 암호를 설계할 때에는 한 번에 한 비트씩 처리하거나 한 바이트보다 큰 자료를 처리할 수 있도록 만든다.
전형적인 스트림 암호는 한 번에 평문 한 바이트씩 암호화한다.
이 구조에서 랜덤한 8비트 숫자의 스트림을 만들어내는 의사 난수 비트 생성기에 하나의 키를 입력으로 사용한다.
의사 난수 스트림은 입력되는 키를 알지 못하면 예측할 수 없는 스트림이며, 한 번에 한 바이트씩 평문 스트림과 비트별로 XOR 연산된다.
즉, 평문과 키 스트림을 XOR함으로써 암호화와 복호화가 가능하다.
또한 전형적으로 한 번에 평문 한 바이트씩 암호화를 한다
스트림 암호의 장점
스트림 암호는 동등한 길이의 키를 사용할 때 블록 암호 만큼의 보안성을 유지할 수 있다.
- 속도 면에서 블록 암호보다 월등히 빠르다
- 블록 암호에서 사용하는 코드보다 더 적은 양의 코드를 사용한다
스트림 암호화 주기
의사 랜덤 바이트 생성기(키 스트림 생성기)에 의해 키 스트림이 생성된다.
이 때 키 스트림이 반복 되는 패턴의 길이를 스트림 암호화 주기라고 한다.
언제 스트림 키가 동일한 패턴으로 다시 시작 되는지를 나타내는 지표이다
암호화 주기가 길어질수록, 스트림 암호의 보안성이 향상됩니다. 주기가 짧으면 공격자가 패턴을 찾아내기 쉽기 때문이다.
따라서 스트림 암호를 설계할 때에는 암호화 주기를 가능한 한 길게 만드는 것이 중요하다.
스트림 암호 설계시 주의 사항
- 암호열은 반드시 주기가 커야 한다.
- 의사 난수에 의해 생긴 반복되는 결정 비트스트림의 반복 주기가 길어질수록 해독하기 더 어려워진다.
- 키 스트림은 반드시 진성 난수 스트림의 특성에 가능한 한 근사하도록 한다.
- 즉, 키 스트림 속에 0과 1의 개수가 거의 동일하도록 해야만 한다.
- 키의 길이가 충분히 길어야 한다.
- 현재 기술을 감안했을 때 키의 길이는 적어도 128비트가 되어야 한다.
블록 암호와 스트림 암호를 선택하는 기준, 어느 곳에 사용하면 더 유리할까?
스트림 암호는 속도가 빠르고 코드가 더 간결하기 때문에, 실시간 애플리케이션, 통신 시스템, 데이터 스트리밍 등에서 사용하기에 적합하다.
반면 블록 암호는 데이터 무결성 및 데이터 블록의 다양한 용도에 적합하며, 저장된 데이터에 대한 암호화에 더 적합하다.
결국 선택은 애플리케이션의 요구 사항과 상황에 따라 달라진다.
레퍼런스
- [[Notes/Major/블록 암호|블록 암호]]
- [[Notes/의사 난수|의사 난수]]
'Computer Science > Security' 카테고리의 다른 글
암호 블록 운용 모드 (0) | 2023.04.02 |
---|---|
RC4란 무엇인가 (0) | 2023.04.02 |
난수란 무엇인가 (0) | 2023.03.31 |
의사 난수 (0) | 2023.03.30 |
AES (0) | 2023.03.29 |