PKI/ 코드서명 2016. 9. 29 전길수 kschun@kisa.or.kr kschun68@gmail.com
전자서명과공인인증서 - 전자서명방식 전자서명알고리즘 : RSA, DSA 철수 영희 메시지생성 메시지전송 해쉬값생성 해쉬함수 해쉬값생성 해쉬함수 철수개인키 전자서명알고리즘 철수공개키 두값의일치여부확인 서명생성 - 서명전송 전자서명알고리즘 1
전자서명과공인인증서 - 공개키암호와전자서명 공개키암호 (A 가 B 에게평문 M 을암호화하여보내는경우 ) B 의공개키 잠김 B 의비밀키 열림 A B ( 어느누구도암호문을생성할수있지만오직 B 만이복호가능 ) 전자서명 (A 가 B 에게평문을서명하여보내는경우 ) A 의비밀키 잠김 A 의공개키 열림 A (A 만이서명을할수있지만어느누구도확인가능 ) B 2
전자서명과공인인증서 - 공개키인증서 공개키인증서 (X.509 V3) V1 (88) V2 (94) V3 (97) Certificate format version Certificate serial number Signature algorithm id for CA Issuer X.500 name Validity period Subject X.500 name Subject public key info Issuer unique identifier Subject unique identifier Type Criticality Value Type Criticality Value Type Criticality Value CA Signature (not used) (not used) Extensions 3
전자서명과공인인증서 - 공개키기반구조 (PKI) 전자문서 전자문서 전자문서 전자서명생성 전자서명 bc12726da4354a6 5b7cd6bc7d98a9c 8bc8 전자문서 + 전자서명 + 인증서 정보통신망 전자서명 bc12726da4354a6 5b7cd6bc7d98a9c 8bc8 전자서명검증 서명자및변조여부확인 인증서 인증서 비밀키 공개키 인증기관 (CA) * PKI: Public Key Infrastructure * CA: Certification Authority 신분확인후인증서발급 인증서발급 / 관리업무수행 인증기관의인증서요구 ( 없을경우 ) 수신받은인증서의유효기간및취소여부확인 4
전자서명과공인인증서 - 공개키기반구조 (PKI) 사용자들의공개키를인증하고안전하게교환할수있도록하기위한하부구조 공개키암호시스템을사용하는데필요한모든서비스제공 인증기관이핵심구성요소 단순히인증서를발급하는것외에다양한정보보호서비스를제공 인증서관리서비스 정책수립 / 승인, 인증서발급, 인증서폐지, 인증서공개, 인증서보관, 보조서비스 등록, 데이터보관, 공증, 키복구, 디렉토리서비스 암호학적서비스 전자서명생성, 전자서명검증, 공개키 / 개인키생성, 비밀키생성, 비밀키분배 5
전자서명과공인인증서 - 인감 vs. 전자서명 인감 인감 : 종이문서 + 인감도장날인 종이문서 1999 년. 계약함.. 洪吉東 洪吉 東印 ( 인 ) 吉洪印東 인감등록 정부기관인감증명서발급 전자서명 서명된전자문서 : 전자문서 + 전자서명 전자문서 1999년. 계약함.. 洪吉東 해쉬알고리즘 ( 인 ) 전자서명알고리즘 비밀키 비밀키 ( 전자서명생성키 ) 공개키 ( 전자서명검증키 ) 공개키등록 공인인증기관 전자인증서발급 종이문서 1999 년. 계약함.. 洪吉東 洪吉東印 ( 인 ) 비교확인 인감증명서 洪吉東 洪吉東印 전자서명 bc12726da4354 a65b7cd6bc7d9 전자문서 1999년. 계약함.. 홍길동 ( 인 ) 공개키 전자서명알고리즘 해쉬알고리즘 확인검증 6
전자서명과공인인증서 - 전자서명의요건 위조불가 전자서명생성키를소유하지않은자는전자서명생성불가 변경불가 전자서명생성키를소유하지않은자는전자문서변경불가 서명자인증 전자서명생성키를소유한자가전자서명의행위자임 재사용불가 A 문서의전자서명을 B 문서의전자서명으로재사용불가 부인방지 전자서명생성키의소유자가전자서명후서명행위에대한부인불가 7
공인인증서 - 공개키인증서 X.509 v1 (1988) X.509 v2 (1994) 인증서기본필드버전일련번호서명알고리즘발급자유효기간소유자소유자공개키정보발급자고유식별자소유자고유식별자 X.509 v3 (1997) 인증서확장필드전자서명 인증서확장필드 발급자공개키식별자소유자공개키식별자키사용목적확장키사용목적소유자비밀키유효기간인증서정책인증서정책매핑소유자대체명칭발급자대체명칭소유자디렉토리정보기본제한명칭제한정책제한인증서효력정지및폐지목록분배점최신 CRL (2000) 모든정책금지 (2000) 발급자정보접근 (RFC3280, 2002) 소유자정보접근 (RFC3280, 2002) 8
플랫폼별코드서명 어플리케이션코드서명체계현황 어플리케이션을위한툴 ( 개발환경및라이브러리 ) 을제공 일관성있는어플리케이션개발어플리케이션개발단계 코드서명개발자확인어플리케이션데이터공유마켓정책준수확인 9
플랫폼별코드서명 코드서명용도 Symbian 앱의시스템기능제약용사용시스템기능레벨에따라서명 & 테스팅하우스에제출서명용배포자 ID 는 Symbian 허용한 TC 나 VeriSign 에서발행 BlackBerry 주요 API 들의사용관리 & 모니터링용개발자의저작권보호용서명용키는 RIM 이제공 IOS 앱의출처확인용서명용키는 Apple(CA) 에서발행 Apple 이서명검증후마켓에업로드 Windows Phone 7 정책준수여부확인용신뢰성, 성능, 자원관리, 기능, 보안요구사항만족여부 VeriSign 인증서이용한서명 Android 어플리케이션코드와데이터공유, 일관된업데이트용서명용키는 JDT 표준툴이용, 별도의 CA 없음 10
국내마켓별코드서명 안드로이드마켓 패키지이름으로앱구분개발자의자가-인증서명업로드후, 수분내게시개발자서명그대로게시마켓정책준수여부만검사서명검증 인증서유효기간 (25년) 서명의유효성 11
국내마켓별코드서명 올레마켓 패키지이름으로앱구분개발자의자가-인증서명업로드후, 약 7일후게시마켓정책준수검사개발자서명제거마켓의개발자별키로서명 마켓이키생성마켓이개발자별키관리인증서체인 서명검증 인증서유효기간 (25년) 서명의유효성 quality check? 12
국내마켓별코드서명 올레마켓 13
국내마켓별코드서명 T-Store 업로드후, 약 7일후게시개발자의자가-인증서명유지 quality check? 14
국내마켓별코드서명 OZ Store 업로드후, 약 5일후게시개발자의자가-인증서명유지 quality check? 국가코드만존재 15
코드서명보안요구사항 - 안드로이드코드서명문제점 안드로이드코드서명의문제점자가서명인증서사용인증서에사용자의정보가없거나허위일수있음누구나본인혹은타인명의로서명을생성할수있음실제적인코드위변조확인기능을지원하지못함 악성코드 국가코드만존재 16
코드서명보안요구사항 - 악성코드 안드로이드취약점을이용한악성코드 app 에대한보안검증절차없음 self-signed certificate 로는개발자확인불가유명한앱다운로드 악성코드를삽입 해커의서명키로서명 repackaging 안드로이드마켓에유포악성앱유통사례계속증가대표적인악성앱 2010 년 8 월 Trojan-SMS.AndroidOS 최초의트로이목마형안드로이드악성코드 동영상플레이어인 Movie Player 로위장 SMS 전송, 과금유발 2010 년 12 월 Geinimi 2011 년 3 월 Android/Spyware.PJApps.a 유명게임으로위장 개인정보를유출, C&C 서버로전송, SMS 발송, 전화발신등다른유명앱으로위장되어유포 대응이어려움개발자의신원과앱을게시한마켓을확인필요 안드로이드자가서명의취약점을개선한코드서명체계필요 17
코드서명보안요구사항 사용자개발자확인유통마켓확인배포과정상의변조여부확인마켓개발자확인동일개발자인식개발자의프로그램작성부인방지마켓정책준수검증개발자일관된개발및배포과정배포과정의변조여부확인위조된서명으로부터개발자보호마켓의프로그램위변조부인방지하나의서명된앱을여러마켓에복수게시호환성현재의 ADT 나 JDK 를이용한구현기존마켓을통한배포기존안드로이드폰에서서명검증 18
안드로이드앱개발및테스트환경 JDK(Java Development Kit) keytool, keystore, jarsigner Eclipse ADK(Android Development Kit) Export Wizard ADT JDK keytool jarsigner zipalign password public/ private key keystore unsigned application signed application signed & aligned application 19
안드로이드앱개발및테스트환경 - 자바툴 Keystore Key repository Entry: key(key alias) 와 certificate Protection: keystore password, key password Keytool Key generation algorithm DSA SHA1withDSA RSA MD5withRSA Certificate X.509 certificate spec X.500 distinguished name code64 (RFC 1421) SHA1withRSA 20
안드로이드앱개발및테스트환경 - 자바툴 Keytool 주요 option 과 default 180 DSA/RSA 21
안드로이드앱개발및테스트환경 - 자바툴 Keytool 인증서 Subject CN: 이름 OU: 조직단위 O: 조직이름 L: 구 / 군 / 시 ST: 시 / 도 C: 국가코드 22
안드로이드앱개발및테스트환경 - 자바툴 Jarsigner 압축파일 (.zip,.apk) 에서명서명검증주요 option 과 default Zipalign for performance SHA1withRSA 23
안드로이드코드서명구조 Debugging Key 자동생성 Release key Eclipse Wizard Keytool & Jarsigner 24
안드로이드코드서명구조 서명파일구조.apk 압축파일 META-INF MANIFEST.MF CERT.SF CERT.RSA 서명안된파일 25
안드로이드코드서명구조 서명파일구조 26