2008-09-18 5 views
32

소프트웨어 제품에 AES 암호화를 추가하고 싶지만 데이터 크기를 늘리는 것이 중요합니다. 데이터 크기가 커지면 압축 알고리즘을 추가해야합니다.AES (128 또는 256) 암호화가 데이터를 확장합니까? 그렇다면 얼마만큼?

+3

암호화의 요점은 엔트로피를 추가하는 것이기 때문에 압축이 거의 효과가 없을 것으로 예상됩니다. 그러나, 당신은 그것을 밖으로 시도하고 무슨 일이 일어나는 지 볼 수 있습니다. –

답변

41

AES는 데이터를 확장하지 않습니다. 게다가 출력은 일반적으로 압축 가능하지 않습니다. 데이터를 압축하려면 암호화하기 전에 데이터를 압축하십시오.

그러나 일반적으로 AES 암호화는 padding과 결합되며, 이됩니다 (단 몇 바이트 만).

+7

나는 패딩에 대한 노트를 추가 할 자유를 얻었다. – sleske

+0

또한 덧붙여서 일반적으로 cryptodata에는 IV ("초기화 값")가 필요한 CipherBlock 모드가 필요하며 수정을 방지하기 위해 MAC 알고리즘을 보호해야합니다. AES 및 대부분의 블록 모드에서 IV는 16 바이트이며 가장 일반적인 HMAC (Sha1)는 또 다른 16 바이트입니다. –

4

나는 AES 암호화가 암호화되는 데이터에 아무 것도 추가하지 않는다는 것이 확실하다. 왜냐하면 그것은 상태 변수에 관한 정보를 제공 할 것이고, 암호화에 있어서는 나쁜 것이다.

압축 및 암호화를 혼합하려면이 순서대로 수행하십시오. 그 이유는 암호화 된 데이터 (이상적으로)가 완전히 무작위적인 데이터처럼 보이기 때문이며 압축 알고리즘은 압축 된 파일 형식과 함께 제공되는 책 보관 비용과 그 중 일부를 실제로 압축 할 수 없기 때문에 데이터를 더 커지게 만듭니다.

0

압축이 필요한 경우 암호화하기 전에 수행하십시오.

20

AES는 마지막 블록의 끝에서 몇 바이트의 패딩을 제외하고 데이터를 확장하지 않습니다.

결과 데이터는 기본적으로 무작위이기 때문에 압축 할 수 없습니다. 사전 기반 알고리즘으로 압축 할 수 없습니다. 가장 좋은 방법은 먼저 데이터를 압축 한 다음 암호화하는 것입니다. 당신이 전에 암호화를 수행해야 콘텐츠 참고 압축하는 경우

+1

입력이 암호 블록 크기의 짝수 배가 되더라도 소수의 채우기 바이트가 추가됩니다. 안쪽에있는 코드가 얼마나 많은 패딩이 이루어질 수 있도록 * 패딩이 필요합니다. –

0

제 유일한 변경 그러나 블록

의 크기로 데이터를 정렬 패딩 소량 일 것이다. 암호화 된 데이터는 일반적으로 임의의 데이터와 구별 할 수 없으므로 압축되지 않습니다.

-2

@freespace 및 기타 : 암호화 클래스에서 기억해야 할 사항 중 하나는 압축 스트림의 반복적 인 일부 청크 (예 : 섹션 헤더와 같음)가 쉽게 깨질 수 있기 때문에 암호화 전에 데이터를 압축하면 안된다는 것입니다. 귀하의 암호화.

+1

알고리즘이 알려진 일반 텍스트 공격에 취약한 알고리즘 인 경우에는 관계없이 엉망입니다. 일반적으로 전송되는 많은 구조화 된 형식의 예측 가능한 유아용 침대가 있습니다. 대부분의 최신 시스템은 이러한 공격을 방지 할 수있는 모드에서 작동하도록 설계되었습니다. – Brian

+0

맞음! 압축 된 데이터는 실제 평문보다 반복 또는 추측 가능한 세그먼트가 적을 수 있습니다. Java 코드 파일을 암호화한다고 가정합니다. 누구나 // 자주 나타나는 것 같습니까? 또한 : 우편 회사는 암호화하기 전에 압축합니다. – Cheeso

+0

@Cheese 임의의 IV가 처리해야하는 것과 같은 것처럼 들립니다. – FluorescentGreen5

6

암호화하기 전에 데이터를 압축하는 것이 일반적입니다. 이후 AES 암호화 데이터가 무작위로 나타나기 때문에 나중에 압축하는 것은 효과가 없기 때문에 (모든 헤더와 그 밖의 다른 것들은 제외하고)

그러나 압축을 사용하면 일부 컨텍스트에서 사이드 채널 공격이 발생할 수 있으므로 자신의 용도를 분석해야합니다. 이러한 공격은 암호화 된 VOIP에 대해 최근에보고되었습니다. VBR로 압축하면 다른 음절이 비트 전송률의 특성 변화를 만듭니다. 따라서 일부 (또는 모든) 음절은 데이터가 생성 된 속도로 전송되기 때문에 충분한 분석으로 복구 할 수 있습니다. 이 수정은 CBR 압축을 사용하거나 버퍼를 사용하여 인코더에서 나오는 데이터 속도에 관계없이 일정한 속도로 전송 (대기 시간 증가)하는 것입니다.

AES는 16 바이트 입력 블록을 16 바이트 출력 블록으로 변환합니다. 유일한 확장은 전체 블록 수까지 데이터를 반올림하는 것입니다.

관련 문제