2013-02-13 5 views
4

Objective-C에서 NSString과 NSData 모두에 대해 NSString을 암호화하려고하므로 검색을 시작했습니다.초보자를위한 AES 암호화/암호 해독

나는 here을 시작했지만, 불행히도 내 머리 위로 끝났다.

나는 그 때 자신을 at this post이라고 발견했는데 따라 가기 쉽다. 그래서 나는 가서 함께 implementation을 찾으려고 노력했다. 구현을 살펴본 후 게시글에서 두 번째 대답을 확인한 결과 코드를 적용 할 수있는 구현이 더 많아서 his gist이되었습니다. 요점 readme대로, 그는 "took down this Gist due to concerns about the security of the encryption/decryption"입니다. 따라서 위의 구현 보안에는 보안 결함이 있다고 믿을 수 있습니다.

그러나 그 요지에서 그는 내가 암호화에 사용할 수있는 another alternative을 언급했습니다. 코드를 살펴본 후 "a header, encryption salt, HMAC salt, IV, ciphertext, and HMAC"으로 NSData를 생성하는 것으로 나타났습니다. 나는 같은 라이브러리를 다시 사용하여 디코딩 할 방법을 알고 있지만, 내가 서버에 보내는 것을 알지 못한다면 서버 녀석에게 이것을 어떻게 전달할 수 있을까요?

모든 것의 뿌리에서 나는 내 머리 위로 들어갔다. 내가 위에서 말했던 것을 감안할 때 이것에 대해 많은 학습을 할 시간이 없다는 것을 알고, 절대적으로 필요한 경우가 아니면,이 인코딩/디코딩 프로세스에 대해 어떻게 처리해야하는지, 개인 키가 주어지면 어떻게해야합니까? 나에 의해 설계되지 않은 서버로 전송하는 최종 목표는 무엇입니까? (문장을 실행하는 방법은 무엇입니까?)

답변

3

아마도 서버 사용자에게 물어보아야할까요? 언제 까지나 파티 사이에 암호화가있을 때 데이터 형식에 대한 합의가 있어야합니다. 원시 프리미티브는 그 자체만으로는 처리하지 않습니다. 보안 현명한 처리를하기 쉽습니다. aes 암호문 만 보내려는 욕망은 실수를 야기 할 것입니다.

RNCryptor은 다른 사람도 따라야 할 simple format을 정의하는 높은 수준의 암호화 라이브러리이므로 간단하므로 플랫폼 간 이동에 도움이되지만 추가로 AES를 올바르게 수행해야합니다. 저기 (NaCL, GPGMEKeyczar)와 같은 다른 라이브러리도 있지만 형식이 단순하지만 사용법이 간단하지 않으므로 양쪽 라이브러리에서 라이브러리를 사용할 수 있어야합니다. 할 수 있으면 자신 만의 것을 사용하는 대신 그와 비슷한 것을 사용하도록 권합니다.

Keyczar는 Java, Python, C++, C# 및 Java 용으로 특별히 제공되므로 iOS (또는 Mac, 클라이언트를 대상으로 한 C++ 버전)를 사용할 수있는 경우 서버에서 유용 할 수 있습니다. 몇 가지 선택이 있습니다.

+0

서버 측에서 일하는 사람이 보안 전문가이기 때문에 가장 쉬운 해결책을 찾고 싶었습니다. 나는 iOS와 자존심에 대해 무엇을 알고 있는지 알지 못하기 때문에 이것을 위해왔다. (나는이 상황에서 유능하지 않은 것처럼 보이기를 좋아한다.) 그러나 AES를 제대로 할 필요가있는 여분의 것을 가지고 있다는 것은 무엇을 의미합니까? – RileyE

+2

@RileyE 무작위 초기화 벡터, 무작위 소금 (옵션, 무작위로 생성 된 키 대신 암호를 사용하는 경우에만 필요)을 포함하는 형식을 가지고 있으며 hmac 태그를 추가하여 iv, salt 및 ciphertext 수정되지 않았습니다. 암호문의 수정은 AES에 대한 많은 측면 채널 공격의 핵심입니다. – jbtule

+1

@RileyE, 또한 RNCryptor가 가장 편한 솔루션이라고 생각합니다. – jbtule