2014-04-10 2 views
1

기본 Android 및 기본 iOS 구현이있는 메신저 앱에서 작업하고 있습니다. 필수 기능 중 하나는 일반 암호 문자열을 입력하여 메시지를 암호화 할 수 있다는 것입니다. 그런 다음이 암호를 입력하여 이러한 메시지를 암호 해독해야합니다. 나는 또한 "AES 사용"이라고 들었다.Android 및 iOS 용 비밀번호 기반 암호화

거의 성공을 거두어 들인 나의 계획은 암호 문자열을 가져 와서 내가 결코 알지 못하는 일부 컨텍스트 정보로 소금을 처리하고 MD5와 같은 것을 사용하여 고정 길이 키를 생성하는 것입니다. 나는 이것이 매우 안전하지 않다는 것을 안다.

해독하려면 위의 과정을 반복하고 같은 키를 얻습니다. 그런 다음 해당 키로 데이터를 해독하고 원래 데이터를 다시 가져옵니다.

Android 및 iOS에서 작동하도록 설정되었지만 서로의 데이터를 해독 할 수 없기 때문에 표시 할 수없는 구현상의 차이가 있으며 변경할 수 없다고 알려줍니다. 두 플랫폼 모두에서 AES128으로 암호화 된 데이터의 처음 16 바이트는 항상 동일하지만 그 이후에는 완전히 다릅니다. 무엇을 확인할 수 있습니까?

사용자 경험은 암호로 zip 파일을 공유하는 것과 동일합니다. 사용자는 언제든지 모든 장치에서 암호를 입력하고 BAM은 암호화되지 않은 데이터를받습니다. keyfiles 또는 그 물건을 공유하는 것은 이것의 일부가 아닙니다.

답변

1
  1. AES는 표준입니다 (적어도 나는 그것에 대해 어떤 이유가 표시되지 않습니다) 어떤 소금을 사용할 필요가 없습니다 - 상관없이 구현 무엇인지, 결과는이 같은 수 없습니다가.
  2. 첫 번째 128 비트 및 다른 나머지 데이터에 대한 동일한 출력은 다른 암호 모드를 사용한다는 것을 의미합니다. AES는 블록 암호이며 두 플랫폼 모두에서 128b 블록 크기로 사용하고 있기 때문에 첫 번째 블록은 동일한 방식으로 암호화되며 다음 키는 다른 키로 암호화됩니다. block cipher modes
+0

안드로이드에서 IV를 사용하지 않고 그대로 사용하고있었습니다. iOS (모든 0x0)와 동일한 IV를 주면 동일한 결과가 만들어집니다. –

관련 문제