Development Tip

압축 및 암호화 할 때 먼저 압축해야합니까, 아니면 먼저 암호화해야합니까?

yourdevel 2020. 12. 29. 08:00
반응형

압축 및 암호화 할 때 먼저 압축해야합니까, 아니면 먼저 암호화해야합니까?


파일을 AES로 암호화 한 다음 ZLIB로 압축하면 압축이 처음에 압축 된 다음 암호화되는 것보다 덜 효율적입니까?

즉, 먼저 압축해야합니까, 아니면 암호화해야합니까, 아니면 중요합니까?


먼저 압축하십시오. 파일을 암호화하면 압축 할 수없는 임의의 데이터 스트림이 생성됩니다. 압축 프로세스는 데이터에서 압축 가능한 패턴을 찾는 데 달려 있습니다.


암호화 이전의 압축은 확실히 더 공간 효율적이지만 동시에 덜 안전합니다. 그래서 다른 답변에 동의하지 않습니다.

대부분의 압축 알고리즘은 "매직"파일 헤더를 사용하며 통계적 공격에 사용될 수 있습니다.

예를 들어, CRIME SSL / TLS 공격이 있습니다.


암호화 알고리즘이 좋은 경우 (적절한 연결 모드가있는 AES가 좋은 경우) 어떤 압축기도 암호화 된 텍스트를 축소 할 수 없습니다. 또는 다른 방법을 선호하는 경우 암호화 된 텍스트를 압축하는 데 성공하면 암호화 알고리즘의 품질에 의문을 제기 할 때입니다.

이는 암호화 시스템의 출력이 단호한 공격자라도 순전히 임의의 데이터와 구분할 수 없어야하기 때문입니다. 압축기는 악의적 인 공격자가 아니지만 더 적은 비트로 나타낼 수있는 무작위가 아닌 패턴을 찾으려고 노력하여 작동합니다. 압축기는 암호화 된 텍스트에서 이러한 패턴을 찾을 수 없어야합니다.

따라서 먼저 데이터를 압축 한 다음 그 반대가 아니라 결과 암호화 해야합니다 . 이것은 예를 들어 OpenPGP 형식으로 수행됩니다 .


먼저 압축하십시오. 암호화하면 데이터가 (본질적으로) 임의의 비트 스트림으로 바뀝니다. 압축은 데이터에서 패턴을 찾고 정의에 따라 랜덤 스트림에는 패턴이 없기 때문에 랜덤 비트는 압축 할 수 없습니다.


물론 중요합니다. 일반적으로 먼저 압축 한 다음 암호화하는 것이 좋습니다.

ZLib는 Huffman 코딩과 LZ77 압축을 사용 합니다. 예를 들어 일반 텍스트에서 수행되는 경우 Huffman 트리는 균형이 잘 잡히고 최적이므로 압축률이 더 좋습니다.

압축 결과가 "암호화"된 것처럼 보이지만 압축 후에 암호화가 수행 될 수 있지만 파일이 일반적으로 PK로 시작하기 때문에 쉽게 압축 된 것으로 감지 될 수 있습니다.

ZLib는 기본적으로 암호화를 제공하지 않습니다. 이것이 제가 ZeusProtection을 구현 한 이유 입니다. 소스 코드는 github 에서도 사용할 수 있습니다 .


Compressor가 잘 정의 된 패턴을 가진 데이터 세트에서만 작동하는 것은 사실이지만, Compressor에서 처리 할 수있는 비 무작위 패턴을 잘 생성하는 데이터를 먼저 암호화하는 것이 시간 복잡성이 적습니다.


실용적인 관점에서 보면 많은 파일이 미리 압축되어 있기 때문에 먼저 압축해야한다고 생각합니다. 예를 들어, 비디오 인코딩에는 일반적으로 과도한 압축이 포함됩니다. 이 비디오 파일을 암호화 한 다음 압축하면 이제 두 번 압축되었습니다. 두 번째 압축은 압축률이 낮아질뿐만 아니라 다시 압축하면 대용량 파일이나 스트림을 압축하는 데 많은 리소스가 필요합니다. 토마스 Pornin페루 치오는 진술, 암호화 된 파일의 압축 때문에 암호화 된 파일의 임의성의 작은 효과 어쨌든이있을 수 있습니다.

가장 좋고 간단한 정책은 사전에 필요에 따라 파일을 압축 한 다음 (화이트리스트 또는 블랙리스트를 사용하여) 파일을 암호화하는 것입니다.

참조 URL : https://stackoverflow.com/questions/4676095/when-compressing-and-encrypting-should-i-compress-first-or-encrypt-first

반응형