Public-key Cryptography & Android App Signing

암복호화는 어플리케이션 상품을 만들 때 꼭 필요한 개념인 것 같다. 안드로이드 어플리케이션의 경우 중요 파일을 암호화 하지 않은 경우 APK를 까서 파일 등을 읽거나 조작하는 것이 가능하다. 또한 웹 서버와 클라이언트 어플리케이션 간의 통신에도 중요 정보를 암호화하여 송수신하는 과정이 필요하다.

특히 Public-key Cryptography (다른 말로는 Asymmetric Cryptography)가 많이 쓰이는 개념인 것 같은데, 이를 이해하기 쉽게 설명해 준 블로그를 찾았다. 핵심만 요약하면 다음과 같다.

  • Private Key로 암호화한 것을 Public Key로 복호화할 수 있다. Public Key로 암호화 한 것을 Private Key로 복호화할 수 있다.
  • Private Key는 유일하게 간직되어야 하고, Public Key는 여러개를 만들어 배포한다.
  • Public Key를 들고 있는 사람의 입장에서, 복호화 해야 할 파일을 수신했을 때 이를 들고 있는 Public Key로 복호화 할 수 있다면 이 파일이 진정 Private Key를 들고 있는 사람으로부터 온 것이라 믿고 신뢰할 수 있다… Private Key의 유일성이 보장된다면.

(여담: 위와 같이 유일한 Private Key와 다수의 Public Key가 맞물려 동작하는 데는 특수한 알고리즘 관여할 것이다. 말로는 단순하지만 abstraction 뒤 알고리즘의 동작은 단순하지 않을 것 같다. 수학은 정말 범접하기 어렵지만 유용한 학문인 것 같다!)

이를 활용하는 예로 안드로이드 App Signing을 들 수 있다. 안드로이드 앱을 정식으로 배포하려면 앱을 서명하는 절차를 거쳐야 한다. App Signing이라고 불리는 이 과정에서 앱의 저작자가 Digital Certificate을 APK에 붙이는데, 이 Digital Certificate은 저작자가 들고 있는 Private Key와 짝이 맞는 Public Key이다 (그래서 public-key certificate이라고도 한다). 고객이 Public Key를 계속 들고 있고 제작자가 같은 Private Key를 유일하게 보유한다면, 추후 고객이 앱을 업그레이드 할 때마다 업그레이드 할 파일들이 진정 앱 제작자로부터 온 것인지 신원을 확인할 수 있는 셈이다.

이 모든 것은 Android Fingerprint API에 대한 팟캐스트를 듣고 나서 찾아본 것이다. Fingerprint Authentication도 일종의 cryptography일 텐데, 한번 들은 걸로는 잘 이해하지 못했어서 숙제로 남겨둔다.

[참조]

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중