Android 앱에서 데이터를 암호화하고 싶습니다. 나는 안드로이드에 대한 암호화의 현재 상태에 대해 거의 경험이 없다. 저는 수년 전에 미국에 소프트웨어 회사가 강력한 암호화 기술을 수출하는 것을 금지하는 법률이 있음을 기억합니다. 안드로이드가 오픈 소스 코드라는 점을 감안하면 그 중 어떤 것이 적용 가능할지 모르겠습니다.Android에서 데이터 암호화
내가 원하는 것은 사용자가 암호 만 사용하여 데이터를 암호화 할 수있게하려는 것입니다. 개인/공개 키를 사용하는 것을 선호하는 이유는 아마도이 두 키를 사용자가 입력해야하기 때문입니다. 내 응용 프로그램에서 사용자는 암호를 사용하여 데이터를 암호화/해독 할 수 있어야합니다. 그들의 데이터는 하나의 모바일 장치에서 다른 모바일 장치로 보내질 것이고, 암호를 알지 못하면 수신 측에서의 데이터를 해독 할 수 없어야합니다. 데이터를 보낼 때 SSL을 사용하지만 데이터가 수신 장치로 릴레이되기 전에 서버에서 암호화 된 상태로 유지되어야하므로 충분하지 않습니다. 해커가 내 서버에 액세스 할 수 있다면 잠재적으로 데이터를 읽을 수 있습니다. 이런 이유로, 나는 그것을 송신 장치에서 암호화하고 그것을 수신 장치에서 해독하기를 원한다.
내가 해결해야 할 문제의 수 :
- 나를 그냥 암호를 사용하여 암호화가 아닌 경우, 그때는 공개/개인 키를 사용하는 것을 고려하겠습니다하게됩니다 암호화 API가 있습니다.
- 내가 현재 사용할 수있는 암호화 알고리즘은 무엇이며 국제적으로 사용할 수 있습니까? 아니면 미국이 암호화 알고리즘을 사용하는 데 제한을 두는가?
- 나만의 맞춤 암호화 알고리즘을 만드는 것이 좋으며 해커가 쉽게 변조하지 못하도록 수정하는 것이 좋을까요? 아니면 이것을 낙담시킬 것입니까? 그렇다면 왜? 알고리즘을 정기적으로 변경하면 알고리즘의 현재 버전을 해독 할 수 있는지 여부를 해독 코드가 인식 할 수 있도록 알고리즘 ID를 데이터에 포함해야합니다.
나는 "매우 어렵다"알고리즘을 찾고 있지는 않지만 적절한 알고리즘을 찾고 있습니다. 저장되는 데이터의 종류는 이미지, 비디오, 오디오 및 GPS 데이터입니다. 솔루션이 Android 2.2 이상에서 작동하면 좋을 것입니다. 왜 알고리즘은 OS와 독립적이어야하기 때문에이 버전에서 어떤 알고리즘이 작동하지 않아야하는지 모르겠습니다. 그럼에도 불구하고 안드로이드는 특정 버전에 대해서만 내장 알고리즘을 사용합니까?
편집 : 나는 내 응용 프로그램에서 몇 가지 기본적인 내부 암호화를 위해 지금 사용하고
코드는 다음과 같다,하지만 충분한 충분 올시다 :
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
원래 위의 줄을했다 :
SecureRandom.getInstance("SHA1PRNG")
그러나 Google에서 4.0을 변경했는데 이로 인해 코드가 깨졌습니다. 이전 코드로 암호화 된 항목은 더 이상 4.0 용 기본 API로 해독 할 수 없습니다. 개인적으로 호환성 문제가 발생하여 Google과 관련된 주요 문제를 발견했습니다. 앞으로이 문제가 다시 발생하지 않도록하려면 어떻게해야합니까? 내 암호화/암호 해독은 Google의 호환성 중단 선택에 달려있을 수 없습니다.
192 비트와 256 비트 지원이 반드시 모든 장치에서 사용할 수있는 것은 아니기 때문에 나는 또한 128 비트 암호화를 사용해야합니다.
"암호를 모르면 수신 측에서 데이터를 해독 할 수 없어야합니다."이 부분이 없습니다. 공격자가 수신 측과 동일한 작업을 수행하고 메시지를 복구 할 수 없습니까? – Henry
물론 해커가 될 수 있습니다. 해커가 먼저 인터넷을 통해 데이터를 해킹해야합니다. 즉, SSL과 암호화 된 데이터를 모두 해킹하거나 내 서버에서 데이터를 해킹해야합니다. 그들이 인터넷 데이터를 지나치거나 내 서버에 액세스 할 수없는 경우 데이터를 수신하는 모바일 장치에 대한 액세스 권한이 있어야합니다. 접근하기가 훨씬 더 어렵습니다. 암호화는 100 % 안전하지 않지만 내 서버에 암호화되지 않은 데이터를 남기고 SSL에만 의존하는 것은 나쁜 실수입니다. 본질적으로 나는 데이터를 해독하기가 매우 어렵도록 이중 암호화를 원한다. – AndroidDev
미안하지만, 나는 그 문장에서 "안"을 간과했다. – Henry