김보안의 블로깅
  • 🏠 Home
  • 📚 Project
    • Blockchain
      • 🎦 PickMe
      • 🎦 IoTC
      • 🎦 Blackchain
      • 📃 Gemology
      • 🎦 PickMe
      • 🎦 PickMe
    • AI
      • 👋 A.I. Dream Reader
      • 🎦 A.I. Dream Reader
    • Security
      • 🎦 SNAC
    • Education
      • 🎦 Smart Lecture
  • 🤸‍♂ Hobby
    • Music
      • Violin
      • Guitar
      • Piano
      • Drum
    • Flower
      • Flower Certificate
    • Sport
      • Ski
      • Skateboard
      • Golf
      • Boxing

2016년 6월 1일 수요일

Android Signing Verify( CERT.RSA, CERT.SF, MANIFEST.MF mean )

 SecureKim     오후 11:41     android, apk, app, cert.rsa, cert.sf, manifest.mf, Security, signing, verify     No comments   



안드로이드를 보면 'Apk Signing' 이라는 말이 많이 나옵니다.

그리고 누구나 마켓에 앱을 올리기 위해 앱을 사이닝 합니다.

하지만 플랫폼이 어떤식으로 검증하는지는

실제로 잘 모르는 분들이 많습니다. 저 또한 안드로이드 보안 한다면서

대강만 알고 있었기에 이번에 제대로 정리합니다.


Apk Signing 을 하면 META-INF 폴더안에 3가지 파일이 생기는데,

CERT.RSA, CERT.SF, MANIFEST.MF 파일입니다.


먼저 MANIFEST.MF 파일을 보면 다음과 같은 구조로 되어있습니다.


Manifest-Version: 1.0
Created-By: 1.0 (Android SignApk)

Name: res/drawable-hdpi-v4/a.png
SHA1-Digest: 9N951JbaBqMwJu6neE80ZxknAaA=

Name: res/drawable-hdpi-v4/b.png
SHA1-Digest: aKuzkBMBNNlmgMu9Kfcl7CVk2Ec=


아시다시피 각 파일에 대한 해시값이 계산되어 기록되어있습니다.


CERT.SF 파일은 다음과 같은 구조로 되어있습니다.


Signature-Version: 1.0
Created-By: 1.0 (Android SignApk)
SHA1-Digest-Manifest: 7xpSMheWj+9cc+YiEZUoa52CaZc=

Name: res/drawable-hdpi-v4/a.png
SHA1-Digest: 5tNwzpVMTwTTh82YDhYYPnI7Ljc=

Name: res/drawable-hdpi-v4/b.png
SHA1-Digest: 5l/YxPScJe4eaks0aiKJHIwKrK4=


가장 윗 부분에는 MANIFEST.MF 에 대한 해시값이,
나머지는 MANIFEST.MF 에 기록되어있는 Name, SHA 값, \r\n 값까지 포함해서 3줄을 
해시한 값입니다.



CERT.RSA 에는 공개키와 주체 등이 적혀있고

동일한 앱 이름인데 다른 사이닝 키를 사용하면 충돌합니다.

여기까지는 대부분 아시는 부분입니다.



그런데 위 내용만 안다면 다음과 같은 의문이 생기게 됩니다.

해커가 hack.png 파일을 해시해서 MANIFEST.MF 와 CERT.SF 에 각각 계산해 넣고,

CERT.RSA를 그대로 둔다면....



네. 당연히 막히는데 이유는 다음과 같습니다.


CERT.SF 를 키스토어 개인키로 암호화 한 시그니쳐가 CERT.RSA에 기록되기 때문입니다.


그래서 안드로이드 플랫폼에서는 공개키로 CERT.RSA에 기록된 시그니쳐를 복호화 하고,

실제 CERT.SF 와 비교하는 방식으로 앱 검증을 하게 됩니다. 


이런 내용이 상세히 기록되어있는 블로그는 거의 없고.. 
그냥 앱을 사이닝해서 검증한다는식으로 얼버무리거나
'CERT.SF 내부의 암호화된 값들을 공개키를 이용하여 복호화 하고' 
같은 말도안되는 정보가 많아서 기록으로 남깁니다.




Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
최근 게시물 이전 게시물 홈

페이지

  • 홈
  • Hobby

Categories

  • AI
  • android
  • AWS
  • Blockchain
  • Hardware
  • Javascript
  • mysql
  • Node.js
  • Plasma
  • review
  • Security
  • Study
  • Video
  • windows

Popular Posts

  • 블랙보드 강의 녹화 영상 다운로드 가능한 방법 (노설치)
    별도의 설치도 필요 없고 아주 쉽습니다. 구글 크롬브라우저 에서 블랙보드 녹화 영상에  다운로드 가능한 메뉴가 나오게 하는 코드입니다.  먼저 블랙보드 강의자료에 입장하고, 재생 버튼을 클릭 하지 않은 상태로 F12 를 입력합니다. 재생을 클릭하지 마세요.
  • [Node.js] Redis 의 hmset
    Redis 의 hmset 사용하기 var redis = require('redis'); var client=redis.createClient(포트,호스트,null); /* * MySQL을 사용하다가 Redis를 사용해보니 신세...
  • 안드로이드 음성 소켓 통신 (2월 단기)
    안드로이드-음성을 패킷화 하여 P2P 소켓 통신. 처음엔 TCP로 구현했었는데 서버 과부하를 줄일 수 있도록 P2P로 구현하겠노라 큰소리 쳤습니다. P2P는 홀펀칭이 필요하며 따라서 TCP로는 어렵다는 것을 알게 되었죠. 각 단말...

Blog Archive

  • ►  2023 (1)
    • ►  1월 (1)
  • ►  2022 (10)
    • ►  12월 (1)
    • ►  11월 (3)
    • ►  9월 (1)
    • ►  8월 (1)
    • ►  6월 (2)
    • ►  3월 (2)
  • ►  2021 (9)
    • ►  12월 (3)
    • ►  11월 (1)
    • ►  6월 (1)
    • ►  5월 (2)
    • ►  4월 (2)
  • ►  2020 (12)
    • ►  10월 (1)
    • ►  9월 (2)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (5)
    • ►  4월 (1)
    • ►  2월 (1)
  • ►  2019 (14)
    • ►  10월 (2)
    • ►  7월 (1)
    • ►  3월 (4)
    • ►  2월 (2)
    • ►  1월 (5)
  • ►  2018 (14)
    • ►  12월 (2)
    • ►  11월 (4)
    • ►  10월 (1)
    • ►  8월 (2)
    • ►  5월 (4)
    • ►  1월 (1)
  • ►  2017 (12)
    • ►  10월 (2)
    • ►  9월 (9)
    • ►  5월 (1)
  • ▼  2016 (8)
    • ►  10월 (2)
    • ►  8월 (1)
    • ▼  6월 (1)
      • Android Signing Verify( CERT.RSA, CERT.SF, MANIFES...
    • ►  1월 (4)
  • ►  2015 (6)
    • ►  12월 (3)
    • ►  10월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
  • ►  2014 (10)
    • ►  11월 (1)
    • ►  9월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (3)
    • ►  4월 (1)
    • ►  3월 (2)
  • ►  2013 (28)
    • ►  12월 (3)
    • ►  11월 (6)
    • ►  10월 (6)
    • ►  9월 (6)
    • ►  8월 (1)
    • ►  7월 (3)
    • ►  6월 (3)

구독

글
Atom
글
전체 댓글
Atom
전체 댓글

로드 중입니다...

각오

직접 해보지 않은 것은 포스팅 하지 않겠습니다.

Copyright © 김보안의 블로깅 | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates