2016-08-14 2 views
-1

내 응용 프로그램에 Facebook 및 Google 로그인이 있습니다. 백엔드 서버를 사용하여 이름 및 상태와 같은 사용자 데이터를 저장합니다.안전하게 백엔드 서버와 연결

토큰을 사용자 지점과 같은 정보와 함께 보내고 있습니다. 서버는 토큰을 사용하여 사용자를 식별하고 그의 작업을 올바르게 처리합니다.

앱을 게시하기 전에 모든 것을 암호화하고 싶지만 SSL을 사용할 수 있다는 것을 알고 있지만 공급자가 SSL 지원을 위해 많은 비용을 청구합니다.

저의 생각은 RSA 키 쌍을 만들어 안전한 장소에 비공개로 저장하고 APK에서 공개하도록하는 것이 었습니다.

내 응용 프로그램 내에서 RSA를 사용하여 암호화 및 암호 해독을 매우 쉽게 만들 수 있지만 PHP 전문가는 아닙니다. 서버 측에서 해독하는 데 많은 노력을했지만 사용법을 이해할 수 없습니다. 그것.

나는 하나의 키 쌍은

getPublic().getEncoded() 
getPrivate().getEncoded() 

어떻게 해독하고 데이터를 암호화하는 PHP에서 개인 키를 사용할 수 있는지, 내가 사용, 안드로이드에 의해 생성 한?

나는 이것이 일을하는 가장 좋은 방법이 아닐지도 모른다.하지만 나는 문제가 없을 것이라고 생각한다. 목표 청중은 실제로 해커와 거리가 멀다.

+0

"모든 것을 암호화하고 싶다"는 의미는 무엇입니까?전송중인 데이터, 장치의 데이터, 서버의 데이터, 다른 것? – zaph

+0

전송 중, 이것은 토큰 절도 나 점수 조작을 피하기 위해 토큰과 스코어가있는 json 배열을 가지고 있습니다. 전송 중에 이것을 보호 할 수 있기를 원합니다. 전화에서 암호화 할 수 있지만, 할 수 없습니다. 서버에서 암호 해독 –

+0

그러면 정답은 HTTPS입니다. [암호화] (https://letsencrypt.org/)가 있는데, 갱신 비용이 들거나 인증서 비용을 지불하는 번거 로움이 있습니다. 이는 보안 가격입니다. 또한 MITM 공격을 막기 위해 인증서를 발급 받으십시오. 보안은 무료도 쉽지 않지만 사용자에게는 자격이 있습니다. – zaph

답변

1

PHP 태그를 추가했기 때문에 안드로이드 앱에서 호출하는 일종의 나머지 API가 있다고 가정합니다. 이제 PHP에서 암호화 및 해독 할 필요가 없습니다. 그것들은 웹 서버에 의해 처리됩니다. 늘어나는만큼 SSL은 let's encrypt 봐 opensource 있습니다. 웹 서버에서 ssl 만 시행하면 보안상의 효과가 있습니다.

+0

내가 읽고있는 것에서 나는 이것을 설치하기위한 쉘 접근이 필요하다고 생각한다. 나는 그것을 가지고 있지 않다. 나는 미래에 더 나은 서버로 업그레이드 할 수 있지만, 이제는 기본 리눅스 호스트에 붙어있다. –

+0

@TiagoOliveira 선택은 너의 것이다. 비용 대 사용자 보안. HTTPS 보안을 제공하지 않을 경우 사용자에게 로그인 할 수 없다는 점을 명시 적으로 알려줍니다. – zaph

0

나는 내가 단지 내 서버에 정체성을 사용자에게 토큰을 사용하여 점수를 증가, 내가, 로그인 페이스 북의 100 %의 핸들이 할 및 HTTPS를 통해 Google에 트링 무슨 achived 생각

1 토큰과 점수는 암호화되어 서버가 토큰을 발견하고 난 모든 데이터가 저장되는 점수

참고 사용자 ID를 검색하고 증가하는 페이스 북이나 구글에 대한 호출을 만들기 위해 HTTPS를 사용하는 개인 키를 사용하여 서버
2로 전송 내 서버에서 100 % 공개, 나는 누군가에 대한 개인 정보를 저장하지 않는, 나는 단지 토큰을 보호하기를 원한다면, 누군가 토큰을 얻고 많은 호출을 시작하면 사용자 당 200 통화/시간의 페이스 북 한도에 도달하여 내 앱이 작동하지 않게 될 수 있습니다.

내가 응용 프로그램에서

안드로이드

String pubKeyPEM = "***"; 

public void something(){ 
    String sendToServer = Base64.encodeToString(RSAEncrypt("test"),0); 
} 

public byte[] RSAEncrypt(final String request) throws Exception { 
    PublicKey publicKey = getPublicKey(); 
    cipher = Cipher.getInstance("RSA/None/PKCS1Padding"); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    return cipher.doFinal(plain.getBytes()); 
} 

public PublicKey getPublicKey() throws Exception { 
    PublicKey publicKey; 

    byte[] decoded = Base64.decode(pubKeyPEM, Base64.DEFAULT); 
    KeyFactory kf = KeyFactory.getInstance("RSA"); 
    publicKey = kf.generatePublic(new X509EncodedKeySpec(decoded)); 

    return publicKey; 
} 

PHP

$privkey = '-----BEGIN RSA PRIVATE KEY-----'; 

function decrypt($data){ 
global $privkey; 

    if (openssl_private_decrypt(base64_decode($data), $decrypted, $privkey)) 
     $data = $decrypted; 
    else 
     $data = ''; 

    return $data; 
} 

개인 키는 뜻을 수익을 올릴 시작할 때 나는 미래에 SSL로 업그레이드됩니다

더 안전한 곳으로 이사해야하지만, 내가 원했던 것처럼 작동하고있다.

내 서버는 내 앱 ID로 토큰이 생성되었는지 여부도 확인하기 때문에 다른 토큰을 사용하려고하면 다른 앱 ID가 표시됩니다.

관련 문제