문제

"스트림"에서 작동하는 XXTEA 암호화 알고리즘의 구현을 작성하고 있습니다. 즉, Crypt Mykey <MyFile> 출력과 같이 사용할 수 있습니다.

필수 조건 중 하나는 파일에 전혀 액세스 할 수 없다는 것입니다 (EOF를 찾을 때까지 고정 크기 블록 만 읽습니다). 알고리즘은 데이터 바이트가 4의 배수이므로 패딩을 추가해야합니다.

일반 텍스트의 경우 좋은 솔루션은 널로 패드하는 것이며 암호 해독에서는 널을 무시하지만 이진 스트림에 동일한 전략을 사용할 수 없습니다 (내장 널 포함).

나는 누락 된 숯의 수를 가진 패딩과 같은 일반적인 솔루션을 읽었습니다 (3 숯을 놓친 다음 끝에 3, 3, 3을 추가하십시오).

도움이 되었습니까?

해결책

질문을 읽는 것은 이것의 보안 측면처럼 보입니다. 간단히 말해서, 당신은 4 바이트의 배수를 입력으로 기대하는 API가 있습니다.

이진 스트림이 신경 쓰지 않도록 보장 할 수 없다면 이진 스트림에 최대 3 바이트를 추가하는 것은 위험합니다. EXE 파일에 나머지 비트의 관련 크기를 지정하는 헤더가 있으므로 EXE 파일의 끝에 0을 추가하는 것은 중요하지 않습니다. PCX 파일의 끝에 0을 추가하면 PCX 파일에 파일 끝에서 특정 바이트를 시작하는 헤더가 있으므로이를 중단시킵니다.

따라서 실제로 선택의 여지가 없습니다. 이진 스트림 끝에서 자연스럽게 일어나지 않도록 사용할 수있는 마법 패딩 바이트는 선택의 여지가 없습니다. ~ 해야 하다 사용 된 패딩 바이트를 설명하는 정보의 추가 DWORD를 항상 추가하십시오.

다른 팁

읽다: http://msdn.microsoft.com/en-us/library/system.security.cryptography.paddingmode.aspx

다음과 같은 일반적인 패딩 방법 목록이 있습니다.

PKCS7- PKCS #7 패딩 문자열은 바이트 시퀀스로 구성되며, 각각은 총 패딩 바이트의 총 수와 동일합니다.

ANSIX923 패딩 스트링은 길이 전에 0으로 채워진 일련의 바이트로 구성됩니다.

ISO10126 패딩 문자열은 길이 전에 임의의 데이터로 구성됩니다.

예 :

원시 데이터 : 01 01 01 01 01

PKCS #7 : 01 01 01 01 03 03 03

ANSIX923 01 01 01 01 01 00 00 03

ISO10126 : 01 01 01 01 01 CD A9 03

읽으십시오 암호 텍스트 도둑질. 일반 텍스트 패딩보다 훨씬 우아합니다. 또한 4 바이트보다 큰 블록 크기를 사용하는 것이 좋습니다. 64 비트는 아마도 최소값 일 것입니다.

엄밀히 말하면, 자신의 암호화는 위험한 아이디어입니다. Crypto 커뮤니티 전체가 시도하고 깨지지 않은 알고리즘을이기는 것은 어렵습니다. 재미 있고 독서를 고려하십시오 이것, 또는 적어도 Schneier의 "관련 독서"섹션에서 나온 것.

실제로 나는 좋은 스트림 암호에 패딩이 전혀 필요하지 않을 것으로 기대합니다. 예를 들어 RC4는 패딩이 필요하지 않으며 IS는 매우 강력한 스트림 암호입니다. 그러나 공격자가 선택한 다른 데이터를 암호화 루틴에 공급할 수 있고 항상 동일한 키를 사용하고 암호화 된 데이터에 액세스 할 수있는 경우 공격을받을 수 있습니다. 올바른 입력 데이터를 선택하고 출력 데이터를 분석하는 것은 무차별 인력 공격없이 암호화 키를 복원하는 데 사용될 수 있습니다. 그러나 그 외에는 RC4가 매우 안전합니다.

패딩이 필요한 경우 스트림 암호 IMHO가 아닙니다. 마치 4 바이트의 배수 또는 16 바이트의 배수로 패드 한 것처럼, 큰 차이점은 무엇입니까? 그리고 그것이 16 바이트의 배수로 패딩된다면, 당신은 거의 모든 블록 암호를 사용할 수 있습니다. 실제로 당신의 암호는 블록 암호이며 4 바이트 블록으로 작동합니다. 그것은 모든 "기호"가 4 바이트 인 시스템의 스트림 암호였으며 (예 : 암호화 UTF-32 텍스트시,이 경우 데이터는 항상 4의 배수가되므로 패딩이 없습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top