2009-12-31 3 views
10

openssl 라이브러리에서 blowfish 알고리즘을 사용하면 모든 데이터를 암호화하고 해독 할 수 있습니다.해독에 성공했는지 확인하는 방법은 무엇입니까?

모든 데이터는 임의의 키로 암호화 (암호 해독) 할 수 있습니다. \ iv. openssl에는 암호 해독의 성공 여부를 알 수있는 방법이 없습니다. 그것은 단지 몇 가지 수학적 변환 일뿐입니다.

그래서 암호화가 성공했는지 확인하기 위해해야 ​​할 일은 무엇입니까? 암호화 된 일부 키/iv로 일부 데이터가 해독 되었습니까?

암호 해독 후 검사해야하는 데이터 앞에 일부 MAGIC 바이트를 추가해야합니까?

+0

매직 바이트가 도움이됩니다. 아래에 설명 된대로 암호화 된 데이터에 보안 해시를 추가하는 것이 훨씬 좋습니다. –

답변

8

파일 끝에 체크섬 (예 : 원래 내용의 MD5)을 추가 할 수 있습니다. 해독 한 후 마지막 16 바이트는 다시 md5 (콘텐츠 -16 바이트)와 같아야합니다.

+3

체크섬! = MD5 – jldupont

+0

MD5는 충돌 비율이 비교적 낮기 때문에 체크섬 기능으로 사용할 수 있습니다.물론 일반적인 체크섬 함수는 아니지만 계산이 쉽고 빠릅니다 (CRC가 더 빠름을 압니다 ;-) – naivists

+0

@ naivists : "체크섬"은 "해시 알고리즘"과 다른 짐승입니다. . – jldupont

1

가능한 많은 솔루션 중에서 CRC을 사용해보십시오.

+0

Wikipedia 기사에 따르면 "n 비트 CRC는 임의 길이의 데이터 블록에 적용되며 n 비트보다 길지 않은 단일 오류 버스트를 감지합니다". 즉, 암호화 된 메시지와 길이가 동일한 CRC를 사용해야합니다. 내가 이해하는 한, 잘못된 키로 해독 된 메시지의 "오류"는 아마도 최대 길이 (메시지 길이)를 갖기 때문입니다. 이것은 메모리 효율적인 것 같습니다. –

+0

아니요. 예 : 32 비트 CRC는 암호화 된 메시지 길이의 32 비트 ** 독립 ** 미만의 모든 단일 비트 오류 ** 버스트 **를 감지합니다. 즉, 매우 효율적입니다. 희망이 도움이됩니다. – jldupont

+0

Wait, wait, wait :-) 메시지가 잘못된 키로 해독 된 경우 오류 길이가 메시지 길이와 같을 것입니다. 맞습니까? 아마 모든 비트가 잘못 될 것이기 때문입니다. 권리? 32 비트보다 긴 메시지의 오류가 감지되지 않는다는 뜻입니까? 죄송 합니다만, 바보 같은 질문 일 수도 있습니다. –

0

데이터 끝에있는 체크섬 방법이 가장 좋을 것이라고 생각하지만 전체 콘텐츠를 해독해야합니다. 끝.

이 시점에서 처음 블록의 암호 해독 성공 여부를 결정할 수 있기 때문에 처음부터 마술 바이트가 유리합니다. 그러나 소스 코드를 검사하여 공격자가 장점을 가질 수 있다고 주장 할 수 있습니다 (부분적으로 알려진 일반 텍스트 시나리오).

그래서 (내가 마침내 생산적인 소프트웨어 내에서) 내가했던 것은 (상수 또는 예측 가능한 마술 바이트를 사용하는 대신) 첫 번째 블록에 대해 키 자체를 사용하고 있었다. 난 당신이 예를 들어, 사용하는 경우이 공격자에 대한 유용한 힌트가 될 것이라는 증거를 찾지 못했습니다

key = decrypt(ciphertext, key) 

이 공격자에 대한 다음과 같은 추가 지식 결과 AES. 어쩌면 누군가는 이것을 더 많이 안다.

0

매직 바이트, 체크섬 및 암호화 된 암호화 키는 모두 무차별 대입 공격을 훨씬 쉽게합니다. 공격자는 해독을 통해 메시지를 실행하고 해당 마법 또는 체크섬 또는 키를 찾을 수있는 2256 가지 가능성 만 있으면됩니다. 해독 된 데이터 내부. 그가 찾을 필요가 없다면, 그가 그것을 깨뜨리는 것이 훨씬 더 힘듭니다. 즉, 그것을 깨뜨릴 수도 있고 결코 깨닫지 못할 수도 있음을 의미합니다.

관련 문제