corePKCS11 라이브러리 - FreeRTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

corePKCS11 라이브러리

참고

이 페이지의 내용은 최신 상태가 아닐 수 있습니다. 최신 업데이트는 Freertos.org 라이브러리 페이지를 참조하세요.

개요

퍼블릭 키 암호화 표준 #11은 암호화 토큰을 관리하고 사용하기 위한 플랫폼 독립적 API를 정의합니다. PKCS #11은 표준에서 정의한 API와 표준 자체를 의미합니다. PKCS #11 암호화 API는 키 스토리지, 암호화 객체에 대한 get/set 속성 및 세션 의미 체계를 추상화합니다. 이는 일반적인 암호화 객체를 조작하는 데 널리 사용되며, 지정한 함수를 통해 애플리케이션 소프트웨어가 암호화 객체를 애플리케이션 메모리에 노출하지 않고도 사용, 생성, 수정 및 삭제할 수 있기 때문에 중요합니다. 예를 들어 FreeRTOS AWS 참조 통합은 PKCS #11 API의 하위 집합 일부만 사용하여 애플리케이션이 키를 '인식'하지 않고도 전송 계층 보안(TLS) 프로토콜로 인증되고 보호되는 네트워크 연결을 생성하는 데 필요한 비밀(프라이빗) 키에 액세스합니다.

corePKCS11 라이브러리에는 Mbed TLS에서 제공하는 암호화 기능을 사용하는 PKCS #11 인터페이스(API)의 소프트웨어 기반 모의 구현이 포함되어 있습니다. 소프트웨어 모의를 사용하면 개발 속도 및 유연성이 향상되지만, 모의 객체를 프로덕션 디바이스에 사용되는 보안 키 스토리지 전용 구현으로 대체해야 합니다. 일반적으로 TPM(신뢰 플랫폼 모듈), HSM(하드웨어 보안 모듈), Secure Element와 같은 보안 암호화 프로세서 또는 기타 보안 하드웨어 엔클레이브의 공급업체는 하드웨어와 함께 PKCS #11 구현을 배포합니다. 따라서 corePKCS11 소프트웨어 전용 모의 라이브러리의 목적은 프로덕션 디바이스에서 암호화 프로세서 전용 PKCS #11 구현으로 전환하기 전에 신속한 프로토타이핑 및 개발을 가능하게 하는 비 하드웨어 전용 PKCS #11 구현을 제공하는 것입니다.

비대칭 키, 난수 생성, 해싱 등 PKCS #11 표준의 일부만 구현됩니다. 대상 사용 사례에는 소형 임베디드 디바이스에서의 TLS 인증을 위한 인증서 및 키 관리, 코드 서명 확인 등이 포함됩니다. FreeRTOS 소스 코드 리포지토리에서 OASIS 표준 기구로부터 가져온 pkcs11.h 파일을 참조하세요. FreeRTOS 참조 구현에서는 TLS 헬퍼 인터페이스가 SOCKETS_Connect 중에 TLS 클라이언트 인증을 위해 PKCS #11 API를 호출합니다. 1회 개발자 프로비저닝 워크플로우에서 인증을 위한 프라이빗 키와 TLS 클라이언트 인증서를 AWS IoT MQTT 브로커로 가져오기 위해서도 PKCS #11 API를 호출합니다. 이 두 사용 사례(프로비저닝 및 TLS 클라이언트 인증)에서는 PKCS #11 인터페이스 표준의 작은 하위 집합만 구현하면 됩니다.

기능

PKCS #11의 다음 하위 집합이 사용됩니다. 이 목록은 프로비저닝, TLS 클라이언트 인증 및 정리를 지원하기 위해 루틴을 호출하는 순서와 거의 동일합니다. 함수에 대한 자세한 내용은 표준 위원회에서 제공하는 PKCS #11 문서를 참조하세요.

일반 설정 및 제거 API

  • C_Initialize

  • C_Finalize

  • C_GetFunctionList

  • C_GetSlotList

  • C_GetTokenInfo

  • C_OpenSession

  • C_CloseSession

  • C_Login

프로비저닝 API

  • C_CreateObject CKO_PRIVATE_KEY(디바이스 프라이빗 키용)

  • C_CreateObject CKO_CERTIFICATE(디바이스 인증서 및 코드 확인 인증서용)

  • C_GenerateKeyPair

  • C_DestroyObject

클라이언트 인증

  • C_GetAttributeValue

  • C_FindObjectsInit

  • C_FindObjects

  • C_FindObjectsFinal

  • C_GenerateRandom

  • C_SignInit

  • C_Sign

  • C_VerifyInit

  • C_Verify

  • C_DigestInit

  • C_DigestUpdate

  • C_DigestFinal

비대칭 암호화 지원

FreeRTOS 참조 구현은 PKCS #11 2048비트 RSA(서명 전용) 및 NIST P-256 곡선의 ECDSA를 사용합니다. 다음 지침에서는 P-256 클라이언트 인증서를 기반으로 AWS IoT 사물을 생성하는 방법을 설명합니다.

다음 버전 이상의 AWS CLI 및 OpenSSL을 사용 중인지 확인하십시오.

aws --version aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34 openssl version OpenSSL 1.0.2g 1 Mar 2016

다음 절차에서는 aws configure 명령을 사용하여 AWS CLI를 구성했다고 가정합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 aws configure를 사용한 빠른 구성을 참조하세요.

P-256 클라이언트 인증서를 기반으로 AWS IoT 사물을 생성하려면
  1. AWS IoT 사물을 생성합니다.

    aws iot create-thing --thing-name thing-name
  2. OpenSSL을 사용해 P-256 키를 생성합니다.

    openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out thing-name.key
  3. 2단계에서 생성한 키로 서명된 인증서 등록 요청을 생성합니다.

    openssl req -new -nodes -days 365 -key thing-name.key -out thing-name.req
  4. 인증서 등록 요청을 AWS IoT에 제출합니다.

    aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfile thing-name.crt
  5. (이전 명령에서 출력된 ARN에서 참조되는) 인증서를 사물에 연결합니다.

    aws iot attach-thing-principal --thing-name thing-name \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
  6. 정책을 생성합니다. (이 정책은 지나치게 허용적입니다. 개발 목적으로만 사용해야 합니다.)

    aws iot create-policy --policy-name FullControl --policy-document file://policy.json

    다음은 create-policy 명령에 지정되는 policy.json 파일 목록입니다. Greengrass 연결 및 검색을 위해 FreeRTOS 데모를 실행하지 않으려면 greengrass:* 작업을 생략할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
  7. 보안 주체(인증서) 및 정책을 사물에 연결합니다.

    aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"

이제 이 안내서의 AWS IoT 시작하기 단원에 나오는 단계를 따릅니다. 생성한 인증서 및 프라이빗 키를 aws_clientcredential_keys.h 파일에 복사해야 합니다. 사물 이름을 aws_clientcredential.h에 복사합니다.

참고

인증서와 프라이빗 키는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안 위치에 저장해야 합니다.

이식

corePKCS11 라이브러리를 플랫폼으로 이식하는 방법에 대한 자세한 내용은 FreeRTOS 이식 안내서의 corePKCS11 라이브러리 이식을 참조하세요.

메모리 사용

corePKCS11 코드 크기(ARM Cortex-M용 GCC로 생성된 예제)
파일 -O1 최적화 -Os 최적화
core_pkcs11.c 0.8K 0.8K
core_pki_utils.c 0.5K 0.3K
core_pkcs11_mbedtls.c 8.9K 7.5K
총 추정치 10.2K 8.6K