2014-11-14 1 views
1

저는 AES 암호 해독기와 암호 해독기를 연구하고 있습니다. 나는 PKCS # 7을 사용하기로 결정했다. 그리고 지금, 나는 패딩 길이에 대한 정보를 어디에 두어야하는지 잘 모릅니다. 나는 마지막 바이트 (== n)를 읽을 수 있고 그것이 16보다 작은지를 검사 할 수 있다고 읽었다. 만약 그것이 참이라면, n이 같으면 n 바이트를 검사 할 수있다. 하지만 여기에 문제가 있습니다. 무엇 마지막 블록 암호화하는 경우하는 16 바이트를 가지고 exmaple에 대해 다음과 같습니다패딩 길이에 대한 정보를 어디에 둘까요?

{0x01, 0xfa,..., 0xf1, 0x02, 0x02} 

해독 한 후, 암호 해독기는 그것을 읽고 마지막 두 바이트가 채워집니다 것을 결정한다 (사실 그들은하지 않습니다).

길이가있는 파일의 시작 부분에 바이트를 추가해야합니까? decryptor가 그것을 읽고 2 바이트에서 해독을 시작합니까?

+1

메시지 크기가 블록 크기로 정확하게 나눌 수있는 경우 일반적으로 패딩 블록 전체를 추가한다고 생각합니다. –

+0

@Damien 그리고 내가 맞다고 생각해. :) –

답변

3

PKCS # 7 패딩은 결정적입니다. 이는 패딩이 항상 패딩 길이 자체를 알아낼 수 있어야한다는 것을 의미합니다. 따라서 먼저 해독 한 다음 마지막 바이트 (숫자로)를 가져와 패딩 길이가됩니다. 이 작업을 수행하려면 PKCS # 7 패딩은 이고 항상이 적용됩니다. 따라서 패딩의 양과 바이트의 값은 AES의 경우 16 바이트 인 블록 크기에 1입니다.. plaintext가 이미 16으로 나눌 수있는 경우, 16/0x10의 바이트로 채워진 전체 패딩 블록이 적용됩니다.

은 즉, 계산은 다음

p 패드 크기 & 값
p = n - l % n 

, n 블록 크기이며 l는 평문의 크기이다.

+0

공격자가 암호문의 마지막 블록을 변경하는 것에 대해 걱정할 경우 HMAC를 적용해야합니다. –

+0

고맙습니다. – s3ven

-1

암호화 된 데이터보다 실제 길이가 큰 32 비트 접두사를 추가하는 것이 가장 좋습니다.

+0

왜 32 비트가 있어야합니까? 정수 크기로 연결되어 있습니까? – s3ven

+0

32 비트는 표준 크기입니다. 블록이 항상 <64K이고 공간이 중요한 경우 (예 : 임베디드 앱) 16 비트 접두사도 정의 할 수 있습니다. – i486

+0

아래로 투표하면 PKCS # 7이 결정적이므로 크기를 미리 알 필요가 없습니다. 미리 크기를 알면 * 유용 할 수 있지만 PKCS # 7 패딩을 수행하기 위해 특별히 요구되지는 않습니다. –

관련 문제