나는 백엔드 레일 앱에 연결하는 Android 앱을 가지고 있습니다. 기기와 서버 사이에 보내는 데이터를 암호화하고 싶습니다. 비밀 키로 기본 암호화를 사용하고 있습니다. 열쇠는 내가 apk에 저장하고 있기 때문에 비밀이 아니기 때문에 리버스 엔지니어링과 apk 디 컴파일 기술을 사용하여 쉽게 다루기가 쉽습니다."괜찮은"암호화 방식입니까?
나는 사용자의 암호를 기반으로 비밀 키를 생성하고 있습니다. Key는 고정 길이가되어야하며, 사용자가 옵션이 아닌 초고 암호를 사용하는 방법을 보면서, 내가하고있는 일은 문자 (기본적으로 이전의 하드 코딩 된 키에 사용했던 문자)를 추가하는 것입니다. 문자열 (암호 + 문자)은 필수 길이입니다. 그런 다음 사용자 이름 (기술적으로 암호화하지 않아야하므로 큰 문제는 아님)을 제외하고 모든 매개 변수를 암호화합니다 (서버 클라이언트 통신을 위해 JSON을 사용하고 있습니다). JSON 요청이 서버에 도달하면 사용자 이름 매개 변수를 사용하여 데이터베이스 (서버 기반)에서 사용자의 암호를 가져온 다음 키를 구성하여 내가받는 데이터를 "암호화 해제/암호화"해야합니다. 배상. 이렇게하면 키는 항상 Server/Client간에 동일하지만 모든 사용자에게 고유하므로 APK에 쉽게 가져올 수있는 하드 코딩 된 키를 저장할 필요가 없습니다. 또한 암호는 장치에 저장되지 않으므로 사용자는 서버에 로그인 할 때마다 암호를 입력해야합니다.
제가 알고 싶습니다.이 접근법을 "적절하게 보호"할 수 있습니까?
사용자 이름이 고유합니까? 그렇지 않은 경우 동일한 사용자 이름의 인스턴스가 여러 개있는 경우 사용자 이름을 사용하여 암호를 검색하면 문제가 발생할 수 있습니다. 또한 사용자가 비밀번호를 변경하면 어떻게됩니까? 그런 다음 모든 데이터를 다시 암호화합니까 (암호화 된 상태로 암호화되었다고 가정). – Tim
예, 사용자 이름은 고유합니다. –
왜 https를 사용하지 않는가? – nasch