압축 후 암호화 또는 그 반대로?


88

나는 인터넷을 통해 트래픽을 암호화 (AES256)하는 VPN 시스템을 작성하고 있습니다 (왜 1,000,001 명의 다른 사람들이 이미있을 때 내 자신을 작성합니까?

기본적으로 나는 올바른 순서 로이 작업을 수행하기 위해 당신을 지나서 내 생각을 실행하고 싶습니다.

현재 패킷은 전송되기 전에 암호화되었지만 데이터 전송을 약간 최적화하기 위해 압축 수준을 추가하고 싶습니다. 압축률이 높지 않음-항상 CPU를 최대로 사용하고 싶지는 않지만 압축이 가능한 한 효율적이되도록하려고합니다.

그래서 내 생각은 암호화되지 않은 패킷이 암호화 된 패킷보다 압축 되기 때문에 암호화 하기 전에 패킷을 압축해야합니까? 아니면 다른 방법?

압축에 zlib을 사용할 것입니다.

수퍼 유저 블로그에서 자세히 알아보십시오 .


4
"프로그래밍"으로 작성? 그러면 스택 오버플로에 더 적합합니다.
Suma

4
프로그래밍에 대해 묻는다면 그렇습니다. 이것은 일반적인 압축 후 암호화 또는 암호화 한 다음 압축 질문이며 원하는 경우 일반 파일로 작업하는 데 적용 할 수 있습니다. 프로그래밍 측면은 내가 질문하는 이유에 대한 맥락입니다.
Majenko



1
그들은 압축에 대해 알고 있습니까?
Majenko

답변:


176

암호화가 올바르게 수행 되면 결과는 기본적으로 무작위 데이터입니다. 대부분의 압축 방식은 데이터에서 어떤 방식 으로든 분해 할 수있는 패턴을 찾아서 작동하며 현재 암호화 덕분에 아무 것도 없습니다. 데이터는 완전히 압축되지 않습니다.

암호화하기 전에 압축하십시오.


41
더 중요한 것은 압축이 엔트로피를 추가한다는 것입니다. 엔트로피를 추가하면 암호화에 도움이됩니다 (알려진 일반 텍스트 공격으로는 더 어려워 짐).
Olli

8
또한 비용 리소스를 암호화하고 작은 파일을 암호화하면 리소스가 덜 사용됩니다. 따라서 암호화하기 전에 압축하십시오.
GAThrawn

9
@Olli-압축 체계가 알려진 텍스트를 추가 할 필요는 없습니다. 최악의 경우 데이터 앞에 알려진 512 바이트 헤더가 있고 블록 모드 암호화를 사용하고 있다고 가정하십시오.
Martin Beckett

26
@Olli의 의견이 왜 틀렸는 지 잘 모르겠습니다. 뿐만 아니라 그것은 상당히입니다 중요한, 어떤 반 괜찮은 암호화 그것이 있어야 전혀하지 않는 것이 중요합니다 . 즉, 암호화의 강도는 메시지의 엔트로피와 완전히 관련이 없어야합니다.
BlueRaja-대니 Pflughoeft

8
전혀 압축하지 않으면 메시지를 암호화하기 전에 만 실제로 수행 할 수 있지만, 원본 메시지의 '압축성'에 대한 정보가 유출 될 수 있으므로이 측면에 어떤 영향이 있는지 고려해야합니다. 채널. 모두 0이거나 메시지 인 고정 크기 파일을 고려하십시오. 모든 0 파일은 합리적인 압축 체계 하에서 페이로드가 더 작아집니다. 이 특정 사용 사례에서는 문제가되지 않습니다.
Edward KMETT

22

암호화하기 전에 압축하십시오. 압축 된 데이터는 소스 데이터의 작은 변경에 따라 상당히 달라질 수 있으므로 차등 암호화를 수행하기가 매우 어렵습니다.

또한 Mr.Alpha가 지적한 것처럼 먼저 암호화하면 결과를 압축하기가 매우 어렵습니다.


12
글쎄, 이것은 정확하지만 게시하기 2 시간 전에 게시되었습니다 ... Entropy
Konerak

3

특정 유스 케이스에 의존하더라도 Encrypt-then-Compress에 조언 할 것입니다. 그렇지 않으면 공격자가 암호화 된 블록 수에서 정보를 유출 할 수 있습니다.

우리는 사용자가 서버에 메시지를 보내고 공격자는 사용자 메시지를 보내기 전에 (예를 들어 자바 스크립트를 통해) 텍스트를 추가 할 수 있다고 가정합니다. 사용자는 적절한 데이터를 서버에 보내려고하고 공격자는이 데이터를 가져 오려고합니다. 따라서 사용자가 서버에 보내는 데이터에 다른 메시지를 추가 할 수 있습니다. 그런 다음 사용자는 자신의 메시지와 추가 된 텍스트를 공격자로부터 압축합니다. DEFLATE LZ77 압축을 가정하므로 함수는 동일한 정보를 첫 번째 모양에 대한 포인터로 바꿉니다. 따라서 공격자가 구멍 일반 텍스트를 재현 할 수있는 경우 압축 기능은 일반 텍스트의 크기를 원래 크기와 포인터로 줄입니다. 또한 암호화 후 공격자는 암호 블록 수를 계산하여 추가 된 데이터가 사용자가 서버로 보낸 데이터와 동일한 지 확인할 수 있습니다. 이 사례가 약간 구성된 것처럼 들리더라도 TLS의 심각한 보안 문제입니다. 이 아이디어는 세션을 훔치기 위해 TLS 연결에서 쿠키를 유출하기 위해 CRIME이라는 공격에 의해 사용됩니다.

출처 : http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf


2

내 의견은 메시지를 압축 할 때 메시지를 더 낮은 차원으로 투사하므로 더 적은 비트가 있음을 의미합니다. 즉, 압축 된 메시지 (무손실 압축 가정)는 더 적은 비트로 동일한 정보를 가지고 있음을 의미합니다 (제거한 메시지는 중복되었습니다! ) 따라서 비트 당 더 많은 정보와 결과적으로 비트 당 더 많은 엔트로피가 있지만 메시지가 압축되지 않았을 때와 동일한 총 엔트로피가 있습니다. 이제 무작위성은 또 다른 문제이며 압축 패턴이 멍키 렌치를 던질 수있는 곳입니다.


1

암호화하기 전에 압축을 수행해야합니다. 사용자는 데이터 전송을 기다리는 데 시간을 소비하고 싶지 않지만 시간을 낭비하지 않고 즉시 데이터를 처리해야합니다.


1

앞에서 지적한 바와 같이 암호화 전 압축. 압축은 압축 할 수있는 구조를 찾습니다. 암호화는 구조가 감지되지 않도록 데이터를 스크램블합니다. 먼저 압축하면 파일 크기가 작아 전송 페이로드가 줄어 듭니다. 암호화는 압축 여부에 관계없이 작동하며, 앞에서 지적했듯이 압축 파일에 대해 차등 암호화를 수행하기가 더 어려울 수 있습니다.


이것은 받아 들인 대답과 두 번째 답이 반복되는 것으로 보입니다. 각 답변은 해당 질문에 실질적으로 새로운 해결책을 제시해야합니다.
fixer1234

0

압축은 정보 엔트로피를 줄입니다. 최대 압축은 엔트로피를 최소로 만듭니다. 완벽하게 암호화 된 데이터 (소음)의 경우 최대 및 최소 엔트로피는 동일합니다.


2
잠깐만 요, 거꾸로 없습니까? 중복성이 줄어들면 엔트로피가 증가한다고 생각했습니다. 따라서 압축은 엔트로피를 증가시켜야합니다.
Zan Lynx

아니 엔트로피가 적을수록 더 많은 패턴이 나타납니다. 임의성은 엔트로피가 가장 높습니다.
AbiusX

1
그러나 그것은 정보 엔트로피이므로 의미에 관한 것입니다. 임의성은 의미가 없으므로 적용되지 않습니다. 영어 문장은 글자가 바뀌어도 같은 의미이므로 엔트로피가 낮습니다. 단일 비트가 변경되어 압축 된 영어 문장을 읽을 수 없을 수도 있습니다. 아니면 그렇게 생각합니다.
잔 Lynx

엔트로피는 감각과 읽기 또는 이해 능력, 패턴에 관한 것이 아닙니다. 압축 파일은 패턴으로 가득합니다.
AbiusX

1
@AbiusX : 그렇습니다. 패턴. 패턴이 적을수록 엔트로피가 커집니다. 즉, 반복되는 모든 패턴을 단일 사본으로 바꾸는 압축은 엔트로피를 증가시킵니다.
Zan Lynx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.