Stream과 Block Cipher의 장단점

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

답변

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

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

댓글

  • 두 번째 글 머리 기호가 정확하지 않습니다. 이전 블록에서 " 이월 "으로 인한 메모리 차이는 무시할 수있을 정도이며 알고리즘 간의 메모리 차이보다 훨씬 작습니다 ( 예를 들어 내부 상태가 256 바이트 인 RC4를 일부 암시에서 내부 상태가 0 바이트 인 AES와 비교합니다. 마지막 글 머리 기호는 잘못된 구별을 도출하고 나쁜 조언입니다.
  • @ D.W. 두 번째 글 머리 기호는 " 일반적으로 말하면 "입니다. 일반적으로 그렇습니다 (하지만 엄격하게 정확하지는 않다는 점을 인정합니다).

li>

  • @DW 마지막 글 머리 기호에 대한 의견에 대한 근거가 있습니까? 잘못된 구분은 어디에 있으며 왜 이것이 나쁜 조언이라고 말합니까?
  • 예, 마지막 글 머리 기호에 대한 내 의견의 근거가 있습니다. 전반적으로 혼란스러워 보입니다. 블록 암호는 스트리밍 데이터에 적합합니다. 스트리밍 데이터에서 잘 작동하는 다양한 작동 모드는 예를 들어 CBC 모드, CTR 모드 등을 참조하십시오. 블록 암호는 데이터 양을 미리 알고있는 경우에만 제한되지 않습니다. 저는 ' 이름에도 불구하고 스트리밍 데이터 용 블록 암호보다 스트림 암호를 더 잘 고려해야하는 이유를 모릅니다.
  • D.W. 정확합니다 : Stream Cipher의 ' Stream '라는 단어는 키 스트림 (일반 텍스트와 결합 된 비트 스트림)이 있음을 반영합니다. 암호문을 생성합니다. 일반 텍스트 구성을 반영하지 않습니다. 분명히 이것은 후자가 일반적으로 암시되는 개발자와 엔지니어를 종종 혼동하는 세부 사항입니다. 블록 암호를 사용하여 스트리밍 일반 텍스트를 잘 조작 할 수 있습니다. 또한 종종 혼란스러운 점은 블록 암호가 적절한 작동 모드와 블록 크기가 원자 적 (예 : 1 바이트) 인 경우 스트림 암호로 사용될 수 있다는 것입니다.
  • Answer

    블록 암호 는 키를 구현하는 다목적 알고리즘입니다. 고정 된 비트 수의 시퀀스 인 값의 종속적 순열 ( “블록”이라고 함). 다양한 암호화 프로토콜에서 다양한 역할에 사용할 수 있습니다. 이러한 역할 중 하나는 긴 데이터 스트림의 대량 암호화입니다. 이러한 작업을 수행하려면 블록 암호를 적절한 작동 모드 ( “체인 모드”라고도 함)와 함께 사용해야하며, 기존 암호는 CBC이며 최신 유행 모드는 CTR입니다.

    스트림 암호 는 긴 데이터 스트림의 대량 암호화를위한 특수 알고리즘입니다. 아이디어는 블록 암호의 다양성을 상실함으로써보다 효율적인 알고리즘 (즉, 데이터를 더 빠르게 암호화하는 것)을 생성 할 수 있다는 것입니다.

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

    새롭고 더 안전한 (그리고 더 빠른) 스트림 암호는 eSTREAM 포트폴리오 를 참조하세요. 이러한 알고리즘은 많은 암호 학자에 의해 다소 철저한 분석을 거쳤으며 “매우 안전한”것으로 간주됩니다.

    스트림 암호는 의사 난수 생성기로 변환 될 수 있습니다. 값이 0 인 긴 바이트 시퀀스를 암호화합니다. 실제로 많은 (전부는 아님) 스트림 암호가 PRNG가되어 긴 시퀀스의 키 종속 의사 랜덤 바이트를 생성하여 내부적으로 작동하며, 이는 이후에 암호화 (또는 해독) 할 데이터와 결합 (비트 XOR에 의해)되므로 0 바이트를 암호화하는 것은 XOR을 모두 생략하는 것과 같습니다. 따라서 스트림 암호는 종종 사용자 지정 PRNG로 사용됩니다.

    댓글

    • 일반적으로 더 안전한 (스트림 대 블록)을 언급하는 것을 잊었습니다.
    • 그 주장이 일반적인 의미가 아니기 때문에 잊지 않았습니다. 블록 암호와 스트림 암호 모두 제대로 적용되고 구조적 약점이없는 경우 ' 적절한 보안을 제공 할 수 있습니다.
    • " 블록 암호의 다양성 "이 부분에 문제가 있습니다. 블록 암호를 본질적으로 더 다용도로 만드는 것은 무엇입니까? 블록 암호는 스트림 (예 : TLS) 또는 패킷 화 된 데이터 (예 : ESP)를 암호화하고 인증하는 데 사용할 수 있으며 스트림 암호 (예 : TLS 또는 DTLS)에 대해서도 동일합니다. 스트림 암호가 " 자연스럽고 " (예 : 오디오 암호화) 또는 블록 암호가 더 자연스럽고 " (예 : 디스크 암호화)하지만 합리적인 애플리케이션에서 큰 차이가 보이지 않습니다. '

    답변

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

    또한 블록 암호의 보안은 작동 모드에 따라 크게 달라집니다. 여전히 여기 저기에서 사용되는 ECB를 볼 수 있습니다. t all.

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

    댓글

    • 첫 번째 단락 : 패딩이 필요하지 않은 블록 암호에 대한 작동 모드가 ' 있습니다. 예 : CTR 모드. 따라서 이것은 스트림 암호 고유의 장점이 아닙니다. 하지만 마지막 단락에 +1하십시오. 잘 말씀하셨습니다!
    • 글쎄요 ' CTR과 OFB가 블록 암호에서 스트림 암호를 만드는 구조라고 말하겠습니다. ' 블록 암호의 또 다른 장점입니다. 스트림 암호 나 단방향 해시와 같은 다른 것들을위한 빌딩 블록으로 쉽게 사용할 수 있습니다. 스트림 암호는 그다지 다재다능하지 않습니다.
    • 일반적으로 더 안전한 것을 언급하는 것을 잊었습니다 (스트림 대 블록).
    • 자연적으로 더 안전한 것은 없습니다. ' 실제로 사용하는 방법입니다.

    답변

    Stream Ciphers는 일반 텍스트 데이터를 암호화합니다. 임의의 비트 스트림 (일반적으로 쉽게 되돌릴 수 있기 때문에 XOR 사용). 128 비트 데이터가있는 경우 128 비트 psedurandom strem (사용자 키)을 사용하여 암호화합니다.

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

    Of 물론이 Block Cyphers는 하드웨어 복잡성 측면에서 사용하기에 더 안전하지만 비용이 많이 듭니다. 스트림 암호는 더 빠르고 “저렴”하지만 잘못 구현 된 경우 보안 문제 에 취약 할 수 있습니다.

    댓글

    • 마지막 단락에는 여러 가지 사실적인 오류가 있습니다. 블록 암호는 일반적으로 더 안전하지 않으며 하드웨어에서 반드시 더 나쁘지도 않습니다. 스트림 암호가 반드시 더 빠르거나 저렴하지는 않습니다.
    • @DW : 그럼에도 불구하고 스트림 암호는 보통 블록 암호보다 빠르거나 저렴합니다. 그 이유는 ' s the deal : 성능 향상을 위해 거래 된 덜 다재다능한 알고리즘. AES / CTR보다 느리고 비용이 많이 드는 스트림 암호는 전혀 사용되지 않습니다.
    • 일반적으로 더 안전한 (스트림 대 블록)을 언급하는 것을 잊었습니다.

    답변

    데이터 (암호화 할 항목)는 일반적으로 스트림으로 제공됩니다. 이를 암호화하려면 스트림 암호, 즉 데이터 스트림에 사용하기에 적합한 암호화 알고리즘을 사용해야합니다. 스트림은 임의의, 가변적 또는 지정되지 않은 길이의 비트 (또는 바이트) 시퀀스입니다.

    지금까지 우리가 발명 한 최고의 암호는 일반적으로 블록 암호입니다. 블록 암호는 고정 된 크기의 단일 데이터 블록을 암호화 할 수 있습니다. 그리고 우리 주변의 증거로 볼 때 스트림 암호보다 좋은 블록 암호를 만드는 것이 더 쉽습니다.

    하지만 좋은 소식입니다. 특정 패턴 ( “작동 모드”)에서 주어진 블록 암호를 사용하고 특정 패딩 전략의 도움으로 모든 블록 암호를 스트림 암호로 변환 할 수 있습니다! 즉, 블록 암호 인 더 나은 암호를 사용하여 대부분의 데이터가 스트림으로 제공되는 모든 데이터를 암호화 할 수 있습니다.

    댓글

    • 두 번째 문장은 오해의 소지가있는 것 같습니다. CBC 모드, CTR 모드 등 다양한 표준 작동 모드를 사용하여 블록 암호를 사용하여 스트리밍 데이터를 암호화 할 수 있습니다. AES-CBC는 여전히 블록 암호입니다. 실제로 블록 암호에 대한 거의 모든 표준 작동 모드는 이미 스트리밍 데이터를 지원합니다. 또한 블록 암호는 작동 모드 없이는 안전하지 않으므로 작동 모드와 같지 않습니다. ' 스트리밍 데이터를 암호화하려는 경우에만 필요한 선택적 항목입니다. .

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다