2011-09-09 3 views
1

면책 조항 : 암호화가 없습니다.OpenSSL 암호화 데이터에서 초기화 벡터 (iv)를 얻는 방법

데이터를 암호화하기 위해 OpenSSL을 사용하는 외부 프로세스가 있습니다. 지금은 소금을 사용하고 있습니다.

iPhone 응용 프로그램은 서버의 해당 데이터를 가져 와서 응용 프로그램의 문서 디렉토리에 다운로드하고 암호를 해독해야합니다. iPhone OS에는 OpenSSL 라이브러리가 포함되어 있지 않습니다. 직접 만들 수도 있지만 어렵고 까다 롭습니다. Stackoverflow의 도움 덕분에 내가 발견 한 "가장 쉬운"해결책은 보안 프레임 워크의 일부인 CommonCrypto/CommonCryptor.h을 사용하는 것입니다.

그러나 데이터를 해독하는 C 함수는 올바르게 해독하기 위해 iv가 필요합니다.

암호화 된 데이터에서 iv를 유도하는 방법이 있습니까? (추가 보안을 무효로하는 것처럼 보입니다.) 아니면, 먼저 iv를 어떻게 지정하고 iPhone 앱에 무엇이 있는지 알려 줄 필요가 있습니까? 또는 소금을 사용하지 마십시오.

편집 1 : 명확히하기 위해 OpenSSL을 사용하여 데이터 파일의 텍스트를 암호화하고 있습니다. OpenSSL을 사용하는 스크립트는 텍스트를 암호화하고 Dropbox에 업로드 한 다음 애플리케이션이 Dropbox에서 파일을 다운로드하고 파싱 한 다음 텍스트 해독을 시도합니다.

편집 2 : 예, OpenSSL 명령 줄 유틸리티를 -pass 옵션과 함께 사용하고 있습니다.

+0

무엇을하려고합니까? 서버를 설정하거나 ssl을 서버에 사용 하시겠습니까? – zaph

+0

실제 키를 제외한 OPenSSL 명령은 무엇입니까? – zaph

답변

4

IV는 암호화 한 각 메시지에 대해 임의로 선택해야합니다. OpenSSL 명령 줄 유틸리티 인 openssl enc을 사용하고 있지만 암호 기반 암호화 (-pass-salt 옵션)를 사용하는지 아니면 명시 적으로 키 (-K-IV 옵션)를 사용하는지 명확하지 않습니다.

최상의 보안을 위해 -K 옵션을 사용하고 각 메시지에 대해 새로운 IV를 무작위로 생성하는 것이 좋습니다. 암호문과 함께 IV를 보냅니다. 예를 들어 하나의 파일에서 IV에 암호문을 추가 한 다음 해독 할 준비가되면 파일의 시작 부분에서 IV를 제거 할 수 있습니다.

IV는 공개 일 수 있습니다. 당신은 그것을 숨길 필요가 없습니다. 중요한 것은 각 메시지에 대해 예측할 수없는 IV를 사용한다는 것입니다.

1

iv는 암호화 된 데이터에서 파생 될 수 없으며 양측 간의 통신 외부에서 합의되거나 공개되어야합니다. 또한 암호화 모드에 따라 필요하지 않을 수도 있지만 CBC가 가장 일반적이며 iv가 필요합니다. iv는 기본적으로 첫 블록의 정보를 수집하는 것을 더 어렵게 만듭니다.

당신은 정체를 알아 내고 단지 그것을 하드 코딩하거나 프리 앰블로 전송하여 데이터에서 추출하는 방법을 찾아 낼 수 있습니다.

IV를 SSL은 패킷을 캡처하려고로 간단

한 0으로 문제가있을 수 있습니다. 앱 Charles (link here)으로 쉽게 할 수 있으며 무료 평가판이 있습니다. 나는 그것을 정기적으로 사용한다.