2014-11-29 3 views
0

RSA 비공개 키를 저장하려고합니다. 앱이 서버에 보내기 전에 데이터에 서명하여 안전한 곳에 보관하고 싶습니다. 키를 훔치는 것이 앱 폴더에서 복사하는 것보다 훨씬 어렵습니다.Java 응용 프로그램에서 RSA 비공개 키를 안전하게 저장하는 방법은 무엇입니까?

KeyStore은 런타임시 키를 저장하고로드하는 데 사용할 수 있지만, 부호가있는 jar의 비밀번호없이 KeyStore에서 키를로드하려면 어떻게해야합니까?

예를 들어 KeyStore에 "mykey"키를로드하고 App.jar에 서명했습니다. 암호를 지정하지 않고 KeyStore에서 런타임에 키를 자동으로로드하려면 KeyStore을 요청한 응용 프로그램에 서명하고 싶습니다.

아마, KeyStore의 원리를 제대로 이해하지 못했습니다. 그러나 작업은 서버에 전송 된 데이터에 서명하고 키를 안전하게 저장하는 것입니다. (응용 프로그램은 POS 응용 프로그램이므로 시동시 암호없이 자동으로로드되어야합니다.)

+3

수 없습니다. 비밀번호를 어디에 저장 하시겠습니까? 코드에서? 디 컴파일! 파일 시스템에서? 그런 다음 암호화되지 않은 개인 키를 동일한 장소에 쉽게 저장할 수 있습니다. 이건 불가능 해. –

+0

KeyStore는 지정된 인증서로 서명 된 앱에만 개인 키를 제공하도록 구성 할 수 있지만 따라서 필자가 작성하고 서명 한 응용 프로그램 만 암호없이 KeyStore에서 키를 가져올 수 있습니다. 앱 데이터를 보내기 전에 서명하는 작업을 수행 할 수있는 다른 방법이 있습니까? – 12sd

+1

그것이 featre 인 경우 : 저는 단순히 앱의 인증서를 가져옵니다 (암호화되지 않았기 때문에 앱의 공개 정보이기 때문에). 키 스토어로 넘겨주고 키를 추출하도록합니다. Keystore는 인증서가 어디서 왔는지 나 그 인증서로 서명 된 일부 앱을 알 수 없었습니다. IRL은 ​​암호로 키 스토어를 보호 할 수 있지만이 암호는 놓을 수없는 새로운 암호입니다. – zapl

답변

0

다른 사람들도 지적했듯이 앱이있는 사람 (개인 키가 있음)이 개인 키를 추출하지 못하도록 막을 수는 없습니다. 당신은 당신이 성취하고자하는 것에 따라 합리적인 키를 난독화할 수 있습니다. 이 경우 코드의 여러 부분에서 키 비밀번호를 숨기고 언급 한대로 KeyStore를 사용할 수 있습니다. 그것은 실제로 안전하지는 않지만, 당신의 목적에 "충분히 좋을"수 있습니다.

최종 사용자에게 배포 된 모든 키는 비밀로 간주 될 수 없습니다.

더 중요하게는 서버가 클라이언트 코드를 서명했는지 여부를 신뢰하는 경우 서버에 보안 문제가있는 것일 수 있습니다. 클라이언트를 신뢰하는 것보다 보안 속성을 강화하는 다른 방법을 찾아야합니다.

관련 문제