간단하고 안전한 앱 패키지 디자인 – APPX

Windows 8 앱 개발자 블로그

Windows 8 엔지니어링 팀에서 제공하는 Windows 8용 Metro 스타일 앱 개발의 이해

간단하고 안전한 앱 패키지 디자인 – APPX

  • Comments 0

우리가 새로운 Windows 8 개발 플랫폼 개발에 착수하면서 맨 처음에 했던 질문은 "앱을 어떻게 간단하면서도 안전한 형식으로 패키징할 것인가"였습니다. Windows 8 이전의 주요 설치 기술로는 Windows InstallerClickOnce가 있었습니다. 안정적이고 신뢰할 수 있는 앱 개발 블로그 게시물에 나와 있는 것처럼 개발자들이 앱 설치 및 업데이트 과정의 복잡성을 완화하는 데 도움이 되는 제품은 많이 있습니다. 그러나 개발자와 최종 사용자는 여전히 앱 패키징, 설치, 업데이트에 계속 부담을 느끼고 있습니다. 앱 패키징 및 배포의 주된 목적은 설치 스크립트가 전혀 필요 없는 매우 직관적인 프로세스를 만드는 것이었습니다.

또한 Windows 스토어 앱은 네이티브 코드와 관리 코드에 사용되는 기존의 기술, 그리고 Windows 런타임을 통해 제공되는 새로운 기술을 모두 지원해야 하는 과제도 안고 있었습니다. 더욱 중요한 사실은 뛰어난 새 아이디어를 가지고 있지만 이제 막 앱 개발을 처음으로 배우기 시작한 새로운 개발자들에게 앱 구축 방법을 공개하고 싶었다는 점입니다. 개발자들이 사용하기 쉽고, 광범위한 앱 기술을 지원하고, 패키징, 설치 및 업데이트 과정이 효율적인 것이 필요했습니다. 안전하면서도 간단하고 이상적인, 그런 것이 필요했습니다. 그래서 Windows 8 APPX(“.appx”) 앱 패키지 형식이 탄생하게 된 것입니다.

간단함

우리는 간단하게 만드는 데 중점을 두었습니다. 이전의 설치 관리자 기술은 설치 스크립트 작성 방법을 따로 배우거나 특수 도구를 사용하여 특수한 이진 형식으로 앱을 구축해야 했습니다. Windows 스토어 앱의 경우 새로운 방식을 고안하기보다는 한걸음 물러나 기존의 표준에 기반을 두고 만드는 방법을 고려해 보았습니다. 알려진 모든 앱 패키징 기술을 정리해서 각각 점수를 매기고 다양한 기능의 장단점에 가중치를 부여했습니다. 수 차례 논의를 거듭한 끝에 간단하지만 대중적인 ZIP을 출발점으로 결정했습니다.

ZIP은 1989년에 처음 개발되었으며 대중적인 만큼 오래된 기술입니다. 여기에는 장단점이 있습니다. 장점은 널리 알려져 있듯이 지원이 잘된다는 것이고, 단점은 최신 웹이나 XML 같은 여러 첨단 기술에는 못 미친다는 것입니다. 또한 ZIP 형식 사양에는 오늘날의 기술과 관련이 없는 오래된 기능에 대한 요구 사항이 다수 포함되어 있습니다. 예를 들어 여러 플로피 디스크에 분할하는 기능은 요즘은 거의 사용하지 않는 기능입니다. 그러나 가장 큰 문제는 ZIP이 사실상의 표준이지만 개방형 국제 표준은 아니라는 점이었습니다. 그럼 OPC에 대해 본격적으로 알아보겠습니다.

표준 기반: ZIP + 웹 + XML = OPC

2006년에 다른 Microsoft 그룹과 함께 일하던 Office 팀이 새로운 OPC(Open Packaging Convention) 표준을 개방형 국제 표준으로 공개 발표할 것을 제안해 왔습니다. OPC는 2006년에 ECMA 국제 표준으로 ECMA 376-2에 처음 발표되었고, 2008년에 국제 표준 기구에서 ISO/IEC 29500-2에 채택했습니다.

표준 기반

그림 1: 표준 기반

ECMA 376-2 및 ISO 29500-2 OPC 표준은 APPNOTE.TXT라는 .ZIP 파일 형식 사양을 참조하지만 OPC의 강점은 ZIP 기능에 기반을 둔 특수한 자격에 있습니다. OPC는 또한 웹 기술의 개념(예: URI 호환 이름)을 통합하고 시스템과 사람이 읽을 수 있는 선언적 기술로 XML을 표준화합니다. 중요한 점은 OPC가 단순한 파일 형식이 아니라 "새로운 파일 형식을 정의하고 만들기 위한" ZIP 기반의 컨테이너 파일 기술이기도 하다는 점입니다. OPC는 본래 의도한 Office 10 Word(.docx), Excel(.xlsx) 및 PowerPoint(.pptx) 형식뿐만 아니라 여러 새로운 Microsoft 및 타사 파일 형식에서도 점차 많이 사용되고 있습니다(Wikipedia: OPC를 사용하는 파일 형식).

OPC의 또 다른 장점은 관리 코드(Sytem.IO.Packaging)와 네이티브 코드(데이터 액세스 및 저장소 | 패키징) 모두에 사용할 수 있고, 테스트를 통과했고, 사용할 준비가 된, 기존의 공용 OPC API가 있었다는 점입니다. 우리는 공용 OPC API를 바탕으로 APPX 전용의 공용 앱 패키징 및 배포 API를 만들었습니다. 그리고 APPX API는 관련 앱 패키징 도구를 구축하는 데 사용됩니다. 모든 APPX 도구와 API는 Windows 8 SDK에 포함되어 공개적으로 제공되고 있습니다.

앱 구축 기본 사항

Visual Studio Express 2012에서 제공하는 IDE를 사용하여 Windows 스토어 앱을 구축하거나 Windows 8 SDK와 함께 제공되는 앱 패키징 도구 MakeAppx.exe와 간단한 텍스트 편집기 등의 도구를 사용하여 “직접” 앱을 구축할 수 있습니다. 예를 들어 텍스트 편집기나 원하는 HTML 편집기를 사용하여 간단한 웹 앱을 작성한 다음 ZIP 도구와 유사하게 작동하는 MakeAppx 유틸리티로 패키징할 수 있습니다.

APPX 패키지의 핵심 기능은 앱을 배포, 표시 및 업데이트하는 데 필요한 앱의 시스템 요구 사항을 정의하는 데 사용되는 선언적 XML입니다. 특수 도구가 필요하고 사용자 지정 스크립팅이 필요한 경우가 많은 이진 데이터베이스보다는 앱이 사용하는 응용 프로그램의 ID, 종속성, 기능, 시각적 요소계약에 대한 세부 정보를 지정하는 “AppxManifest.xml”에 정의된 응용 프로그램 패키지 매니페스트를 사용하십시오. 모든 Windows 스토어 앱에는 패키지 매니페스트 파일이 포함되어 있습니다. Visual Studio에서 자동으로 생성된 것을 사용하거나 원하는 텍스트 편집기를 사용하여 수동으로 패키지 매니페스트를 생성할 수 있습니다. 이 코드 예에서는 샘플 AppxManifest.xml 파일을 보여줍니다.

<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest">
<Identity Name="MyCompany.MyAppSuite.MyApp" Version="1.0.0.0"
Publisher="CN=C58FDA15-2FCE-4CFB-ACA0-3981ED7222D7" />
<Properties>
<DisplayName>Postcards</DisplayName>
<PublisherDisplayName>MyCompany</PublisherDisplayName>
<Logo>images\MyCompanyLogo.png</Logo>
</Properties>
<Resources>
<Resource Language="en-US" />
</Resources>
<Prerequisites>
<OSMinVersion>6.2</OSMinVersion>
<OSMaxVersionTested>6.2</OSMaxVersionTested>
</Prerequisites>
<Applications>
<Application Id="App" StartPage="default.html">
<VisualElements DisplayName="Postcards App" Description="Postcards App ..."
Logo="images\postcards-logo-lg.png" SmallLogo="images\postcards-logo-sm.png"
ForegroundText="light" BackgroundColor="#0084FF" ToastCapable="true">
<DefaultTile ShowName="true" />
<SplashScreen BackgroundColor="" Image="images\postcards-splash.png" />
</VisualElements>
<Extensions>
<Extension Category="windows.search" StartPage="default.html" />
</Extensions>
</Application>
</Applications>
</Package>

보안을 위해 모든 APPX 패키지는 디지털로 서명되어야 합니다. Visual Studio 2012 및 MakeAppx 유틸리티는 앱을 보호하기 위한 첫 번째 단계로 각 APPX ZIP 패키지를 구축할 때 AppxBlockMap.xml 파일을 만들고 삽입합니다. 이 블록 맵 파일은 패키지의 모든 파일에 대한 암호화 블록 해시를 저장하며, 패키지가 서명될 때 블록 맵 파일 자체가 디지털 서명으로 확인되고 보호됩니다. 블록 맵 파일은 APPX 패키지가 증분식으로 다운로드되고 검사되도록 지원하며, 설치된 후 앱 파일에 대한 차등 업데이트를 지원합니다.

다음 이미지는 Visual Studio 11 Express 또는 MakeAppx.exe 유틸리티를 사용하여 앱 파일을 APPX 패키지로 구성하는 절차를 보여줍니다.

Visual Studio 11 Express 또는 MakeAppx 유틸리티를 사용하여 APPX 패키지 만들기

그림 2: Visual Studio 11 Express 또는 MakeAppx
유틸리티를 사용하여 APPX 패키지 만들기

1단계는 앱 패키징을 간단하게 만드는 것이고, 2단계는 앱 보안을 간단하게 만드는 것입니다.

보안

응용 프로그램 보안은 특히 소비자에게 매우 중요한 문제임에 틀림없습니다. 다른 여러 패키징 기술과 마찬가지로 APPX 패키지는 디지털 서명을 사용하여 앱 보안을 유지합니다. 디지털 서명은 서명된 앱 콘텐츠가 변경되지 않게 방지하지는 못하지만 서명된 콘텐츠에 변경된 항목이 있을 경우 서명 검사가 실패하게 됩니다.

Windows 스토어를 통해 배포할 앱을 만드는 개발자의 경우 스토어에서 자동으로 처리해 주므로 서명 과정이 간단합니다. 앱을 만든 후 Windows 스토어 개발자 포털에 로그인하고 .appx 파일을 업로드(https)합니다. 그러면 Windows 스토어가 일련의 검사를 수행한 후 등록된 개발자 이름이 포함된 인증서로 앱에 서명합니다. 서명이 끝나면 앱이 Windows 스토어에 게시되고 다운로드하여 배포할 수 있습니다. 이보다 더 간단할 수는 없습니다!

엔터프라이즈 또는 시험 사용을 위한 앱을 구축하는 경우 APPX 패키지에 직접 서명할 수도 있습니다. Visual Studio Express 2012를 통해 자동으로 처리하거나 표준 Windows SignTool 유틸리티를 사용하여 Authenticode 서명을 패키지에 추가할 수 있습니다. 그림 3에는 Visual Studio Express 또는 Windows SignTool을 사용한 APPX 패키지 서명 과정이 나와 있습니다.

Visual Studio 11 Express를 사용하거나 SignTool을 사용하여 직접 APPX 패키지에 서명

그림 3: Visual Studio 11 Express를 사용하거나
SignTool을 사용하여 직접 APPX 패키지에 서명

디지털 서명이 제공하는 두 가지 핵심 기능은 다음과 같습니다.

  • 서명 주체("서명한 사람")를 안전하게 식별
  • 서명된 콘텐츠가 변경되지 않았는지 확인

APPX 패키지는 보안 기준이 엄격합니다. 모든 APPX 패키지는 서명되어 있고 서명이 유효한 것으로 검증된 후 설치할 수 있습니다. 서명은 사용자에게 실행 중인 앱에 대한 신뢰를 제공하고 원본 앱 파일이 악의적인 사용자나 타사 소프트웨어에 의해 수정되지 않았는지 정기적으로 확인할 수 있는 수단을 제공합니다. Windows 스토어에서 패키지를 다운로드하는 소비자의 경우 Windows 스토어 품질 및 바이러스 백신 검사를 통과한 후 Windows 스토어에서 서명한 앱만 다운로드할 수 있습니다.

앱 보안

APPX 디지털 서명은 다중 사용이 가능하며 엔터프라이즈 IT 관리자 및 타사 개발자가 알아두면 좋은 몇 가지 디자인 요소가 있습니다. Windows 스토어 앱은 3단계 보안 모델을 사용합니다.

  • 패키징된 앱 보안
  • 배포된 앱 보안
  • 런타임 앱 보안

패키징된 앱 보안

일반적으로 대부분의 설치 관리자 기술은 배포 컨테이너를 한 단위로 서명합니다. APPX 패키지 디지털 서명은 패키지 단위 또는 증분식 유효성 검사를 제공하도록 설계되었습니다.

패키지 유효성 검사

APPX ZIP 파일을 한 단위로 서명하면 전체 패키지에 초기 수준의 보호가 제공됩니다. ZIP 파일에는 ZIP 내에 저장된 앱 콘텐츠 파일 외에도 로컬 파일 헤더, 데이터 설명자 및 중앙 디렉터리 등 보호해야 하는 내부 구조가 포함되어 있습니다. APPX를 한 단위로 서명하면 수정 여부를 확인할 때 디지털 서명으로 내부 구조를 포함한 모든 콘텐츠의 유효성을 검사할 수 있습니다.

증분식 유효성 검사

패키지의 유효성을 검사하려면 한 단위로 서명된 전체 파일이 있어야 합니다. 그러나 웹을 통해 패키지를 전송할 경우 콘텐츠 오류를 조기에 빨리 탐지하는 것이 좋습니다. 이를 위해 각 APPX 패키지에는 각 앱 콘텐츠 파일에 포함된 각 블록에 대한 암호화 해시를 나타내는 AppxBlockmap.xml 파일이 포함되어 있습니다. AppxBlockmap.xml 파일에 포함된 해시 값을 사용하면 각 응용 프로그램 파일이 웹을 통해 다운로드될 때 증분식으로 콘텐츠의 유효성을 검사할 수 있습니다.

배포된 앱 보안

이전 기술은 특정 파일을 각각(.exe 및 .dll) 서명하는 것이 가능했지만 특정 파일 형식 자체에서 디지털 서명을 지원하지 않을 경우 응용 프로그램 파일의 대다수 형식은 설치된 후 유효성을 검사할 방법이 없었습니다.

텍스트, JavaScript, XML 및 기타 여러 일반 파일 형식은 기본적으로 디지털 서명을 지원하지 않습니다. APPX 디지털 서명 디자인은 패키징된 APPX 서명 파일(AppxSignature.p7x 및 AppxBlockmap.xml)을 클라이언트에 복사된 다른 응용 프로그램 콘텐츠 파일과 함께 배포하여 나중에 응용 프로그램 파일의 "일부 또는 전부"에 대해 유효성 검사를 수행할 수 있다는 특징이 있습니다.

중요: APPX 디지털 서명은 앱 패키지에 포함된 모든 파일에 효과적으로 서명하고, 앱 파일이 추출되고 디스크에 설치된 후 앱 파일의 유효성을 검사하는 데 사용될 수도 있습니다.

appx_deployment

그림 4: 서명된 APPX 패키지 배포

런타임 앱 보안

Windows 스토어 앱은 특수하게 보호되는 앱 컨테이너 환경 내에서 실행하는 방식으로 런타임 보안을 이미 개선했습니다. 앱이 컨테이너 내에서 실행될 경우 다른 앱과 직접 상호 작용하거나 다른 앱에 영향을 줄 수 없습니다. 또한 앱은 하드웨어 및 시스템 리소스에 제한적으로 액세스할 수 있습니다. 안정적이고 신뢰할 수 있는 앱 개발 블로그 게시물에 앱 컨테이너 환경의 특징이 자세히 나와 있습니다.

결론

Windows 스토어 앱을 위한 새로운 APPX 패키지 형식은 앱 패키징을 간단하고 안전하게 만드는 혁신적인 기술을 사용합니다. 이러한 패키지는 표준 기반의 OPC 형식을 활용하며 앱 패키징을 간편하게 만들어 주는 Visual Studio Express 2012 또는 독립 실행형 MakeAppx 도구를 사용하여 쉽게 만들 수 있습니다. 디지털 서명을 사용하면 각 패키지를 안전하게 만들고 최종 사용자를 보호할 수 있습니다.

APPX 패키지를 사용하여 즐겁게 앱을 구축해 보십시오!

- Windows 프로그램 관리자, Jack Davis

  • Loading...
Leave a Comment
  • Please add 4 and 3 and type the answer here:
  • Post