모바일 애플리케이션을 표적으로 삼는 해커가 점점 더 많아지고 있으며, 그 수가 날마다 늘어나고 있습니다. 모바일 애플리케이션에는 사용자 데이터 등 해커가 관심을 갖는 내용이 포함되어 있기 때문입니다. 하드 코딩된(참고, 고정 및 수정 불가) 보안 키, SD 카드에 일반 텍스트로 저장된 개인 정보, 데이터베이스에 암호화되지 않은 상태로 저장된 사용자 이름 및 비밀번호, 수집된 분석 및 일반 텍스트 방식으로 저장된 내용이 원격 서버로 전송됩니다. 이러한 상황은 공격을 더 쉽게(성공적으로) 만듭니다.
암호화 도구를 올바르게 사용하면 민감한 데이터를 보호하고 개인정보 보호 및 데이터 무결성을 보장할 수 있습니다. 반면에 암호화는 사용하기 어렵고 오용되기 쉽습니다. 손상된 암호화(예: 안전하지 않은 알고리즘 사용 또는 바이너리 패키지에 키 하드 코딩)에 주의하세요. 2014년 모바일 분야의 상위 10대 위험 목록을 참조하세요. 그렇다면 이것으로부터 얻을 수 있는 교훈은 무엇입니까? 암호화를 사용하지 않는 것은 바람직하지 않지만, 올바르게 암호화하지 않는 것도 바람직하지 않습니다(소모되는 시간은 말할 것도 없고).
Android 플랫폼에서 보안 애플리케이션을 개발하기 위해 다음에는 쉽고 안전하게 암호화하는 방법을 소개하겠습니다.
먼저 Android 애플리케이션에 통합할 수 있는 몇 가지 일반적인 암호화 라이브러리를 간략하게 소개하겠습니다. 암호화 라이브러리는 암호화 알고리즘, 패딩 방법 및 해시 함수와 같은 도구를 포함하는 암호화 도구 모음입니다.
Bouncy Castle
Legion of the Bouncy Castle은 호주의 공공 복지 단체로 널리 사용되는 클래스 라이브러리인 Bouncy Castle을 만들었습니다. 이 라이브러리는 경량 암호화 API와 JCE(Java Cryptozoology Extensions) 제공자를 모두 제공합니다. Android 플랫폼에는 이미 간소화된 Bouncy Castle의 이전 버전이 내장되어 있습니다(Android 플랫폼에 적응하기 위해 일부 사소한 변경도 이루어졌습니다). 결과적으로 애플리케이션에서 최신 버전의 BouncyCastle 클래스 라이브러리를 빌드하고 사용하려고 하면 클래스 로딩 충돌이 발생합니다.
Spongy Castle
Spongy Castle의 목적은 Android 개발자가 애플리케이션에서 BouncyCastle 라이브러리의 모든 버전을 사용할 수 있도록 하는 것입니다. SpongyCastle은 BouncyCastle 최신 버전의 간단한 리패키지입니다. 모든 org.bouncycastle.* 패키지의 이름은 org.spongycastle.*로 변경되었으며 모든 Java 보안 API 제공자의 이름은 BC에서 SC로 변경되었습니다.
OpenSSL
OpenSSL은 SSL 및 TLS 프로토콜과 공통 암호화 라이브러리를 구현하는 오픈 소스 툴킷입니다. OpenSSL은 Android를 포함한 많은 플랫폼으로 포팅되었습니다. 대안으로, Android NDK를 사용하여 소스에서 빌드한 다음 이를 애플리케이션에 번들로 묶을 수 있습니다.
이제 애플리케이션 목적으로 일부 데이터를 암호화한다고 가정해 보겠습니다. AES 또는 DES 중 어떤 암호화 알고리즘을 사용하시겠습니까? 비밀 키의 길이는 128비트입니까, 256비트입니까? ECB 또는 CBC 중 어떤 암호화 모드를 사용하시겠습니까? 이러한 질문 중 어느 하나에도 대답할 수 없고 타당한 이유도 없다면 원하는 도구를 모두 갖고 있음에도 불구하고 어떤 도구가 무엇인지 전혀 확신할 수 없는 민감한 위치에 있다는 것을 알게 될 것입니다. 사용법과 사용법.
초보자를 위한 Cryptozoology Toolkit이 사용되는 곳입니다. 이러한 툴킷은 멋진 암호화 기능을 구현하지 않으며 위에서 언급한 암호화 라이브러리를 대체하려고 시도하지도 않습니다. 오히려 암호화 기능을 보다 쉽고 안전하게 사용할 수 있도록 하기 위한 목적으로 이러한 라이브러리를 기반으로 구축되었습니다.
일반 암호화 라이브러리와 달리 이러한 툴킷은 일반적으로 알고리즘, 모드, 구조 및 매개변수의 하위 집합만 지원합니다. 이러한 툴킷은 원하는 것이 무엇인지 알고 있지만 사용 방법을 모르거나 결국 보안 솔루션을 확보하는 데 관심이 있는 경우를 대비하여 일반적인 암호화 도구에 대한 합리적인 기본값을 제공합니다. 작동 방식을 더 잘 이해하기 위해 이러한 툴킷 중 몇 가지를 살펴보겠습니다.
키짜르
Keyczar는 원래 Google 보안 팀의 두 구성원이 개발한 오픈 소스 도구 키트 세트입니다. Java, Python 및 C++ 언어로 구현됩니다. 대칭 암호화와 수수료 기반 암호화라는 두 가지 인증 방법을 지원합니다. Keyczar는 알고리즘, 키 길이 및 모드, 키 순환 및 버전 관리, 초기화 벡터 및 인증 코드 자동 생성을 포함한 안전한 기본 설정을 제공하고 국제화를 지원합니다. 툴킷은 JCE(여기)를 기반으로 구축되었으며 Spongy Castle의 보안 공급자를 사용합니다.
AeroGear Crypto
AeroGear Crypto는 AeroGear에서 제공하는 작은 Java 라이브러리입니다. 인증 가능한 대칭 암호화, 타원 곡선 암호화 및 비밀번호 기반 키 파생을 지원합니다. 또한 알고리즘의 명시적인 사양도 제공합니다. AeroGear Crypto는 안드로이드 플랫폼의 Spongy Castle과 다른 플랫폼의 Bouncy Castle에 의존합니다. 라이브러리는 iOS, Windows Phone 및 Cordova에서도 사용할 수 있습니다.
Conceal
Facebook은 SD 카드에 있는 대용량 파일을 아주 적은 메모리로 신속하게 암호화하고 인증하기 위해 Conceal을 개발했습니다. Conceal은 인증과 암호화를 모두 수행할 수 있으며 기본적으로 키 관리 기능도 제공합니다. OpenSSL을 사용하지만 필요한 부분만 포함되어 있어 크기가 85KB에 불과합니다. Conceal 사이트에 게시된 결과는 Bouncy Castle보다 더 나은 것으로 나타났습니다.
다음 표는 위에서 소개한 암호화 라이브러리를 요약한 것입니다. 참고: 위에 설명된 모든 라이브러리는 암호화 초보자가 안전하게 암호화할 수 있도록 허용하지만 고급 개발자는 자유롭게 이러한 기본값을 재정의하고 원하는 대로 모든 암호화 세부 정보를 지정할 수 있습니다(다른 암호화 라이브러리에서와 마찬가지로).
AeroGear Crypto AeroGear Apache 2.0
Facebook BSD 숨기기
Keyczar – Apache 2.0
암호화 라이브러리 개발사 라이선스
결론
모바일 앱 개발자라면 시간(에너지)을 투자해야 앱 사용자 만들기 -친절하고 기능이 풍부하며 눈길을 사로잡지만 앱의 보안을 향상시키는 것도 잊지 마세요. 시작하는 방법을 모르거나 제대로 시작하지 못할까봐 걱정된다면 기사에 언급된 툴킷 중 하나를 선택하여 시작하세요. 어떤 암호화 도구를 사용하기로 결정하든 암호화 알고리즘과 암호화 프로토콜을 직접 구현하는 것은 피해야 합니다. 널리 사용되고 일반적으로 인식되고 테스트된 알고리즘과 프로토콜만 사용해야 합니다.