it-swarm-korea.com

스트림 대 블록 암호의 장단점

Blowfish, AES, RC4, DES 및 Seal과 같은 암호화 알고리즘은 두 가지 범주의 암호 중 하나로 구현됩니다. 암호 유형에 대한 장점/단점은 무엇입니까?

66
Eric Warriner

둘 다 대칭 암호 인 반면 스트림 암호는 "무한"암호 해독 키 스트림을 생성하고 한 번에 1 비트 또는 바이트를 암호화하는 데 사용합니다 (일회성 패드와 유사). 블록 암호는 더 큰 데이터 청크에서 작동합니다 (예 : 블록) 한 번에 추가 보안을 위해 블록을 결합합니다 (예 : CBC 모드의 AES).

  • 스트림 암호는 일반적으로 블록보다 빠르지 만 자체 가격이 있습니다.
  • 블록 암호는 일반적으로 더 많은 양의 데이터를 처리하고 이전 블록에서 "이월"하기 때문에 더 많은 메모리가 필요합니다. 반면 스트림 암호는 한 번에 몇 비트 만 작동하기 때문에 상대적으로 메모리 요구 사항이 낮습니다 ( 임베디드 장치, 펌웨어 및 하드웨어와 같은 제한된 시나리오에서 구현).
  • 스트림 암호는 올바르게 구현하기가 더 어렵고 사용량에 따라 약점이되기 쉽습니다. 원칙은 일회용 패드와 유사하기 때문에 키 스트림에는 매우 엄격한 요구 사항이 있습니다. 반면에, 그것은 일반적으로 까다로운 부분이며 예를 들어 오프로드 할 수 있습니다. 외부 상자.
  • 블록 암호는 한 번에 전체 블록을 암호화하기 때문에 (또한 가장 권장되는 "피드백"모드가 있음) 전송시 노이즈에 더 취약합니다. 즉, 데이터의 일부를 엉망으로 만드는 경우 나머지는 아마도 회복 불가능한. 스트림 암호를 사용하는 경우 바이트는 다른 데이터 청크 (대부분의 암호/모드)에 연결하지 않고 개별적으로 암호화되며 종종 회선 중단을 지원합니다.
  • 또한 스트림 암호는 무결성 보호 또는 인증을 제공하지 않지만 일부 블록 암호 (모드에 따라 다름)는 기밀성 외에도 무결성 보호를 제공 할 수 있습니다.
  • 위의 모든 이유로 인해, 스트림 암호는 일반적으로 네트워크 스트림과 같이 데이터의 양이 알려지지 않았거나 연속적인 경우에 가장 좋습니다. 반면에 블록 암호는 파일, 데이터 필드 또는 요청/응답 프로토콜 (예 : 전체 메시지의 길이가 이미 알려진 HTTP와 같은)과 같이 데이터 양이 미리 알려진 경우 더 유용합니다. 처음.
48
AviD

블록 암호 는 고정 된 비트 수의 시퀀스 ( "블록"이라고 함)의 값에 대한 키 종속 순열을 구현하는 다목적 알고리즘입니다. 많은 종류의 암호화 프로토콜에서 다양한 역할에 사용할 수 있습니다. 그러한 역할 중 하나는 긴 데이터 스트림의 대량 암호화입니다. 이러한 것을 달성하기 위해, 블록 암호는 적절한 작동 모드 (일명 "체인 모드")와 함께 사용되어야하며, 전통적인 모드는 CBC이고 최신의 최신 모드는 CTR입니다.

스트림 암호 는 긴 데이터 스트림의 대량 암호화를위한 특수 알고리즘입니다. 아이디어는 블록 암호의 다양성을 잃어보다 효율적인 알고리즘 (즉, 데이터를 암호화하는 것 faster)을 만들 수 있다는 것입니다.

스트림 지향 암호화 모드를 사용하는 두 블록 암호와 스트림 암호는 적절한 고유/랜덤을 충분히 갖지 않고 동일한 키를 두 개의 개별 스트림에 대해 두 번 사용하면 보안 문제가 발생할 수 있습니다. 초기화 벡터 =. CBC 암호화의 경우, IV는 각 새 메시지에 대해 블록과 동일한 크기의 균일 한 임의의 새로운 비트 시퀀스 여야합니다. 좋은 스트림 암호도 IV를 허용합니다. RC4 라고하는 기존의 스트림 암호는 IV가 적습니다 (사양에 IV를 삽입 할 수있는 위치 또는 방법이 명시되어 있지 않음).

보다 새롭고보다 안전한 스트림 암호에 대해서는 eSTREAM 포트폴리오 를 참조하십시오. 이 알고리즘은 많은 암호화 전문가들에 의해 다소 철저한 분석을 거쳤으며 "quite secure"로 간주됩니다.

스트림 암호는 0의 긴 바이트 시퀀스를 암호화하여 Pseudorandom Number Generator 로 변환 할 수 있습니다. 실제로 많은 스트림 암호는 PRNG를 통해 내부적으로 작동하여 긴 키 시퀀스 의사 난수 바이트 시퀀스를 생성하며, 이후에 비트 단위 XOR에 의해 데이터와 결합하여 암호화 (또는 암호 해독) 할 수 있습니다. 0 바이트를 암호화하는 것은 XOR를 생략하는 것과 동일하므로 스트림 암호는 종종 사용자 정의 PRNG로 사용됩니다.

26
Thomas Pornin

이전에 언급되지 않은 스트림 암호의 장점 중 하나는 패딩이 필요하지 않다는 것입니다 (블록 암호는 완전한 블록에서 작동하므로 데이터가 충분하지 않으면 어떻게 든 더 생성해야합니다). 그리고 놀랍게도 (암호화는 머피가 어디에나있는 분야 임), 패딩은 예를 들어 Practical Padding Oracle Attacks 에 예시 된 것처럼 잘못 수행 될 수 있습니다.

또한 블록 암호의 보안은 작동 모드에 따라 크게 달라 지므로 ECB가 여기저기서 계속 사용되는 것을 보았으며 전혀 암호가없는 것보다 낫지는 않습니다.

기본적으로 하나는 다른 것보다 낫다고 말할 수 없으며, 보안 판단을 내리기 위해 완전한 암호화 시스템을 살펴 봐야합니다.

9
Bruno Rohée

스트림 암호는 일반 비트 데이터를 임의의 비트 스트림으로 암호화합니다 (일반적으로 쉽게 뒤집을 수 있기 때문에 XOR으로)). 키) 암호화합니다.

블록 암호는 키를 기반으로 동일한 변환으로 한 번에 한 블록 씩 일반 텍스트 데이터를 암호화합니다. 따라서 128 비트 데이터가 있으면 암호는 데이터를 블록 (예 : 32 비트의 4 블록)으로 나누고 4 개의 암호화 된 블록을 얻는 모든 블록에 동일한 변환을 적용하면 최종 암호가 형성됩니다.

물론이 블록 암호로 인해 관련된 하드웨어 복잡성 측면에서 사용하는 것이 더 안전하지만 비용이 많이 듭니다. 스트림 암호는 더 빠르고 "빠르지 만"잘못 구현 된 경우 보안 문제 에 취약 할 수 있습니다.

1
gbr