Conscrypt

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

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

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 자바 코드와 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 기계에서 반사적으로 호출하는 제로 인수 구성자로 제한됩니다.