Conscrypt

Conscrypt 모듈은 보안 개선을 가속화하며 OTA 업데이트에 의존하지 않고 기기 보안을 개선합니다. 또한 Java 코드와 네이티브 라이브러리를 사용하여 Android TLS 구현은 물론 키 생성기, 암호화 및 메시지 다이제스트와 같은 다수의 Android 암호화 기능을 제공합니다. Conscrypt는 오픈소스 라이브러리로 제공되지만 Android 플랫폼에 포함될 때는 일부 전문화가 적용됩니다.

Conscrypt 모듈은 BoringSSL을 사용합니다. BoringSSL은 Google의 OpenSSL 네이티브 라이브러리이며 다수의 Google 제품에서 Conscrypt 코드(Java 및 네이티브 코드 둘 다)와 함께 암호화 및 TLS(Chrome을 대표적인 예로 들 수 있음) 목적으로 사용됩니다. BoringSSL는 정식 출시가 없으며(모든 사용자가 헤드에서 빌드) API 또는 ABI 안정성에 관한 어떠한 보장도 하지 않습니다.

Android 15 변경사항

Android 15에서는 TLS 버전 1.0 및 1.1의 사용을 제한합니다. 이러한 버전은 이전에 Android에서 지원 중단되었지만 이제 Android 15를 타겟팅하는 앱에서는 허용되지 않습니다.

Android 14 변경사항

Android 14에서는 Conscrypt 내에 업데이트 가능한 루트 트러스트 저장소를 도입합니다. CA 인증서(또는 cert)는 Android 및 인터넷 전반에서 사용되는 공개 키의 신뢰할 수 있는 루트를 제공합니다. 이러한 인증서는 적절한 암호화 서명을 보장하기 위해 일상적으로 확인되므로 이를 사용하는 모든 기기에 제공되고 저장되어야 합니다.

메인라인 전에 Android는 시스템 파티션(system/ca-certificates)에 인증서를 저장하고 Android 출시마다 이를 업데이트했습니다. 이제 메인라인을 사용하면 메인라인 트레인 업데이트를 통해 인증서를 더 자주 업데이트할 수 있습니다. 이 새로운 기능은 업데이트 프로세스를 간소화하고, 문제 처리 시간을 단축하며, 기기 전체 기간을 연장하는 데 도움이 됩니다.

Android 14부터 루트 트러스트 인증서가 Conscrypt 모듈 APEX와 시스템 파티션에 저장됩니다. 앱은 계속 자체 인증서를 선택할 수 있고 NetworkSecurityConfig를 사용하여 인증서 동작을 수정할 수 있습니다.

Android 14에는 다음과 같은 기타 Conscrypt 모듈 변경사항이 포함됩니다.

  • AES-CMAC MAC 구현이 추가되었습니다.
  • `PBEwithHmacSHA2-*` MAC 구현이 지원 중단되고 삭제되었습니다.
  • X25519 키, 키 계약, 서명에 관한 제한된 지원이 추가되었습니다.
  • X.509 정확성을 위해 BoringSSL이 업데이트되었습니다.
  • 공개 CertPath API에서 MD5 서명 인증서 지원이 삭제되었습니다. 이러한 인증서는 API 수준 16 이후 TLS 연결에 허용되지 않았습니다.

Android 10 변경사항

Android 9에는 Android 전용의 Conscrypt용 공개 API가 포함되지 않습니다. 대신 Cipher와 MessageDigest를 포함하는 JCA(Java Cryptography Architecture) 및 SSLSocket과 SSLEngine을 포함하는 JSSE(Java Secure Socket Extension)의 표준 클래스를 구현하는 보안 제공자를 사용합니다. 사용자는 이러한 클래스와 상호작용하며 libcore 또는 프레임워크 코드에 의해 일부 비공개 Conscrypt API가 사용됩니다.

Android 10은 javax.net.ssl에서 클래스에 의해 노출되지 않는 Conscrypt 기능에 액세스하기 위해 android.net.ssl의 공개 API 메서드를 소수 추가합니다. 또한 Android 10에는 인기가 낮은 암호화 도구를 Conscrypt 모듈에 포함되지 않은 Android 런타임의 일부로 제공하기 위한 Bouncy Castle의 압축 사본도 포함됩니다.

형식 및 종속 항목

Conscrypt 모듈(com.android.conscrypt)은 Conscrypt Java 코드와 Android NDK 라이브러리(예: liblog)에 동적으로 연결되는 Conscrypt 네이티브 라이브러리를 포함하는 APEX 파일로 배포됩니다. 네이티브 라이브러리에는 NIST의 CMVP(Cryptographic Module Validation Program)를 통해 인증된 BoringSSL 사본(인증서 #3753)도 포함됩니다.

Conscrypt 모듈은 다음과 같은 API를 노출시킵니다.

  • 공개 APIjava.*javax.*의 패키지에 있는 클래스와 인터페이스, android.net.ssl.*에 있는 클래스의 확장 프로그램입니다. 외부 앱 코드는 Conscrypt를 직접적으로 호출하지 않습니다. 플랫폼 API 표준은 이러한 API가 하위 호환성 및 향후 호환성을 유지하도록 해줍니다.
  • 핵심 플랫폼 API는 프레임워크에서 비공개 기능에 액세스하기 위해 사용하는 숨겨진 API입니다. 이러한 API는 비교적 제한되어 있습니다. 가장 큰 사용자인 NetworkSecurityConfig는 Conscrypt 신뢰 관리자(인증서 확인을 위한 구성요소)를 확장하여 네트워크 보안 구성 기능을 구현합니다.
  • 인트라 코어 API는 JCA 및 JSEE 기계에서 반사적으로 호출하는 제로 인수 생성자로 제한됩니다.