본문 바로가기
개발/삼성 블록체인 플랫폼 SDK

삼성 블록체인 플랫폼 SDK 사용하기 (1) 설정

by 손너잘 2020. 2. 11.
본 내용은 FOUNDERS x SAMSUNG BLOCKCHAIN 교육내용의 정리 및 개인적 부가설명의 추가이며
 
블록체인을 이용한 어플리케이션을 작성하기 위해 삼성 최신폰에 있는 블록체인 기능을 이용하여 블록체인에 대한 지식이 없더라도 간단한 어플리케이션을 작성할 수 있다.
이때 이 블록체인 기능을 사용하기 쉽게 해주는 SDK를 삼성에서 제공해 주고 있는데 이에 대한 사용법에 대하여 포스팅 하도록 하겠다.
 
개발 환경
  • Microsoft Windows 10.
  • Android Studio
 
개발 기기
  • SAMSUNG S10 5G
 
 
 
들어가기에 앞서. 삼성 블록체인 키스토어의 보안 기법에 대해 간단히 짚고 넘어가야 할 부분이 있다.
블록체인에 대해 공부를 한 사람이라면 당연히 인지하듯, 개인키를 어떻게 안전하게 보관하느냐는 가장 큰 관심사 중 하나이다.
삼성 블록체인 키 스토어에서는 이 문제를 해결하기 위해 ARM의 TrustZone ( https://developer.arm.com/ip-products/security-ip/trustzone) 기술을 사용하고 있다.
 
간단히 설명하자면 아래와 같다.
 
 
 
우리는 삼성 휴대폰을 사용할 때 Android 딴의 OS만을 사용하는것 처럼 보이지만, 내부적으로는 보안적으로 안전한 또 다른 OS가 존재하고 있다(삼성에서 사용하는 이름이 따로 있었는데 기억이 안난다.. 그냥 시큐어OS라고 명명하겠다..).
이 두 OS은 메모리 등 자원을 공유하지 않고 다만 Display만 공유하고 있는 상태이다(물리적으로 분리되어 있다). 따라서 각각의 OS는 서로의 영역에 논리적으로 침범하지 못하고 이는 해커가 TrustZone의 데이터에 접근하지 못하도록 한다.
이를통해 삼성은 아래와 같은 보안 솔루션을 내놓았다.
 
우리가 삼성페이등으로 결제할 때 화면에 Knox라는 글씨가 써진 화면을 본 적이 있을것이다. 이때 이러한 화면은 우리가 사용하는 안드로이드 OS에서 발생한 Activity가 아니라 Secure OS에서 발생한 Activity이다.  두 OS의 자원은 물리적으로 분리되어 있지만 DIsplay는 하나를 사용하기 때문에 화면 사용에 대한 인터럽트만 날려주면 특정 상황에서 어느 OS의 화면을 Display에 띄울지에 대한 결정을 할 수 있게 된다. 따라서 Knox가 사용된 어플리케이션에서 해커가 사용자의 비밀번호를 탈취하기 위해 악성코드를 심어두었다가 비밀번호 입력시 화면 캡처를 시도한다면, 그 화면은 검정색만 보이게 된다(Knox가 써진 화면에 한해서). 디스플레이를 사용하고 있는 OS는 Android가 아니라 TrustZone 이기 때문이다.
 
그래서 이것이 뭐가 중요한가 하는데, 이기술이 삼성 블록체인 키 스토어의 핵심 기술이 된다.
키 스토어의 목적은 결국 해커로 부터 개인키를 안전하게 지키는 것 이다. 따라서 위 아키택처에서 Secure OS에서 개인키를 생성하도록 하고 그곳에서다가만 저장하게 된다면, Android딴에 있는 공격자는 개인키의 탈취가 불가능해 진다. 
 
즉 다음과 같은 시나리오가 가능하다.
  • 사용자는 개인키 생성 요청(Account 생성)을 Secure OS에게 보낸다. ( 이때 데이터가 전송되는것은 메모리를 통해서가 아닌, 하드웨어딴의 안전한 채널을 통해 전송된다.)
  • 개인키 생성 요청을 받은  TrustZone의 OS는 특정 로직에 따라 개인키를 생성하고 저장한다. 여기서 행해지는 모든 행위는 공격자가 논리적으로 알 방법이 없다.
  • 만들어진 개인키를 기반으로 공개키(주소)를 생성한다.
  • 생성된 공개키를 Android OS으로 전송한다.
이런 시나리오를 통해 개인키를 안전하게 생성하고 사용자는 어카운트 주소를 얻을 수 있게 되는 것 이다.
 
그렇다는 트랜잭션의 경우는 어떻게 되는가?
  • 사용자는 트랜잭션을 생성하는데 필요한 파라메터를 Secure OS에게 보낸다.
  • 트랜잭션 생성 요청을 받은 Secure OS는 해당 받은 트랜잭션에 개인키로 사인한다.
  • 사인된 트랜잭션을 Android OS로 전송한다
 
이런 시나리오를 통해 개인키의 노출 없이 트랜잭션에 사인이 가능하다.
 
 
그렇다면 삼섬 블록체인 키스토어의 기본적인 작동 원리를 이해하였다.
이 이야기를 왜 했냐 하면, 결국 이를 가능하게 하는건 이를 가능하게 하는 '하드웨어'가 필요하다는 의미이다..
따라서 본 실습을 하기 위해서는 samsung blockchain keystore를 지원하는 디바이스만을 사용해야 한다. (가상 OS 또한 불가능 하다..)
 
그러면 이제부터 본격적으로 설정을 진행하여 보자.
 
 
 
 
 
삼성 블록체인 SDK는 삼성 개발자 사이트에서 제공하고 있다. (  https://developer.samsung.com/blockchain/ )
이 포스팅에서는 플랫폼 SDK를 사용할것이기 때문에 Platform sdk 버튼을 눌러서 파일을 다운로드 받도록 한다.
 
<사진1. 삼성 개발자 사이트 메인 화면>
 
<사진2. 다운로드 된 aar 파일>
 
다운로드된 sdk 파일은 aar 확장자로 존재한다. 라이브러리를 다운받았으니 새로운 프로젝트를 생성하도록 하겠다.
 
<사진3. 새로운 안드로이드 스튜디오 프로젝트 생성>
 
 
프로젝트를 생성하기 위해 Empty Activity를 생성하였다.  API level은 어쩌피 삼성 최신폰에만 해당 기능을 제공하기 때문에  28로 맞췄다.
프로젝트가 생성되었으면 app/libs에 다운받은 arr 파일을 넣어준 뒤 build.gradle에 dependency를 추가해 줘야 한다.
 
<사진4. import 된 aar 파일>
 
dependencies는 다음과 같다. build.gradle 에 추가해 주면 된다.
build.gradle을 확인하면 미리 작성된 dependency가 존재한다. 해당 내용을 지우지 말고 아래에 추가하는 형식으로 추가해준다.
dependencies {
repositories {
flatDir{
dirs 'libs'
}
}
 
implementation name: 'BlockchainPlatformSDK_1.0.00', ext: 'aar'
 
// network
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
implementation 'com.google.code.gson:gson:2.8.5'
 
// KeyStore SDK
implementation name: 'KeystoreSDK_v1.2.0', ext: 'aar'
 
// web3j
implementation 'org.web3j:core:4.2.0-android'
// for check developer mode
implementation 'org.ini4j:ini4j:0.5.4'
 
// ledger
implementation 'com.ledger.lib:ledger-android-library:1.0.0'
 
// dagger
implementation 'com.google.dagger:dagger:2.21'
annotationProcessor 'com.google.dagger:dagger-compiler:2.21'
 
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50"
 
}
 
이때 repositories 부분의 dirs를 libs로 바꿔준다. 우리가 aar 파일을 libs에 넣었기 때문이다. 다른 저장소에 넣었다면 그것에 맞춰 적어준다.
 
또한 자바를 이용하여 개발을 할때에는 마지막에 kotlin standard library를 추가해 줘야 한다. sdk 자체가 코틀린으로 작성되었기 때문에 이를 추가하지 않으면 FATAL ERROR을 뱉게 된다.
 
 
Source Compatibility와 Target Compatibility를 1.8로 변경해준다.
 
 
다음은 핸드폰에서 블록체인 키스토어를 개발자 모드로 전환해야 한다. (안드로이드 폰의 디버깅 모드는 당연히 필수)
 
설정 -> 생체 인식 및 보안 -> Samsung Blockchain Keystore -> Blockchain Keystore 정보
에 들어가면 Samsung Blockchain Keystore 라는 커다란 문구가 나오는데, 이 문구를 여러번 두르면 개발자 모드로 변환된다.
 
SDK를 이용해 개발하기 위한 기본적인 준비는 완료되었다.
 
 

 

댓글